(no subject)
Sep. 13th, 2015 02:21 pmЧитая обсуждение http://ivan-gandhi.livejournal.com/3329246.html и ответы на мой коммент, я вдруг понял почему так тяжело идет. У меня нет никаких проблем барабанить на Erlang'е например, а Purescript, Elm или их идейный отэц Haskell (ну или ML) идет с гораздо большим трудом.
Потому что я пришел в программирование из программирования микропроцессоров. Для меня долгое время компьютер был просто гибкой логической микросхемой, которую можно было запрограммировать на последовательность действий вместо долгого и унылого паяния и протягивания проводов, а потом отладки пробником и паяльником же.
Потом как-то программирование на ассемблере превратилось в программирование на С, но компиляторы для этих микропроцессоров были таковы, что регулярно генерировали последовательности типа
Потому что так у него оптимизатор работает, видите ли. Ну или еще почему. И надо было компилировать в ассемблерный листинг, читать его и руками чистить от этого мусора, потому что иначе в ПЗУ не лезло.
А в универе учили как на Фортране ряды Тейлора вычислять, что тоже не прибавляло.
В результате я всегда когда программирую или читаю программу, симулирую в голове стековую-регистровую машину и "исполняю" на ней программу. И какие-нибудь list comprehensions, лямбды или хвостовые рекурсии отлично на такой голове исполняются. А вот стрелки и монады - почему-то нет.
Нужна книжка или статья "Функциональное программирование для недохардверных недоинженеров". Реквестирую у мироздания.
Потому что я пришел в программирование из программирования микропроцессоров. Для меня долгое время компьютер был просто гибкой логической микросхемой, которую можно было запрограммировать на последовательность действий вместо долгого и унылого паяния и протягивания проводов, а потом отладки пробником и паяльником же.
Потом как-то программирование на ассемблере превратилось в программирование на С, но компиляторы для этих микропроцессоров были таковы, что регулярно генерировали последовательности типа
mov bx, ax
mov dx, ax
mov bx, dx
mov ax, bx
Потому что так у него оптимизатор работает, видите ли. Ну или еще почему. И надо было компилировать в ассемблерный листинг, читать его и руками чистить от этого мусора, потому что иначе в ПЗУ не лезло.
А в универе учили как на Фортране ряды Тейлора вычислять, что тоже не прибавляло.
В результате я всегда когда программирую или читаю программу, симулирую в голове стековую-регистровую машину и "исполняю" на ней программу. И какие-нибудь list comprehensions, лямбды или хвостовые рекурсии отлично на такой голове исполняются. А вот стрелки и монады - почему-то нет.
Нужна книжка или статья "Функциональное программирование для недохардверных недоинженеров". Реквестирую у мироздания.
no subject
Date: 2015-09-13 11:37 pm (UTC)Те куски из них, которые нужны — лямбды там и хвостовые рекурсии — нынче есть практически во всех относительно современных языках, и в С++, и в Java, не говоря уж про C#.
Вот тут неплохой ответ, рассказывающий почему (http://stackoverflow.com/a/2835936/126995).
Если вы этим занимаетесь только для самообразования или фана, рекомендую купить условный GeForce 9[5678]0 и попробовать CUDA.
IMO намного интереснее с точки зрения программиста.
no subject
Date: 2015-09-14 12:09 am (UTC)CUDA - это как раз вот железячное хакерство но уже в 21ом веке. Я и на SSE ассемблере писал.
no subject
Date: 2015-09-14 03:20 am (UTC)Во-первых, очень узкий класс программ.
Во-вторых, написать мало, нужно ещё отладить, поддерживать и развивать.
>железячное хакерство но уже в 21ом веке
На первый взгляд обычный C-подобный язык.
Если приглядеться и попытаться сделать что-то хоть немного нетривиальное, станет видно, что модель исполнения кардинально отличается от всего, что было до GPU, и от ассемблера, и от джавы, и от хаскеля этого вашего.
>Я и на SSE ассемблере писал.
Я тоже, и на ассемблере, и позже на SSE интринсиках. Совсем не похоже.
no subject
Date: 2015-09-14 08:25 am (UTC)Счастливый вы человек. Я тут налетел на ситуацию, когда у юзеров есть сепулькарии, а у сепулькариев - сепульки. Сепулькарии и сепульки мы юзерам раздавали сами и решили, что каждому юзеру навечно свой сепулькарий, а каждому сепулькарию - навечно свои, индивидуальные сепульки. Долго ли, коротко ли, но пришлось добавлять сторонних юзеров с сепулькариями, про которых нас уверили в соблюдении того же принципа.
Только после месячной половой еппли с финотчетами выяснилось, что в выданных данных иные сепулькарии могли побывать в руках нескольких юзеров; ну и с сепульками была та же херня.
Я вот смотрю на вас со стрелками и думаю - блаженны мужи, питающиеся радугой; блаженны эльфы, росы лун полночных вкушающие,
блаженны нищие духом, ибо их есть царствие небесное.no subject
Date: 2015-09-14 10:08 am (UTC)А зомбировать меня незнанием жизни и тяжелым кровавым энтерпрайзом бесполезно. Я сейчас работаю в компании, производящей софт (причем основной боевой софт) для крупнейших страховых компаний мира. Такого калибра энтерпрайза в РФ практически нет. Сбербанк наверное.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-09-14 01:34 am (UTC)Сейчас программу пишу, одновременно на хаскеле и java. В первом утыкается в Math.acos, во втором — не утыкается. Потому что часть вычислений не используется. А какие именно, заранее сказать сложно. Отсюда и 1:50 vs. 0:16 секунд по перформансу на один цикл, и баги ловить было легче.
no subject
Date: 2015-09-14 01:43 am (UTC)no subject
Date: 2015-09-14 02:07 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2015-09-15 09:30 am (UTC)no subject
Date: 2015-09-14 03:06 am (UTC)Оптимизивации хвостовых вызовов в мейнстримных языках нет. (есть частичная в дотнете)
no subject
Date: 2015-09-14 03:29 am (UTC)Про иммутабельность можно спорить. Это убирает конечно некоторый класс ошибок, зато в ряде случаях из-за неё RAM перестаёт хватать, многопоточность сложно сделать, иногда дизайн портится.
>Оптимизивации хвостовых вызовов в мейнстримных языках нет
В 2008 уже оптимизировалось в обычных плюсах (http://stackoverflow.com/a/34129/126995).
no subject
Date: 2015-09-14 07:26 am (UTC)Это уже сильно другой вопрос.
>многопоточность сложно сделать,
Ну это таки неправда.
>В 2008 уже оптимизировалось в обычных плюсах.
Она не гарантирована. Более того, насколько я помню, с dll она не работает.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-09-14 03:25 am (UTC)no subject
Date: 2015-09-14 03:55 am (UTC)Это дизайн-решение можно использовать вообще во всех языках, где есть функции или методы.
Compile-time validation сейчас несложно допилить для .NET, потому что Roslyn.
no subject
Date: 2015-09-14 04:17 am (UTC)Чистые фунции это не дизайн-решение, это когда я уверен, что стажер, допиливающий что-то там в потрохах библиотеки, при попытке облажаться получит от компилятора линейкой по рукам. И я хотел бы посмотреть на работоспособные compile-time проверки хотя бы для F#, с учетом того, что он до макушки набит нечистым.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-09-14 05:12 am (UTC)(no subject)
From:no subject
Date: 2015-09-14 01:50 am (UTC)no subject
Date: 2015-09-14 03:10 am (UTC)Что касается стрелок, то многие их разновидности как раз отлично ложаться на стековую машину в стиле форта.
no subject
Date: 2015-09-14 05:18 am (UTC)no subject
Date: 2015-09-14 06:15 am (UTC)А монада Maybe - в чистом виде функция с множеством выходов.
no subject
Date: 2015-09-14 06:39 am (UTC)И Maybe я воспринимаю никак не как какую-то непонятную монаду, а как union из Nothing и другого union из всех остальных типов (то есть Just).
no subject
Date: 2015-09-14 08:08 am (UTC)instance Monad Maybe ...). Которое может быть разным, но для Maybe не так много их можно придумать _полезных_. Поэтому иногда и говорят, что Maybe-это монада. Хотя на самом деле правильнее говорить, что для Maybe определена монада.Проблема в том, что в хаскеле только одну монаду можно определить для типа. Вернее, монад сколько хочешь можно определить, но только одна будет первоклассной — подержанной синтаксическим сахаром, всеми подпорками из Control.Monad, и так далее.
no subject
Date: 2015-09-14 10:57 am (UTC)no subject
Date: 2015-09-14 08:27 pm (UTC)Это не мешало мне писать на ++, на ATL и WTL, но я "просто исполнял приказ", альтернативой было писать на чистом С, а для винды это еще более мучительно.
ООП на самом деле хорошо ложится на event driven парадигму разработки GUI, и может быть BPO. И все.
Но насколько лучше на GUI ложится концепция сигналов, например, из Elm. Если бы плюсовому программисту под винду несколько лет назад показали бы Elm-овский time traveling debugger, который там фактически просто сам собой зародился, то этот программист бы просто рехнулся.
no subject
Date: 2015-09-14 07:34 am (UTC)я сам пока на стадии наморщеного лба при попытке понять как сделать то что мне кажется я хочу
но это просто нереальный кайф когда на следующий день вдруг всё получилось))