A64m
все адище с гц от массового выживания
Dmitry
Кстати, давно мучает вопрос. А почему не сделают в Haskell отключение GC на время? Вот я хочу выполнить какую-то операцию (в IO), делаю turnoffGC, потом быстренько делаю её, а потом снова turnonGC. Если памяти не хватит -- ну это мои проблемы, готов на это пойти.
Dmitry
Можно как-то это сделать?
A64m
в CLR, напрмиер это даже сделано
Dmitry
CLR ?
Dmitry
Что это?
A64m
.net
Dmitry
А
Dmitry
Ну а в Haskell?
A64m
в хаскеле это до недавнего времени был нереалистичный сценарий, вседь все адово аллоцирует
Dmitry
А... А сейчас как?
A64m
недавно потимизатор стал более менее регулярно неаллоцирующие циклы получать и из-за этого повылезали всякие проблемы даже, типа того что треды не переключаются без аллокации и т.д.
A64m
т.е. все рассчитывалось на то что постоянно адовые аллокации
A64m
теперь может и добавят такую фичу, но не факт, просто некому такими вещами заниматься
A64m
ну, формально это, в каком-то смысле, сейчас доступно в хаскеле - во время опасного сишного вызова ничего собираться не будет
Leonid 🦇
в русте кстати есть возможности писать производительный код, но llvm генерит довольно отвратительный asm.
Андрей
Отвратительность его в чем?
Андрей
Читается плохо и не самый
эффективный?
A64m
там емнип проблемы с определением алиазинга, и потому ллвм плохо оптимизирует
Leonid 🦇
алиасинг да. руст мог бы местами лушче детектить и аннотировать. но и С llvm генерит не очень
Leonid 🦇
обсобенно с битами и шифтами
Leonid 🦇
до GCC ему далеко
М
LLVM компилит в свой язык, поэтому
М
Плата за портабельность
Ilya
Аж стало интересно вживую посмотреть на этот "экстремально нечитаемый код, где все состоит из макросов со всякими нелокальными goto и прочим. Полное адище"
Я правильно нагуглил https://github.com/richgel999/miniz ? @nexmean
Ilya
У нас в JetBrains эксперимент проводили - переписали библиотеку miniz с Си на Rust (ну не С++, а Си, окей). miniz - это сейчас типа самая убероптимизированная inflate/deflate либа, быстрее zlib. Соотв. inflate/deflate - это чистая числодробилка. Есть массив байт на входе, нужно получить другой массив байт на выходе. Только алгоритм реализуй. Ну эта "убероптимизированность" miniz выражается в т.ч. в экстремально нечитаемом коде, где все состоит из макросов со всякими нелокальными goto и прочим. Полное адище.
На Rust переписыали буквально по одной функции - Rust с Си превосходно линкуется. Т.е. БУКВАЛЬНО по одной функции переписывали, линковали и прогоняли тесты. Т.е. один в один вся реализация и структура программы сохранены остались. Как переписано было все, уже начали рефакторить. Короче получился очень красивый и читаемый код, просто ни в какое сравнение с оригиналом. Кроме того, блягодаря расту получаем статически гарантируемый type/memory safety. А дальше уже стали ЕГО ОПТИМИЗИРОВАТЬ ЕЩЕ. Потому что код читаемый, понятно что как работает и зачем нужно - можно оптимизивароть. А когда у тебя все на макросах с goto и небезопасно - там хуй что поймешь и боишься что-то трогать. В итоге у нас на 10-20% быстрее оригинала по разным бенчам. ДА, НА РАСТЕ БЫСТРЕЕ ЧЕМ НА СИ. А секрет прост - раст не меньше чем Си дает контроля за тем, какой там код будет сгенерен. Ты пишешь код, и понимаешь, что у тебя в ассемблере будет в этом месте. При этом type/memory/thread safety и вообще красивые абстракции.
к этому
A64m
да не в портабельности дело
1) ллвм это фактически кланговый бекенд, шаг влево - шаг вправо от плюсов и все работает уже не так хорошо
2) ллвм даже когда нормально работает не лучший плюсовой бекенд
саша
Leonid 🦇
надо расту -fvia-c
М
Но с прозрачностью в итоге похуже в gcc. Могут сделать закладку майнящую биткоены
Leonid 🦇
A64m
но если все идет как идет, наверное, в обозримом будущем ллвм будет во всем лучше гцц
М
Я так глубоко не копал, но мне кажется нас ждут истории с непрозрачными компиляторами
М
Солидити вот точно компилится как-то не так, тащит метаданные в код
Leonid 🦇
а вы фольгой проц оберните
Ilya
Да я хз, нам пасту в чатик скинул разраб из житбрейнс, ссылку на код он не скидывал. Сам нашёл этот кусок, посмотрел, увидел где же мог раст быть лучше для этой задачи.
ну понятно:) просто похоже на то, что паста какая-то с душком:))
ибо греп по репе даёт всего 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 работают просто какие-то терминальные анскиллы (извините), если для них это — "экстремально нечитаемый код, полное адище".
Aliester
Leonid 🦇
A64m
честно скажу, код который не подходит под характеристику "экстремально нечитаемый код, полное адище" я видел только на паре-тройке ФЯ
Leonid 🦇
в яваскрипте
Aliester
A64m
по большому счету, "экстремально нечитаемый, полное адище" это первое что ассоциируется у меня со словом код
саша
Darwin
тут должна быть эта ссылка: http://govnokod.ru/
Darwin
(онтопик там тоже есть)
A64m
да, "экстремально нечитаемый, полное адище" можно написать на любом языке.
и почти на всех нельзя не написать
кана
что значит "почти"
кана
на каком можно не написать?
A64m
почти на всех нельзя
кана
исправил, ох уж эти двойные отрицания
A64m
на фя иногда можно
A64m
нет
A64m
платит, чтоб писать на расте?
Alexander
Ему платят, очевидно.
A64m
повезло
Евгений
Скорее всего очередной блокчейн пишет
Alexander
Не знаю
Евгений
Ну или в купибилете работает
саша
Мне, кстати, интересно, а сегодня блокчейн индустрию формальная верификация не интересует?
Ilya
Leonid 🦇
Евгений
Алексей
Стану программистом вашего блокчейна
Cheese
Евгений
Cheese
На ликвиде?
хз, пусть лучше @dshevchenko расскажет
Maxim
http://www.well-typed.com/blog/2018/05/semi-formal-development/
ну я бы не назвал это формальной верификацией
Denis
что там рассказать нужно?
Евгений
Denis
А, про формальную верификацию...
Denis
формальная верификация (например, на Liquid) заявлена как одна из будущих идей
Denis
но пока она не воплощена в жизнь
Anonymous
есть пару проектов кто поверх Солидити делает верификацию