kika: (Default)
[personal profile] kika
Читая обсуждение 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, лямбды или хвостовые рекурсии отлично на такой голове исполняются. А вот стрелки и монады - почему-то нет.

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

Date: 2015-09-13 11:37 pm (UTC)
From: [identity profile] soonts.livejournal.com
Мне почему-то кажется, что функциональные языки не очень нужны.
Те куски из них, которые нужны — лямбды там и хвостовые рекурсии — нынче есть практически во всех относительно современных языках, и в С++, и в Java, не говоря уж про C#.
Вот тут неплохой ответ, рассказывающий почему (http://stackoverflow.com/a/2835936/126995).

Если вы этим занимаетесь только для самообразования или фана, рекомендую купить условный GeForce 9[5678]0 и попробовать CUDA.
IMO намного интереснее с точки зрения программиста.

Date: 2015-09-14 12:09 am (UTC)
From: [identity profile] kika.livejournal.com
Не-не, алгебра типов - это отдельный и очень полезный (если освоить) аттракцион. Если этим инструментом овладеть, то программа практически пишется сама и массы ошибок в ней просто невозможно сделать.

CUDA - это как раз вот железячное хакерство но уже в 21ом веке. Я и на SSE ассемблере писал.

Date: 2015-09-14 03:20 am (UTC)
From: [identity profile] soonts.livejournal.com
>то программа практически пишется сама
Во-первых, очень узкий класс программ.
Во-вторых, написать мало, нужно ещё отладить, поддерживать и развивать.

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

>Я и на SSE ассемблере писал.
Я тоже, и на ассемблере, и позже на SSE интринсиках. Совсем не похоже.

Date: 2015-09-14 08:25 am (UTC)
From: [identity profile] plumqqz.livejournal.com
Если этим инструментом овладеть, то программа практически пишется сама и массы ошибок в ней просто невозможно сделать
Счастливый вы человек. Я тут налетел на ситуацию, когда у юзеров есть сепулькарии, а у сепулькариев - сепульки. Сепулькарии и сепульки мы юзерам раздавали сами и решили, что каждому юзеру навечно свой сепулькарий, а каждому сепулькарию - навечно свои, индивидуальные сепульки. Долго ли, коротко ли, но пришлось добавлять сторонних юзеров с сепулькариями, про которых нас уверили в соблюдении того же принципа.
Только после месячной половой еппли с финотчетами выяснилось, что в выданных данных иные сепулькарии могли побывать в руках нескольких юзеров; ну и с сепульками была та же херня.
Я вот смотрю на вас со стрелками и думаю - блаженны мужи, питающиеся радугой; блаженны эльфы, росы лун полночных вкушающие, блаженны нищие духом, ибо их есть царствие небесное.

Date: 2015-09-14 10:08 am (UTC)
From: [identity profile] kika.livejournal.com
Спасибо за пример. Алгебра типов ровно такую задачу и призвана решать, это можно сказать textbook example.

А зомбировать меня незнанием жизни и тяжелым кровавым энтерпрайзом бесполезно. Я сейчас работаю в компании, производящей софт (причем основной боевой софт) для крупнейших страховых компаний мира. Такого калибра энтерпрайза в РФ практически нет. Сбербанк наверное.

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2015-09-14 11:05 am (UTC) - Expand

(no subject)

From: [identity profile] kika.livejournal.com - Date: 2015-09-14 08:20 pm (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 08:24 pm (UTC) - Expand

(no subject)

From: [identity profile] kika.livejournal.com - Date: 2015-09-14 09:40 pm (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2015-09-14 08:31 pm (UTC) - Expand

Date: 2015-09-14 01:34 am (UTC)
From: [identity profile] lionet.livejournal.com
Immutability — очень даже нужна. Если не за вычислительной эффективностью гоняться, а за безбажностью. А с ними persistent data structures. А тут уже — йок — везде, кроме как в функциональщине, persistent data structures не являются идиоматичными, и тормозят безбожно.

Сейчас программу пишу, одновременно на хаскеле и java. В первом утыкается в Math.acos, во втором — не утыкается. Потому что часть вычислений не используется. А какие именно, заранее сказать сложно. Отсюда и 1:50 vs. 0:16 секунд по перформансу на один цикл, и баги ловить было легче.

Date: 2015-09-14 01:43 am (UTC)
From: [identity profile] kika.livejournal.com
У тебя Х-ль просасывает Яве в 10 раз?

Date: 2015-09-14 02:07 am (UTC)
From: [identity profile] lionet.livejournal.com
Наоборот же. Хаскель: 16 секунд на тест, джава — 110 секунд.

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-14 07:55 am (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2015-09-14 08:03 am (UTC) - Expand

Date: 2015-09-15 09:30 am (UTC)
From: [identity profile] komarov.livejournal.com
да, прикол, я тоже воспринял наоборот))

Date: 2015-09-14 03:06 am (UTC)
From: [identity profile] permea-kra.livejournal.com
Правильные, беспроблемные лямбды есть только в функциональщине. Потому что требуется иммутабельность и сборка мусора.

Оптимизивации хвостовых вызовов в мейнстримных языках нет. (есть частичная в дотнете)

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

>Оптимизивации хвостовых вызовов в мейнстримных языках нет
В 2008 уже оптимизировалось в обычных плюсах (http://stackoverflow.com/a/34129/126995).

Date: 2015-09-14 07:26 am (UTC)
From: [identity profile] permea-kra.livejournal.com
>зато в ряде случаях из-за неё RAM перестаёт хватать,

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

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

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

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

Она не гарантирована. Более того, насколько я помню, с dll она не работает.

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-14 07:56 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 08:24 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-14 08:49 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 11:12 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-14 12:16 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 12:26 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-14 12:46 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 12:51 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-14 01:00 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 01:28 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-14 05:09 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 08:09 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-14 08:32 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 09:48 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-16 06:37 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2015-09-16 10:21 am (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 03:36 pm (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 04:27 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 05:03 pm (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 05:30 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 08:44 pm (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 08:47 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 09:13 pm (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 09:32 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 09:43 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 04:47 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 05:34 pm (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 05:38 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 08:06 pm (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 08:17 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 09:36 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 09:53 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 10:26 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-16 06:45 am (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-16 07:23 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-16 08:54 am (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-16 11:01 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-16 11:49 am (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-16 12:30 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-16 02:32 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-17 03:40 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-17 03:58 am (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-17 04:53 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-17 10:38 am (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-19 04:52 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-19 05:13 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-19 06:22 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-19 06:51 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-20 06:54 am (UTC) - Expand

(no subject)

From: [identity profile] kika.livejournal.com - Date: 2015-09-19 07:01 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-20 07:04 am (UTC) - Expand

(no subject)

From: [identity profile] kika.livejournal.com - Date: 2015-09-20 09:28 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2015-09-14 08:13 pm (UTC) - Expand

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 10:38 pm (UTC) - Expand

Date: 2015-09-14 03:25 am (UTC)
From: [identity profile] rblaze.livejournal.com
Очень нужный кусок из функциональных языков, который есть даже не во всех функциональных языках, это чистые функции. Второй кусок - нормальная система типов, а не как в C++ и Java.

Date: 2015-09-14 03:55 am (UTC)
From: [identity profile] soonts.livejournal.com
>кусок из функциональных языков, который есть даже не во всех функциональных языках, это чистые функции
Это дизайн-решение можно использовать вообще во всех языках, где есть функции или методы.
Compile-time validation сейчас несложно допилить для .NET, потому что Roslyn.

Date: 2015-09-14 04:17 am (UTC)
From: [identity profile] rblaze.livejournal.com
"Посмотрите, как то, что в Хаскеле достигается с помощью монад, в <language name> достигается с помощью внимательности и усидчивости".

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

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 05:18 am (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 05:37 am (UTC) - Expand

(no subject)

From: [identity profile] 109.livejournal.com - Date: 2015-09-14 07:43 am (UTC) - Expand

(no subject)

From: [identity profile] rblaze.livejournal.com - Date: 2015-09-14 07:51 am (UTC) - Expand

Date: 2015-09-14 05:12 am (UTC)
From: [identity profile] kika.livejournal.com
Ну сделайте мне чистые функции на С, например. Так чтобы компилятор проверял, а не Вася, делающий код-ревью.

(no subject)

From: [identity profile] soonts.livejournal.com - Date: 2015-09-14 05:20 am (UTC) - Expand

Date: 2015-09-14 01:50 am (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Вот на форте такой бред не получится; так углы срезать только так.

Date: 2015-09-14 03:10 am (UTC)
From: [identity profile] permea-kra.livejournal.com
Поглядите Abstract Computing Machines: A Lambda Calculus Perspective. Это даст альтернативный взгляд, от тех же машин. Потом заполировать Implementing Lazy Functional Languages on Stock Hardware: The Spineless Tagless G-machine\


Что касается стрелок, то многие их разновидности как раз отлично ложаться на стековую машину в стиле форта.

Date: 2015-09-14 05:18 am (UTC)
From: [identity profile] kika.livejournal.com
Спасибо, выглядит с первого взгляда перспективно

Date: 2015-09-14 06:15 am (UTC)
From: [identity profile] alamar.livejournal.com
List comprehensions в чистом виде упражнения на монаде List.

А монада Maybe - в чистом виде функция с множеством выходов.
Edited Date: 2015-09-14 06:15 am (UTC)

Date: 2015-09-14 06:39 am (UTC)
From: [identity profile] kika.livejournal.com
Для меня в этом тексте слово "монада" совершенно лишнее. И поэтому от частного к общему я перехожу с большим трудом.

И Maybe я воспринимаю никак не как какую-то непонятную монаду, а как union из Nothing и другого union из всех остальных типов (то есть Just).

Date: 2015-09-14 08:08 am (UTC)
From: [identity profile] lionet.livejournal.com
Maybe — это простой тип. А монадой он становится только тогда, когда для него описывают монадическое поведение (через instance Monad Maybe ...). Которое может быть разным, но для Maybe не так много их можно придумать _полезных_. Поэтому иногда и говорят, что Maybe-это монада. Хотя на самом деле правильнее говорить, что для Maybe определена монада.

Проблема в том, что в хаскеле только одну монаду можно определить для типа. Вернее, монад сколько хочешь можно определить, но только одна будет первоклассной — подержанной синтаксическим сахаром, всеми подпорками из Control.Monad, и так далее.

Date: 2015-09-14 10:57 am (UTC)
From: [identity profile] alamar.livejournal.com
К общему "объект" ведь удалось перейти?

Date: 2015-09-14 08:27 pm (UTC)
From: [identity profile] kika.livejournal.com
Нет. я ООП понимал, но никогда не принимал. Для меня ОО - это просто местами довольно ловкий способ обеспечить модульность. Но вся религия вокруг ОО - это чистой воды мусор для мозга.
Это не мешало мне писать на ++, на ATL и WTL, но я "просто исполнял приказ", альтернативой было писать на чистом С, а для винды это еще более мучительно.

ООП на самом деле хорошо ложится на event driven парадигму разработки GUI, и может быть BPO. И все.

Но насколько лучше на GUI ложится концепция сигналов, например, из Elm. Если бы плюсовому программисту под винду несколько лет назад показали бы Elm-овский time traveling debugger, который там фактически просто сам собой зародился, то этот программист бы просто рехнулся.
Edited Date: 2015-09-14 08:28 pm (UTC)

Date: 2015-09-14 07:34 am (UTC)
From: [identity profile] http://users.livejournal.com/_xacid_/
что да то да
я сам пока на стадии наморщеного лба при попытке понять как сделать то что мне кажется я хочу
но это просто нереальный кайф когда на следующий день вдруг всё получилось))

Profile

kika: (Default)
kika

January 2017

S M T W T F S
1234567
89 1011121314
151617181920 21
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 21st, 2017 12:24 pm
Powered by Dreamwidth Studios