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 компилит в свой язык, поэтому
М
Плата за портабельность
саша
Плата за портабельность
У GCC емнип с поддержкой платформ получше, так что такой себе аргумент
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) ллвм даже когда нормально работает не лучший плюсовой бекенд
саша
Аж стало интересно вживую посмотреть на этот "экстремально нечитаемый код, где все состоит из макросов со всякими нелокальными goto и прочим. Полное адище" Я правильно нагуглил https://github.com/richgel999/miniz ? @nexmean
Да я хз, нам пасту в чатик скинул разраб из житбрейнс, ссылку на код он не скидывал. Сам нашёл этот кусок, посмотрел, увидел где же мог раст быть лучше для этой задачи.
Leonid 🦇
надо расту -fvia-c
М
Но с прозрачностью в итоге похуже в gcc. Могут сделать закладку майнящую биткоены
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 работают просто какие-то терминальные анскиллы (извините), если для них это — "экстремально нечитаемый код, полное адище".
A64m
честно скажу, код который не подходит под характеристику "экстремально нечитаемый код, полное адище" я видел только на паре-тройке ФЯ
Leonid 🦇
в яваскрипте
A64m
по большому счету, "экстремально нечитаемый, полное адище" это первое что ассоциируется у меня со словом код
A64m
агда, скала, раст?
тут 0 фя из 3. ну, если считать пруф ассистент Я, то 1 из 3
Darwin
тут должна быть эта ссылка: http://govnokod.ru/
Darwin
(онтопик там тоже есть)
A64m
да, "экстремально нечитаемый, полное адище" можно написать на любом языке. и почти на всех нельзя не написать
кана
что значит "почти"
кана
на каком можно не написать?
A64m
почти на всех нельзя
кана
исправил, ох уж эти двойные отрицания
A64m
на фя иногда можно
саша
на фя иногда можно
ну хз, алгоритмы всё же проще описывать в императивном стиле, не?
A64m
нет
Alexander
https://github.com/0x7CFE https://github.com/kpp
Да, кстати. С Димой Кашициным мы общаемся, и он как раз сменил плюсы. Теперь пишет на Расте за деньги.
A64m
платит, чтоб писать на расте?
Alexander
Ему платят, очевидно.
A64m
повезло
Евгений
Скорее всего очередной блокчейн пишет
Alexander
Не знаю
Евгений
Ну или в купибилете работает
Ilya
Скорее всего очередной блокчейн пишет
Раньше был принцип 'Everything is better with Bluetooth', а теперь 'Everything is better with Blockchain'
саша
Мне, кстати, интересно, а сегодня блокчейн индустрию формальная верификация не интересует?
Ilya
Раньше был принцип 'Everything is better with Bluetooth', а теперь 'Everything is better with Blockchain'
даже велосипед на блокчейне есть, крутишь педали, а он майнит https://hightech.fm/2018/06/17/bicycle
Алексей
Стану программистом вашего блокчейна
Cheese
Мне, кстати, интересно, а сегодня блокчейн индустрию формальная верификация не интересует?
в Cardano всё формально верифицировано. или тебя вся индустрия вместе взятая интересует?
Cheese
На ликвиде?
хз, пусть лучше @dshevchenko расскажет
Maxim
http://www.well-typed.com/blog/2018/05/semi-formal-development/ ну я бы не назвал это формальной верификацией
саша
в Cardano всё формально верифицировано. или тебя вся индустрия вместе взятая интересует?
Ну больше индустрия в целом. Всё же блокчейн крайне критичен к безопасности. Стоит, например, вспомнить инцидент с парити, когда милионы амеркинских рублей оказались безвозвратно залочены.
Denis
что там рассказать нужно?
Denis
А, про формальную верификацию...
Cheese
что там рассказать нужно?
у вас блокчейн верифицированный?
Denis
формальная верификация (например, на Liquid) заявлена как одна из будущих идей
Denis
но пока она не воплощена в жизнь
Anonymous
есть пару проектов кто поверх Солидити делает верификацию