Антон
Kirill
https://simonmar.github.io/posts/2017-10-17-hotswapping-haskell.html
Kirill
но не из коробки, конечно
Антон
И с существенными ограничениями
Taras 🦀
о, благодарямс
A64m
Антон
Ах да, в Хаскелле строки и числа -- разные вещи. В отличие от
Aliester
Листы еще вспомните
Aliester
Эрланг не задумывался в виде general-purpose язык
A64m
э? вроде похожий синтаксис же)
я хелловорлд компилил)
да он и синтаксически отличается от хаскельного, ну и есть более важные отличия, ПМ в эрланге, например не "линейный" как в хаскеле
> {A, A} = {1, 2}.
"exception error: no match of right hand side value {1,2}"
> {A, A} = {1, 1}.
{1,1}
A64m
ну а синтаксически он больше на пролог похож
Taras 🦀
да он и синтаксически отличается от хаскельного, ну и есть более важные отличия, ПМ в эрланге, например не "линейный" как в хаскеле
> {A, A} = {1, 2}.
"exception error: no match of right hand side value {1,2}"
> {A, A} = {1, 1}.
{1,1}
пример с эрланга, знакомый
насчет линейности не понял
A64m
в эрленговском примере повторение переменных - это проверка на их совпадение, в хаскеле, эмелях и т.д. это так не работает
Anonymous
И Эрланг, и Хаскель - оба рабочие языки с набором библиотек.
Хаскель дольше изучать.
Каждый хорош для своих задач.
Taras 🦀
Max
Флеймообразующая тема
Max
Может - во всех, хочет - не везде.
Anonymous
Наверное, на многих языках можно пытаться переписать программу с другого языка.
Критерий наверное не "можно ли", а "насколько удобно / целесообразно в этом случае"
Andrew
А чат по эрлангу есть же?
Max
https://t.me/erlangrus
Andrew
Спасибо
Taras 🦀
еще есть по эликсиру @proelixir , там тоже эрланг живет)
A64m
Anonymous
На Эрланге написаны много TCP библиотек, несколько web серверов.
На Хаскеле удобнее писать программу со сложной логикой.
Хаскель программы удобнее поддерживать: добавлять, переписывать.
A64m
что такое "программа со сложной логикой"?
Anonymous
По моему: где есть многие сложные структуры данных, данные преобразуются, отбираются.
Тоже, любые программы со многими модулями.
Anonymous
Где логика специфична для данной программы.
В отличие от програм, цель и алгоритмы которых общеизвестны
Зигохистоморфный
Anonymous
Хаскель только с GHC и крут...
?
Taras 🦀
Aliester
GHC и OTP - разные технологии
Anonymous
Речь не о преимуществе языка, а об удобстве для задачи
Aliester
Если уж говорить, то о GHC vs BEAM
Anonymous
Даже если задача узкая.
Эрланг и Хаскель программы хорошо взаимодействуют через TCP
Anonymous
Кстати, и программы на других языках тоже
Aliester
Что?
Anonymous
.. хорошо взаимодействуют через TCP
Anonymous
Java, Nodejs, ...
Aliester
Это самоочевидно
Anonymous
Можно снять ограничение - всё писать на одном языке
Aliester
Звучит как JS-евангелизм
Anonymous
Так не было задумано
Anonymous
Кому как удобнее
Andrew
Эрланг заточен под коммуникации. Идеален для передачи данных, например для трансляции видео.
A64m
ну эрланг-то хоть действительно вроде подо что-то "заточен", хотя и не факт, но в этом смысле он выделяется из общей массы языков, которые уж точно ни подо что не "заточены"
так что вопрос "удобства для задачи" мне представляется мутным
Aliester
Перл заточен под криптографию.
Alexander
своих сырцов
Aliester
/stat@combot
Combot
combot.org/chat/-1001043143583
Combot
combot.org/chat/-1001043143583
A64m
надо сказать, что между 8.2 и 8.4 получающаяся после оптимизации корка ощутимо поменялась.
A64m
в первую очередь в глаза две вещи бросаются
Alexander
?
A64m
во первых, нет вот этих вот обычных заворачиваний анборкснутых результатов всяких сравнений в Bool
let { lvl = tagToEnum# (==# x y) } in
...
case lvl of {
False -> ...
True -> ...
}
вместо них
case ==# x y of {
__DEFAULT -> ...
1# -> ...
}
A64m
во-вторых вот из вот этого вот обычного результата пропихивания вниз по кейсам, листья вот этого вот дерева, выносятся в join объявления
вот в начале такой характерной развесистой функции так и идут join exit1 ... join exit2 и т.д.
A64m
первое выглядит явно лучше, а второе вроде не особо плохо, jump вроде дешевый, правда кода больше, чем если бы эти выходы инлайнились, за счет всей вот этой обвески объявлений всякими сигнатурами и аннотациями
A64m
но как-то все это у меня умудряется быть тормознее чем раньше (но не сильно, напр. процентов на 10)
A64m
можно представить случаи, с которые это вынесение даже лучше, если выходы очень уж много раз используются, что вообще типичный результат этого вот пропихивания вниз по кейсам
Андрей
всех с новым годом!
Андрей
вот такая вот штука рисуется после stack build
Ambiguous type variable ‘e0’ arising from a use of ‘f’
prevents the constraint ‘(GHC.Exception.Exception
e0)’ from being solved.
Андрей
вопрос, неужели нет какого-то "универсального" способа превратить ошибку в строку?
Андрей
падает на коде вроде этого
f:: (Exception e) => String -> IO (Either e L8.ByteString)
anotherF = case f 'blabla' of
Left x -> return $ show e
Right y -> return $ bsToS y
Андрей
то есть меня компилятор просит явно указать тип возможных ошибок
Vasiliy
Left x ->return $ show x
Андрей
ну вот как я понял show и требует явной анотации типа
Aleksei (astynax)
не требует, если инстанс можно выявить однозначно
Vasiliy
У тебя там е вместо х откуда-то взялось
Андрей
да блин, это псевдокод
Андрей
в общем оказалось, что не в show дело
Андрей
или я опять что-то не понял
Андрей
компилятор много где спотыкается, это было только первое сообщение
Андрей
есть f :: (Exception e) => String -> IO (Either e L8.ByteString)
я пишу что-то вроде
anotherfunc = do
result <- f "something"
case result of
Right ok -> ok
Left ex -> show ex
и компилятор ругается на result <- f "something" той ошибкой, которую я показывал выше
Андрей
даже если я Left _ -> 'рыба' пишу, то есть игнорирую, то компилятор зачем-то хочет знать точный тип ошибки
Alexander
e::SomeException -> print e
Alexander
Left e -> show (e:: SomeException)
Alexander
Alexander
могу объяснить как работает, можно про статью про расширяемые исключения почитать
Андрей
ну вот, я не хочу каждый case описывать, вопрос и заключался в том : "можно ли не описывать все возможные варианты"