

Ilya
18.06.2018
12:13:08
Аж стало интересно вживую посмотреть на этот "экстремально нечитаемый код, где все состоит из макросов со всякими нелокальными goto и прочим. Полное адище"
Я правильно нагуглил https://github.com/richgel999/miniz ? @nexmean
У нас в JetBrains эксперимент проводили - переписали библиотеку miniz с Си на Rust (ну не С++, а Си, окей). miniz - это сейчас типа самая убероптимизированная inflate/deflate либа, быстрее zlib. Соотв. inflate/deflate - это чистая числодробилка. Есть массив байт на входе, нужно получить другой массив байт на выходе. Только алгоритм реализуй. Ну эта "убероптимизированность" miniz выражается в т.ч. в экстремально нечитаемом коде, где все состоит из макросов со всякими нелокальными goto и прочим. Полное адище.
На Rust переписыали буквально по одной функции - Rust с Си превосходно линкуется. Т.е. БУКВАЛЬНО по одной функции переписывали, линковали и прогоняли тесты. Т.е. один в один вся реализация и структура программы сохранены остались. Как переписано было все, уже начали рефакторить. Короче получился очень красивый и читаемый код, просто ни в какое сравнение с оригиналом. Кроме того, блягодаря расту получаем статически гарантируемый type/memory safety. А дальше уже стали ЕГО ОПТИМИЗИРОВАТЬ ЕЩЕ. Потому что код читаемый, понятно что как работает и зачем нужно - можно оптимизивароть. А когда у тебя все на макросах с goto и небезопасно - там хуй что поймешь и боишься что-то трогать. В итоге у нас на 10-20% быстрее оригинала по разным бенчам. ДА, НА РАСТЕ БЫСТРЕЕ ЧЕМ НА СИ. А секрет прост - раст не меньше чем Си дает контроля за тем, какой там код будет сгенерен. Ты пишешь код, и понимаешь, что у тебя в ассемблере будет в этом месте. При этом type/memory/thread safety и вообще красивые абстракции.
к этому


A64m
18.06.2018
12:13:25
да не в портабельности дело
1) ллвм это фактически кланговый бекенд, шаг влево - шаг вправо от плюсов и все работает уже не так хорошо
2) ллвм даже когда нормально работает не лучший плюсовой бекенд

Alexander
18.06.2018
12:13:50

Google

Leonid
18.06.2018
12:13:59
надо расту -fvia-c

Mikhail
18.06.2018
12:14:09
Но с прозрачностью в итоге похуже в gcc. Могут сделать закладку майнящую биткоены

Leonid
18.06.2018
12:14:27

A64m
18.06.2018
12:15:17
но если все идет как идет, наверное, в обозримом будущем ллвм будет во всем лучше гцц

Mikhail
18.06.2018
12:16:29
Я так глубоко не копал, но мне кажется нас ждут истории с непрозрачными компиляторами
Солидити вот точно компилится как-то не так, тащит метаданные в код

Leonid
18.06.2018
12:17:56
а вы фольгой проц оберните

Ilya
18.06.2018
12:21:09
Да я хз, нам пасту в чатик скинул разраб из житбрейнс, ссылку на код он не скидывал. Сам нашёл этот кусок, посмотрел, увидел где же мог раст быть лучше для этой задачи.
ну понятно:) просто похоже на то, что паста какая-то с душком:))
ибо греп по репе даёт всего 8 нахождений кейворда goto, из которых 7 штук находится в одном файле и все как один выглядит так:
if (...)
{
mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
goto handle_failure;
}
где сама метка везде одна и та же:
handle_failure:
mz_zip_array_clear(pZip, &file_data_array);
return MZ_FALSE;
которая, очевидно, как раз сделана для УЛУЧШЕНИЯ читаемости (так-то ничего не мешало впендюрить это очищение и ретурн вместо goto)
И в остальном код тоже довольно чистенький и понятный.
Вывод напрашивается простой: либо это вброс, либо в JetBrains работают просто какие-то терминальные анскиллы (извините), если для них это — "экстремально нечитаемый код, полное адище".

Alister
18.06.2018
12:21:11

Leonid
18.06.2018
12:22:09

A64m
18.06.2018
12:22:35
честно скажу, код который не подходит под характеристику "экстремально нечитаемый код, полное адище" я видел только на паре-тройке ФЯ

Leonid
18.06.2018
12:23:28
в яваскрипте

Alister
18.06.2018
12:24:40

Google

A64m
18.06.2018
12:24:53
по большому счету, "экстремально нечитаемый, полное адище" это первое что ассоциируется у меня со словом код

Alexander
18.06.2018
12:26:06

Darwin
18.06.2018
12:26:13
тут должна быть эта ссылка: http://govnokod.ru/
(онтопик там тоже есть)

