?

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
Читая обсуждение http://ivan-gandhi.livejournal.com/3329246.html и ответы на мой коммент, я вдруг понял почему так тяжело идет. У меня нет никаких проблем барабанить на Erlang'е например, а Purescript, Elm или их идейный отэц Haskell (ну или ML) идет с гораздо большим трудом.

Потому что я пришел в программирование из программирования микропроцессоров. Для меня долгое время компьютер был просто гибкой логической микросхемой, которую можно было запрограммировать на последовательность действий вместо долгого и унылого паяния и протягивания проводов, а потом отладки пробником и паяльником же.

Потом как-то программирование на ассемблере превратилось в программирование на С, но компиляторы для этих микропроцессоров были таковы, что регулярно генерировали последовательности типа

mov bx, ax
mov dx, ax
mov bx, dx
mov ax, bx

Потому что так у него оптимизатор работает, видите ли. Ну или еще почему. И надо было компилировать в ассемблерный листинг, читать его и руками чистить от этого мусора, потому что иначе в ПЗУ не лезло.

А в универе учили как на Фортране ряды Тейлора вычислять, что тоже не прибавляло.

В результате я всегда когда программирую или читаю программу, симулирую в голове стековую-регистровую машину и "исполняю" на ней программу. И какие-нибудь list comprehensions, лямбды или хвостовые рекурсии отлично на такой голове исполняются. А вот стрелки и монады - почему-то нет.

Нужна книжка или статья "Функциональное программирование для недохардверных недоинженеров". Реквестирую у мироздания.

Tags: ,

(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: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: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:rblaze
Date:September 14th, 2015 03:25 am (UTC)
(Link)
Очень нужный кусок из функциональных языков, который есть даже не во всех функциональных языках, это чистые функции. Второй кусок - нормальная система типов, а не как в C++ и Java.
From:ex_juan_gan
Date:September 14th, 2015 01:50 am (UTC)
(Link)
Вот на форте такой бред не получится; так углы срезать только так.
[User Picture]
From:permea_kra
Date:September 14th, 2015 03:10 am (UTC)
(Link)
Поглядите Abstract Computing Machines: A Lambda Calculus Perspective. Это даст альтернативный взгляд, от тех же машин. Потом заполировать Implementing Lazy Functional Languages on Stock Hardware: The Spineless Tagless G-machine\


Что касается стрелок, то многие их разновидности как раз отлично ложаться на стековую машину в стиле форта.
[User Picture]
From:kika
Date:September 14th, 2015 05:18 am (UTC)
(Link)
Спасибо, выглядит с первого взгляда перспективно
[User Picture]
From:alamar
Date:September 14th, 2015 06:15 am (UTC)
(Link)
List comprehensions в чистом виде упражнения на монаде List.

А монада Maybe - в чистом виде функция с множеством выходов.

Edited at 2015-09-14 06:15 am (UTC)
[User Picture]
From:kika
Date:September 14th, 2015 06:39 am (UTC)
(Link)
Для меня в этом тексте слово "монада" совершенно лишнее. И поэтому от частного к общему я перехожу с большим трудом.

И Maybe я воспринимаю никак не как какую-то непонятную монаду, а как union из Nothing и другого union из всех остальных типов (то есть Just).
[User Picture]
From:_xacid_
Date:September 14th, 2015 07:34 am (UTC)
(Link)
что да то да
я сам пока на стадии наморщеного лба при попытке понять как сделать то что мне кажется я хочу
но это просто нереальный кайф когда на следующий день вдруг всё получилось))
My Website Powered by LiveJournal.com