beldmit: (Программизм)
Dmitry Belyavskiy ([personal profile] beldmit) wrote2021-04-03 05:40 pm

FizzBuzz revisited

Как выжать максимум производительности из FizzBuzz на C

Любопытно, хотя я бы остановился гораздо раньше, потому что я считаю, что maintainability в норме ценнее, чем производительность.
slobin: (Default)

[personal profile] slobin 2021-04-06 01:54 pm (UTC)(link)
Вдогонку: ну и предполагаем, что ваш компилятор реально осилит построить семигигабайтную константу. Я тут поигрался под древней 32-битной WindowsXP (так получилось, не смейтесь больно!), ломается где-то примерно на n=20_000. Но техника в принципе работает, именно что выходная строка строится во время компиляции и кладётся в бинарник, и исходник отличается от максимально наивного ровно на одно ключевое слово. Как и было обещано. Проверял на dlang, но подозреваю, что как минимум на rust, nim и zig так тоже можно, только ключевое слово будет другое. Подозреваю, что даже на современных плюсах последних стандартов уже можно, но тут я полный ноль.

(подумав) Вообще-то можно было на PL/I достаточно полной реализации, но не настолько чисто. Потому что препроцессором PL/I был PL/I (подмножество, но ифы, циклы и операции со строками точно входили... более того, если я правильно помню, то именно в препроцессорном режиме строки были "условно бесконечными" (в настоящем скомпилированном PL/I только с максимальной длиной)).

... No, raba ji brili ga aurmo ...