LINUX.ORG.RU

Haskell, зачем он сейчас? Как состояние ФП?

 , , ,


1

7

Всем привет. Помню как появился Haskell и много стали говорить о промышленном применении ФП.

А где сейчас применяется Haskell? Какого его промышленное применение? Зачем он современному миру, кроме тестирования каких-либо подходов?

То же касательно и других ФП-языков - кто-то полноценно жив?

Раз пошла такая тема. Комрады, можете посоветовать литературы, где как-то систематически излагается, как на хаскелле писать производительный код?

И немного философии. Получается, что дешёвых в плане производительности абстракций не так уж и много в этом языке. Ведь чего хочется? Писать обобщённый красивый код, который при этом ещё и быстрый. Эффективная реализация квиксорта на хаскелле не выглядит красивой по любым разумным меркам. Красиво выглядит только неэффективная реализация. Не удаётся абстрагироваться от того, что некоторая упорядоченная коллекция может быть как массивом, так и списком. Все книги по хаскеллю пропитаны духом того, что вот у нас абстрактная traversable, и вам не нужно знать, что там внутри. Оказывается, нужно, если есть дело до производительности. Text вместо String, всё вот это вот.

Код уже не такой красивый (а значит и простой), если нужно заботиться о производительности. При этом всё сложнее, потому что как не писать медленный код на императивных языках - информации навалом, а для функциональных... То есть, если нужно писать что-то производительное, то не очень понятно, какой выигрыш даёт хаскелль: такой же сложный и запутанный код, как и на любом императивном языке, при этом для поддержки нужно в голове держать другую модель вычислений: что-то куда-то подставляется, откладывается, копируется - ятп, в идрисе это была одна из причин, почему сделали не ленивое вычисление.

Понятное дело, когда всё это уже знаешь, всё это может казаться не таким страшным, но вот с моей колокольни всё по-прежнему: либо эффективность, либо изящество. При прочих равных код на императивном языке будет знакомее=>поддерживаемее. Старые добрые передача по ссылке и по значению, для ФВП есть передача указателя на функцию... С учётом этого, Rust кажется лучше, но он имеет уродливый (визуально шумный) синтаксис и почему-то всё никак не взлетит.

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

anonymous ()
Ответ на: комментарий от Deleted

От плюсов и сишек открещиваются везде, где они не необходимы 100%, а там где таки надо, берут людей со стажем в 20 лет, портфолио и рекомендациями.

DSP программируют вчерашние студенты.

seiken ★★★★★ ()
Ответ на: комментарий от seiken

Я тебе больше скажу: хороший студент в разы умнее среднего сишника даже с большим стажем, а багаж теоретических знаний просто на порядки превосходит. Но капиталисту же не это надо.

Deleted ()
Последнее исправление: rj45 (всего исправлений: 1)
Ответ на: комментарий от anonymous

У меня много на гитхабе где автоматом стоит тег «жабоскрипт» из-за того, что первым-вторым файлом шел жабоскрипт для веб-морды. А подавляющее большинство объема кода занимает сервер-сайд на чистой кошерной сишечке.

anonymous ()
Ответ на: комментарий от anonymous

Комрады, можете посоветовать литературы, где как-то систематически излагается, как на хаскелле писать производительный код?

Самая близкая к этой теме книга «Parallel and Concurrent Programming in Haskell». И от того самого чувака, который сейчас в Facebook «промышленно» применяет Haskell.

dave ★★★★★ ()
Ответ на: комментарий от anonymous

... Rust кажется лучше, но он имеет уродливый (визуально шумный) синтаксис

Что касается восприятия кода, то это исключительно зависит от прошлого опыта. Я когда первый раз увидел код на Си, то мне он тоже не понравился.

dave ★★★★★ ()
Ответ на: комментарий от dave

Из того, чем пользовался сам http://anton-k.github.io/ru-haskell-book/book/9.html http://anton-k.github.io/ru-haskell-book/book/10.html http://book.realworldhaskell.org/read/profiling-and-optimization.html

Но этого наверно мало.

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

anonymous ()
Ответ на: комментарий от Deleted

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

Какой бред. Ты правда менеджер?

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Какой бред.

