Search
Write a publication
Pull to refresh
40
0
Данил Сидорук @eoanermine

Программист на C++. Организатор C++ Moscow

Send message

Никак не связан с Zero Cost Conf или какой-нибудь другой крупной конференцией (вроде C++ Russia), но о том, чтобы каждый отдельный доклад также оформлять в виде отдельной статьи, думал при проведении собственных местячковых митапов.

Главный момент, который отбивает желание от идеи: переконвертировать доклад (который суть есть презентация + речь) в статью не так просто. Когда ты рассказываешь с презентацией и когда пишешь статью — это совсем разные стили. Просто совместить текст презентации с тем, что ты наговорил, и назвать это статьей, не получится. Так можно попробовать сделать, но в большинстве случаев получится страшная фигня :)

Ну и из этого следует, что если хочешь, чтобы конференция (митап) также была оформлена в виде статей, это каждого докладчика надо напрягать, чтобы он отдельно ещё и статью писал. А кто умеет хорошо выступать — не факт, что умеет хорошо писать. И большинство это не хочет делать и большинству это не надо.

А если речь про наклепать статей с ссылкой на видео и транскрибированными вопросами-ответами — это как-то совсем не круто.

А Gemini API key пунктом выше по ссылке? Его же вроде бесплатно дают?

Кажется, у них был уже с примерно таким же названием доклад на C++ Russia или где-то ещё, и там был не clang, а что-то своё

P.S. Пока что нагуглил только презентацию (https://pvs-studio.ru/ru/blog/video/11143/), но я точно помню, что когда-то где-то что-то было такое от них :)

Тщательно погуглил и нашёл что-то очень похожее на текст с таблички: https://inscriptions.packhum.org/text/285093?hs=67-79

Ну, по крайней мере, «сантаграмма» и «ретэсэнекен» (на картинке помечены синим) присутствуют на своих местах (9 строка в тексте по ссылке, «σαντα, γραμματεύσαντα» и 20-я строка в тексте по ссылке, ἀρετῆς ἕνεκεν)

Я сам давно учил древнегреческий и мало, так что решил обратиться к переводчику, который нашел, что на Реддите говорят, что он лучше всего древнегреческий переводит так (там максимум 400 символов за раз перевести можно):

The council of the Phaselite and the people honored Kolalim Exakestus with the fifth honors, a good and noble man and of the first rank of the city, who served as chief magistrate until the end, having been gymnasiarch, secretary of the council, priest, and twice prytanis, and also having been overseer of the gymnasiarchate and of public works, having held all the offices with great care, so that in each office...

Переводчику, конечно, тоже веры не много, но тут уже ручками можно со словарем поработать (что мне лень). Но уже как минимум наводит на сомнения в правильности перевода ChatGPT.

«Главная проблема цитат в интернете в том, что люди сразу верят в их подлинность», В. И. Ленин. Из статьи:

Жан Бодрийяр в «Обществе потребления» (1970): «Покупая iPhone, вы платите не за функции, а за миф о принадлежности к "креативному классу"».

Так сосиски же ещё к гречке. Ну и ожидание, пока вода закипит :)

