A64m
от g-машины в смысле? это тоже граф редукшн
A64m
не знаю, как в двух словах сказать
A64m
в двух словах, наверное, что там делается попытка избавится от неизвестных вызовов и приганий, а с учетом полнопрограммного анализа строить эвал и апплай функции как будто все известно, инлайнить их и т.д.
A64m
тут, думаю, уже понятно почему не удалось ни один практичный компилятор так построить пока
Alexander
да, он что-то такое рассказывал
Alexander
что там что-то типа switch-case/state machine в эвалуаторе строится для программы
Alexander
тогда у нас все вызовы это direct jump
Anonymous
@glhfo будет жить. Поприветствуем!
Vitaly
Ребята, кто прилично знает Scala, отзовитесь! Есть пара позиций в JB (Спб/Мюнхен как минимум). Пишите в личку.
Dmitry
офтоп
Maxim
Кстати, почему на главной typeable.io висит лого тинькова?
Alexander
возможно тиньков был их клиентом
Maxim
Да что ты говоришь Какой глубокий вывод)
Maxim
Я вот не нагуглил что именно они для них делали
Maxim
Плохо гуглил впрочем
Alexander
/me ползает по distributed-process и в шоке от лапши
@voidlizard Квопросу о вкусовщине относительно хаскельного кода. Известные метрики применимы и к нему
Leonid 🦇
Некропостинг
саша
а как наиболее красиво сделать: zipWith f x (tail x)?
чот после этого пошли какие-то соревнования по обфускации кода
саша
а как наиболее красиво сделать: zipWith f x (tail x)?
f >$< x >*< tail x только сильно не бейте, если это не работает
Alexander
Некропостинг
Это цитата для Дмитрия. В чате по хаскельным вакансиям он попросил пример того, что в хаскеле можно считать императивной лапшой. Я вспомнил, что такой разговор уже был
Alexander
Вот конкретно с этим я не согласен и готов обсудить, что императивное программирование на Haskell, хоть и лучшее ИП из существующих, но все же императивное. Лейбл "Это же Haskell" не дает автоматически защиты от говнокода и стрельбы в ногу.
Alexander
казалось бы, в хаскелле ничего не осталось такого, чем можно себе в ногу выстрелить - глобальных переменных нет, типы есть
Alexander
Чрезмерное увлечение магией на типах также способно превратить код в неподдерживаемую лапшу, но уже на уровне типов, что, наверное, еще хуже.
Dmitry
Нужно формализовать понятие "лапша", ну а дальше дело за малым -- добавляешь опцию "-Wlapsha" и ок.
Dmitry
ну вот да, лапша тоже начинает отдавать вкусовщиной
Dmitry
как вам код серванта, например? или vinyl ?
Alexander
Нужно формализовать понятие "лапша", ну а дальше дело за малым -- добавляешь опцию "-Wlapsha" и ок.
Если бы это было можно сделать, для всех главных языков уже появился бы инструмент, который это детектирует и предотвращает. Однако феномен лапши существует. Ошибку здесь я вижу в том, что для хаскеллистов то, что не формализовано - не существует, но практика показывает, что в промышленном программировании таких вещей очень много
Alexander
А что значит "выстрелить себе в ногу"?
Это к тому же. Отсутствие формализации не означает отсутствие феномена
Dmitry
linux kernel - промышленное программирование?
Dmitry
коммерческие стеки протоколов?
Dmitry
коммерческие драйвера?
Alexander
как вам код серванта, например? или vinyl ?
Vinyl - еще одна поппытка поиграться на уровне типов и сделать то, что простые смертные ни понять, ни поддерживать не могут. Servant получше, так как его eDSL на типах хотя бы имел целью быть в продакшне. Но это не важно, так как нам не нужно поддерживать ни vynil, ни aervant в нашем коде, и мы можем свести взаимодействие с ними к минимуму.
Dmitry
да ладно. понадобится что-то сделать, чего в серванте нет из коробки - а в нём почти ничего нет из коробки - и очень быстро будете писать и отлаживать во время компиляции код с UndecidableInstances
Dmitry
ну и если ядро линукса, стеки и драйвера - это то самое великое и ужасное Промышленное Программирование - то сам термин смысла не имеет
Alexander
да ладно. понадобится что-то сделать, чего в серванте нет из коробки - а в нём почти ничего нет из коробки - и очень быстро будете писать и отлаживать во время компиляции код с UndecidableInstances
Я - не буду. Я понимаю цену внедрения servant и vinyl в мой проект. Accidental complexity и риски крайне высоки. Но вот хаскеллистам, которые витают где-то высоко, слова "поддерживаемость, accidental complexity, борьба со сложностью", видимо, ни о чем не говорят. Программировать на Haskell можно двумя способами: либо ублажать свой могучий интеллект, либо писать код для всех.
Dmitry
отсутствие типов, отсутствие тестов, отсутствие проектирования, отсутствие чувства прекрасного, копипаста, размазывание ответственности - это всё и есть промышленное программирование в таком случае
Dmitry
что, если не сервант? на чем вебсервисы-то писать?
Alexander
ну и если ядро линукса, стеки и драйвера - это то самое великое и ужасное Промышленное Программирование - то сам термин смысла не имеет
Попробуйте сказать всем, кто этот термин использует, что он не имеет смысла. Можно даже статью написать, запостить куда-нибудь на реддит или хабр. Я могу заранее предсказать реакцию
Dmitry
на йесоде, что ли?
Dmitry
хаха
саша
В том числе как я понял, это выражается в непринятии не "математических" тайпклассов. Всякие там IOReader, IOWriter и прочее
Dmitry
а публика с хабра начинает откладывать кирпичи просто от факта, что кто-то делает не так, как они
Dmitry
в жж достаточно было упомянуть в одном предложении хаскель и разработка, что бы получить сотни комментов срача
Dmitry
пхаха. мне попадались всякие, давно в этом бизнесе
саша
что, если не сервант? на чем вебсервисы-то писать?
А на чем написано большинство веб сервисов?
Dmitry
на Java ?
саша
на Java ?
Не на серванте
Dmitry
ну у нас тут хаскельный чатик
Dmitry
что-то не верится, что сейчас кто-то будет писать вебсервис не на серванте
Dmitry
у нас 2018-ый год, на минутку
Andrey
https://github.com/input-output-hk/cardano-sl/tree/develop/docs как я понял, критерии хорошего и плохого кода размазаны тут
Dmitry
и от тайплевел-халявы - автогенерации документации, клиентского кода, тестов, swagger - никто нп откажется
саша
что-то не верится, что сейчас кто-то будет писать вебсервис не на серванте
Я бы не стал как минимум потому что его тайп левел магию я не понимаю. Хотя я и в хаскеле зелёный совсем.
Dmitry
ну вот сервант как раз и заставляет немного разобраться в тайплевеле
Dmitry
несильно. т.к. есть вещи куда хардкорнее него
Dmitry
абсолютный минимум для 2018-го года.
Andrey
у них же была статья замечательная, где они просто на пальцах объясняют, как дошли до жизни такой
Alexander
вот d-p-client-server жутковат
все что Тим писал жутковато
Dmitry
оч. хороший
Alexander
у меня не хватило сил отревьювить все эти пакеты и переписать
Alexander
тот кто пишет веб сервис не на серванте или пишет сервис на 1.5 ендпоинта или делает это плохо
Alexander
https://github.com/input-output-hk/cardano-sl/tree/develop/docs как я понял, критерии хорошего и плохого кода размазаны тут
Я там, например, много косяков вижу. Начиная от отсутствия структуры и заканчивая тестами в папках самих библиотек
Dmitry
да.
Alexander
сервант даёт автогенерацию кода, даёт автотесты, даёт swagger, даёт проверки сериализации всех данных
Dmitry
все что Тим писал жутковато
Что за Тим и можно пример кода?
Alexander
притаскивает servant-quickchek
Alexander
Что за Тим и можно пример кода?
Tim Watson он половину distributed-process-platform писал
Alexander
все эти супервизоры, клиент-серверы и прочее