В наше время, собственно, так и было. Ты себя вспомни, теоретических знаний (да и не только теоретических) у тебя было сильно побольше, чем у многих тогдашних практикующих программистов.

Но речь идет о хороших студентах, таких в принципе мало.

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

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

Теоретических знаний о новых технологиях - да, больше, но отнюдь не на порядки; а опыта гораздо больше было у них (не на порядки, но на порядок - легко). И уж совершенно точно я не был в разы умнее их (ум вообще не очень зависит от того, насколько давно ты учился).

И да, они тоже учились по ходу работы, что опять же уменьшало разницу в знаниях.

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

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

Или просто недооцениваешь хороших студентов либо не видел хорошие вузы.

Deleted ()
Ответ на: комментарий от Deleted

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

Вообще нет, я этого не понимаю. Наверное, потому, что я никогда не занимался исключительно сишкой (честно говоря, я вообще никогда сишкой не занимался). А еще я понимаю, что как раз при программировании на Си важно быть «в определенной колее».

Или просто недооцениваешь хороших студентов либо не видел хорошие вузы.

Или я знаю, что «на порядки» означает «больше 100 раз» и что ум мало зависит от образования.

либо не видел хорошие вузы.

Возможно. Но это аргумент уровня «ты не был на краю земли - там обитают великаны».

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 2)
Ответ на: комментарий от anonymous

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

Профилирование на Haskell сложнее из-за ленивости. Тогда могу еще посоветовать после той книги разные доки по GHC, Haskell Boook, wiki и тому подобное. Уделить внимание прагмам INLINABLE / INLINE, PACK, а также узнать больше о list fusion и rewriting rules, но я сам с последними пока не очень дружу.

dave ★★★★★ ()
Ответ на: комментарий от Deleted

длительное занятие сишкой притупляет мозг и вгоняет его в определенную колею

А вот у физиков, которые моделируют на Фортране, что происходит? мозг вытекает?

seiken ★★★★★ ()
Ответ на: комментарий от Metaeblanuje

с чего

с того, что среди всех ml языков из 90х ocaml обладает самым быстрым gc, почему и снискал бешеную популярность в отличии от того же sml и прочих ml подобных. но прикол в том, что он такой быстрый от того, что однозадачен. если сделать в осаml мультикоре он ничем от того же f# отличаться не будет, притом что у f# есть батарейки и вот это всё. чем собственно сообщество и воспользовалось - после ’05-’06 наблюдаем стремительное падение популярности окамла и рост f#, хотя и последний в последние лет 5ть как то тухнет, что очевидно связано с всё более и более фичастыми стандартами с#.

когда только начались разговоры о мультикоре в окамле французы послали всех нахрен, промямлив что то типа от мультикоре толку ноль, а потом начали дразнить (что продолжается годами десятилениями), что вот ещё одна пятилетка и вот вот будет мультикоре. только мультикоре уже никому нафиг в нем не нужен, т.к. те, кому мультикоре был нужен уже давно на f# или том же хацкеле.

На самом деле тут кто-то зрдавую мысль выразил ещё на первой странице, о том, что фп - это просто модное словечко. в 90х все упарывались по ооп и даже менеджеры для бОльших продаж указывали «объектноориентируемый» (вспомни тот же mfc от микрософта), а сейчас этим стал тот самый фп. Хотя на самом деле мы то знаем, что как и любая другая парадигма оно хорошо применимо в каких то задачах, зато в других от него только геморрой.

короче по этой теме в инете достаточно много инфы только на английском. вот например

anonymous ()
Ответ на: комментарий от anonymous

уже не такой красивый, если нужно заботиться о производительности

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

DonkeyHot ★★★★★ ()
Ответ на: комментарий от anonymous

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

В виде Rust они существуют. Что вы так привязались к этому гопник хаскелю? Академики придумали академический язык на основе своих академических представлений, а кто-то удивляется, что он плохо соотносится с реальностью. Он и не должен соотноситься, это не язык для написания программ, это язык для написания диссертаций. Пишешь диссертацию? Нет? Ну и кто тебя застаялет жрать хаскель?

anonymous ()