?

Log in

No account? Create an account
Читая обсуждение http://ivan-gandhi.livejournal.com/3329246.html и… - Cyril Pertsev
September 13th, 2015
02:21 pm

[Link]

Previous Entry Share Next Entry

(91 comments | Leave a comment)

Comments
 
[User Picture]
From:soonts
Date:September 13th, 2015 11:37 pm (UTC)
(Link)
Мне почему-то кажется, что функциональные языки не очень нужны.
Те куски из них, которые нужны — лямбды там и хвостовые рекурсии — нынче есть практически во всех относительно современных языках, и в С++, и в Java, не говоря уж про C#.
Вот тут неплохой ответ, рассказывающий почему.

Если вы этим занимаетесь только для самообразования или фана, рекомендую купить условный GeForce 9[5678]0 и попробовать CUDA.
IMO намного интереснее с точки зрения программиста.
[User Picture]
From:kika
Date:September 14th, 2015 12:09 am (UTC)
(Link)
Не-не, алгебра типов - это отдельный и очень полезный (если освоить) аттракцион. Если этим инструментом овладеть, то программа практически пишется сама и массы ошибок в ней просто невозможно сделать.

CUDA - это как раз вот железячное хакерство но уже в 21ом веке. Я и на SSE ассемблере писал.
[User Picture]
From:soonts
Date:September 14th, 2015 03:20 am (UTC)
(Link)
>то программа практически пишется сама
Во-первых, очень узкий класс программ.
Во-вторых, написать мало, нужно ещё отладить, поддерживать и развивать.

>железячное хакерство но уже в 21ом веке
На первый взгляд обычный C-подобный язык.
Если приглядеться и попытаться сделать что-то хоть немного нетривиальное, станет видно, что модель исполнения кардинально отличается от всего, что было до GPU, и от ассемблера, и от джавы, и от хаскеля этого вашего.

>Я и на SSE ассемблере писал.
Я тоже, и на ассемблере, и позже на SSE интринсиках. Совсем не похоже.
[User Picture]
From:plumqqz
Date:September 14th, 2015 08:25 am (UTC)
(Link)
Если этим инструментом овладеть, то программа практически пишется сама и массы ошибок в ней просто невозможно сделать
Счастливый вы человек. Я тут налетел на ситуацию, когда у юзеров есть сепулькарии, а у сепулькариев - сепульки. Сепулькарии и сепульки мы юзерам раздавали сами и решили, что каждому юзеру навечно свой сепулькарий, а каждому сепулькарию - навечно свои, индивидуальные сепульки. Долго ли, коротко ли, но пришлось добавлять сторонних юзеров с сепулькариями, про которых нас уверили в соблюдении того же принципа.
Только после месячной половой еппли с финотчетами выяснилось, что в выданных данных иные сепулькарии могли побывать в руках нескольких юзеров; ну и с сепульками была та же херня.
Я вот смотрю на вас со стрелками и думаю - блаженны мужи, питающиеся радугой; блаженны эльфы, росы лун полночных вкушающие, блаженны нищие духом, ибо их есть царствие небесное.
[User Picture]
From:kika
Date:September 14th, 2015 10:08 am (UTC)
(Link)
Спасибо за пример. Алгебра типов ровно такую задачу и призвана решать, это можно сказать textbook example.

А зомбировать меня незнанием жизни и тяжелым кровавым энтерпрайзом бесполезно. Я сейчас работаю в компании, производящей софт (причем основной боевой софт) для крупнейших страховых компаний мира. Такого калибра энтерпрайза в РФ практически нет. Сбербанк наверное.
[User Picture]
From:lionet
Date:September 14th, 2015 01:34 am (UTC)
(Link)
Immutability — очень даже нужна. Если не за вычислительной эффективностью гоняться, а за безбажностью. А с ними persistent data structures. А тут уже — йок — везде, кроме как в функциональщине, persistent data structures не являются идиоматичными, и тормозят безбожно.

Сейчас программу пишу, одновременно на хаскеле и java. В первом утыкается в Math.acos, во втором — не утыкается. Потому что часть вычислений не используется. А какие именно, заранее сказать сложно. Отсюда и 1:50 vs. 0:16 секунд по перформансу на один цикл, и баги ловить было легче.
[User Picture]
From:kika
Date:September 14th, 2015 01:43 am (UTC)
(Link)
У тебя Х-ль просасывает Яве в 10 раз?
[User Picture]
From:lionet
Date:September 14th, 2015 02:07 am (UTC)
(Link)
Наоборот же. Хаскель: 16 секунд на тест, джава — 110 секунд.
[User Picture]
From:komarov
Date:September 15th, 2015 09:30 am (UTC)
(Link)
да, прикол, я тоже воспринял наоборот))
[User Picture]
From:permea_kra
Date:September 14th, 2015 03:06 am (UTC)
(Link)
Правильные, беспроблемные лямбды есть только в функциональщине. Потому что требуется иммутабельность и сборка мусора.

Оптимизивации хвостовых вызовов в мейнстримных языках нет. (есть частичная в дотнете)
[User Picture]
From:soonts
Date:September 14th, 2015 03:29 am (UTC)
(Link)
>требуется иммутабельность
Про иммутабельность можно спорить. Это убирает конечно некоторый класс ошибок, зато в ряде случаях из-за неё RAM перестаёт хватать, многопоточность сложно сделать, иногда дизайн портится.

>Оптимизивации хвостовых вызовов в мейнстримных языках нет
В 2008 уже оптимизировалось в обычных плюсах.
[User Picture]
From:permea_kra
Date:September 14th, 2015 07:26 am (UTC)
(Link)
>зато в ряде случаях из-за неё RAM перестаёт хватать,

Это уже сильно другой вопрос.

>многопоточность сложно сделать,

Ну это таки неправда.

>В 2008 уже оптимизировалось в обычных плюсах.

Она не гарантирована. Более того, насколько я помню, с dll она не работает.
[User Picture]
From:rblaze
Date:September 14th, 2015 03:25 am (UTC)
(Link)
Очень нужный кусок из функциональных языков, который есть даже не во всех функциональных языках, это чистые функции. Второй кусок - нормальная система типов, а не как в C++ и Java.
[User Picture]
From:soonts
Date:September 14th, 2015 03:55 am (UTC)
(Link)
>кусок из функциональных языков, который есть даже не во всех функциональных языках, это чистые функции
Это дизайн-решение можно использовать вообще во всех языках, где есть функции или методы.
Compile-time validation сейчас несложно допилить для .NET, потому что Roslyn.
[User Picture]
From:rblaze
Date:September 14th, 2015 04:17 am (UTC)
(Link)
"Посмотрите, как то, что в Хаскеле достигается с помощью монад, в <language name> достигается с помощью внимательности и усидчивости".

Чистые фунции это не дизайн-решение, это когда я уверен, что стажер, допиливающий что-то там в потрохах библиотеки, при попытке облажаться получит от компилятора линейкой по рукам. И я хотел бы посмотреть на работоспособные compile-time проверки хотя бы для F#, с учетом того, что он до макушки набит нечистым.
My Website Powered by LiveJournal.com