A64m
18.06.2018
12:27:39
да, "экстремально нечитаемый, полное адище" можно написать на любом языке.
и почти на всех нельзя не написать

kana
18.06.2018
12:28:08
что значит "почти"
на каком можно не написать?

A64m
18.06.2018
12:28:34
почти на всех нельзя

kana
18.06.2018
12:28:58
исправил, ох уж эти двойные отрицания

A64m
18.06.2018
12:29:15
на фя иногда можно

Alexander
18.06.2018
12:29:53

A64m
18.06.2018
12:30:02
нет

Александр
18.06.2018
12:32:17

A64m
18.06.2018
12:32:46
платит, чтоб писать на расте?

Александр
18.06.2018
12:33:22
Ему платят, очевидно.

A64m
18.06.2018
12:33:46
повезло

Евгений
18.06.2018
12:34:07
Скорее всего очередной блокчейн пишет

Александр
18.06.2018
12:34:31
Не знаю

Евгений
18.06.2018
12:34:42
Ну или в купибилете работает

Google

Ilya
18.06.2018
12:35:11

Alexander
18.06.2018
12:35:15
Мне, кстати, интересно, а сегодня блокчейн индустрию формальная верификация не интересует?

Ilya
18.06.2018
12:35:24

Leonid
18.06.2018
12:35:37

Евгений
18.06.2018
12:35:56

Алексей
18.06.2018
12:36:04
Стану программистом вашего блокчейна

Yuriy
18.06.2018
12:36:07

Евгений
18.06.2018
12:36:17

Yuriy
18.06.2018
12:36:39

Maxim
18.06.2018
12:36:52
http://www.well-typed.com/blog/2018/05/semi-formal-development/
ну я бы не назвал это формальной верификацией

Alexander
18.06.2018
12:37:47

Denis
18.06.2018
12:37:55
что там рассказать нужно?

Евгений
18.06.2018
12:38:10

Denis
18.06.2018
12:38:14
А, про формальную верификацию...

Yuriy
18.06.2018
12:38:21

Denis
18.06.2018
12:38:51
формальная верификация (например, на Liquid) заявлена как одна из будущих идей
но пока она не воплощена в жизнь

Tony
18.06.2018
12:39:47
есть пару проектов кто поверх Солидити делает верификацию

Alexander
18.06.2018
12:40:51
> есть блокчей на идрисе
> репа с одним файлом, и тот README.md

Leonid
18.06.2018
12:41:08
заканчивай уже с картинками

Google

Tony
18.06.2018
12:41:35

Евгений
18.06.2018
12:41:55

Leonid
18.06.2018
12:42:18
или память

Mikhail
18.06.2018
12:42:23

Admin
ERROR: S client not available

Слава
18.06.2018
12:42:38

Alexander
18.06.2018
12:42:43

Евгений
18.06.2018
12:43:04
Ну в общем не надо стикеров, у нас тут это не приветствуется

Слава
18.06.2018
12:44:31

? animufag ?
18.06.2018
12:44:34

Mikhail
18.06.2018
12:45:27

Alexander
18.06.2018
12:45:55

A64m
18.06.2018
12:46:30
интересно, почему нет опции не отображать стикеры? явно же их ненавидит каждый второй

Mikhail
18.06.2018
12:46:49
Или хотя бы поменьше размером, да

Alexander
18.06.2018
12:46:59
тогда часть чятиках будут абсолютно пустыми

Евгений
18.06.2018
12:47:28

A64m
18.06.2018
12:47:38
вроде для стикера есть соответствующий значек/слово

Anton
18.06.2018
12:47:52

Евгений
18.06.2018
12:48:50

Google

Anton
18.06.2018
12:49:07

A64m
18.06.2018
12:49:31

Евгений
18.06.2018
12:50:15
Писать на тотальном языке это верифицировать

A64m
18.06.2018
12:50:24
не совсем

Vladimir
18.06.2018
12:50:35

kana
18.06.2018
12:50:40
"верифицировать завершаемость" наверное, а не корректность

Mikhail
18.06.2018
12:51:31

Vladimir
18.06.2018
12:51:32

Anton
18.06.2018
12:51:34

Tony
18.06.2018
12:51:38

A64m
18.06.2018
12:51:40
с такми же успехом можно сказать, что писать на типизированном языке и запускать, проверяя не зацикливается ли - то же самое что верифицировать

Vladimir
18.06.2018
12:52:00

Anton
18.06.2018
12:52:11
Software Foundations

A64m
18.06.2018
12:52:18
т.е. проверка соотвествия некоей спецификации при этом происходит, но спецификация довольно неинтересная

Alexander
18.06.2018
12:52:18
о, надо бы дочитать