Плюсую. Хотел заценить — зашёл на сайт, увидел, что там весь контент это видео, разочаровался, и ушел :(

P.S. По всей видимости, ни один из стандартных атрибутов нельзя применять к единице трансляции. Но для кастомных аттрибутов стандарт оставляет лазейку:

attribute-declaration:
   attribute-specifier-seq ;

Except where otherwise specified, the meaning of an attribute-declaration is implementation-defined.

Видимо, упоминание о том, что атрибуты могут быть применены к единицам трансляции, писалось именно с этим attribute-declaration на уме, что реализация может определить, что он значит «применить атрибут к единице трансляции» и будет при своём праве.

Но так как атрибуты могут использоваться в C++ коде практически везде и применяться практически ко всему: к типам, переменным, функциям, именам, блокам кода или целым единицам трансляции

Прочитал и задумался: а как это..? Погуглил стандарт и он правда говорит, что могут атрибуты применяться к единицам трансляции:

Attributes specify additional information for various source constructs such as types, variables, names, contract assertions, blocks, or translation units.

Но потом говорит:

Each attribute-specifier-seq is said to appertain to some entity or statement, identified by the syntactic context where it appears ([stmt], [dcl], [dcl.decl]).

А в какой позиции должен стоять атрибут, чтобы он применился к единице трансляции — так и не понял

  1. Тут нет никакой оптимизации для trivially copyable. У вас тут буквально семантически эквивалентный код. Семантически эквивалентный, но вы во втором случае зачем-то делаете бесполезный piecewise construct.

template <typename K>
void insert(K&& key, Value&& value) {
    if constexpr (std::is_trivially_copyable_v<Value>) {
        // Быстрая вставка для простых типов (int, double и т.д.)
        buckets.emplace_back(std::forward<K>(key), std::forward<Value>(value));
    } else {
        // Медленная, но безопасная для сложных типов
        buckets.emplace_back(std::piecewise_construct,
                           std::forward_as_tuple(std::forward<K>(key)),
                           std::forward_as_tuple(std::forward<Value>(value)));
    }
}

  1. Прозрачное сравнение это же не обязательно под строки? Концепт, подходящий только под частный случай — как-то не ок.

  2. Почему вообще код (ниже процитирован код из статьи) закладывается на то, что K — это std::string?

template <typename K>
void insert(K&& key) {
    using CleanKey = std::remove_cvref_t<K>; // Удалили const, &, volatile
    static_assert(std::is_same_v<CleanKey, std::string>, "Должен быть std::string!");
    // ...
}
  1. Эээ.. Каким образом это вообще insert? Да, что вы разошлись — тут вы правы

  void insert(Key key, Value value) {
      std::atomic_ref<Key>(key).store(key);
  }

Это если по поверхности пройтись.

Там в самой статье пишут, что участников исследования, которые заявили, что „ранее участвовали в подобных экспериментах“, исключали.

И что каждый из участников был экзаменующим максимум в 4 диалогах (от 1 до 4)

Новость про статью без ссылки на саму статью. Пришлось погуглить, вот: https://arxiv.org/abs/2503.23674

По разделу «Incremental Growth» в https://go.dev/blog/swisstable я понял, что размер Go-шной Swiss Table может вырасти максимум на 1024 за раз. А «не Swiss Table» реализация в Go удваивает своей размер: https://github.com/golang/go/blob/b70244ff7a043786c211775b68259de6104ff91c/src/runtime/map_noswiss.go#L1118, поэтому и такой график.

MSVC в общем не славится своими оптимизациями. Может, GCC или clang бы соптимизировал в один Canvas[0][0]

@AskePitВы можете расшарить код на godbolt.org, чтобы проверить теорию? (clang trunk, по идее, все используемые вами фичи должен поддерживать точно; может, и gcc trunk, но не уверен)

4 из 5 вопросов — азы, которые подробно рассказываются в каждом учебнике. Интересные у вас собеседования.

В оригинале написано

Send 1K bytes over 1 Gbps network = 44ns

Это не делает число менее странным, но кроме того там в комментариях есть пояснение:

QUESTION: It's very surprising to me that a main memory reference takes longer than sending 1K over a gigabit network.

ANSWER: Because they're comparing two different things. The main memory reference is latency, the 1K is a throughput measurement.

Ну и всё, теперь вы сможете играть в динозаврика у себя в консоли!

Да что-то не компилируется..

eoanermine@eoanermine:~/Desktop$ nano non-crossplatform-game.cpp
eoanermine@eoanermine:~/Desktop$ clang++ non-crossplatform-game.cpp 
non-crossplatform-game.cpp:1:10: fatal error: 'conio.h' file not found
    1 | #include <conio.h>
      |          ^~~~~~~~~

Как думаете, сколько сейчас пользователей у приложения?

50?

1

Information

Rating
549-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Developer
Middle
C++
C
Python