LINUX.ORG.RU

Racket vs Haskell

 , ,


1

8

Подскажите чем принципиально отличается Haskell от других функциональных языков, в частности — Racket (typed/racket в основном) с точки зрения системы типов и других возможностей?

Из того, что сразу в голову приходит: аппликативный и нормальный порядок вычислений, да чистота Haskell. Что это на практике даёт Haskell'ю? Можно ли писать на Racket в стиле Haskell и получить его преимущества?

нормальный порядок вычислений

И где он в обоих сабжах?

Что это на практике даёт Haskell'ю?

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

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

И где он в обоих сабжах?

Ну так в Хаскеле разве не оно?

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

Ну, мышление пластично, можно себя хоть в терминах машины Тьюринга заставлять мыслить. Вопрос то в том — можно ли тем же самым заниматься на Racket или Haskell — the only one?

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

В Haskell это проще. Racket более «нечист».

мышление пластично, можно себя хоть в терминах машины Тьюринга заставлять мыслить

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

Ну так в Хаскеле разве не оно?

Там call-by-need. Действительно нормальный порядок во всяких системах переписывания термов, вроде Pure.

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

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

Ну в том и вопрос — есть что-то в Хаскеле стоящее, чего днем с огнем не сыщещь больше нигде? А то красивых слов много, а внятного объяснения что дадут лень и прошмонады в повседневном использовании не видно.

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

чего днем с огнем не сыщещь больше нигде?

Годная система типов с тайпклассами. Кроме хаскеля есть только в нескольких совсем неизвестных язычках. Но мне, к примеру, как упоротому APL-щику и без нее хорошо.

Никакого дикого «вау-эффекта» Хаскелль не производит, имхо. Просто язык для любителей чистого ФП.

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

Годная система типов с тайпклассами.

Насколько порядков она более годная нежели typed/racket или там какая нибудь scala? Дает ли её превосходство реальный буст при разработке чего-нибудь достаточно большого или это рюшечки по большей части?

На каких задачах (объем или класс) вообще развитая статическая типизация становится необходимой?

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

Насколько я знаю, ни в typed racket, ни в scala тайпклассов нет.

Дает ли её превосходство реальный буст при разработке чего-нибудь достаточно большого или это рюшечки по большей части?

На каких задачах (объем или класс) вообще развитая статическая типизация становится необходимой?

Ответ на эти два вопроса неоднозначен. Фанаты статики и динамики одновременно и правы, и неправы. Я склоняюсь к тому, что в общем-то статика не нужна при грамотном проектировании.

Еще о хаскеле: на нем можно писать без кучи всяческого ФП-матана, но почему-то почти никто этого не делает.

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

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

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

Ответ на эти два вопроса неоднозначен. Фанаты статики и динамики одновременно и правы, и неправы. Я склоняюсь к тому, что в общем-то статика не нужна при грамотном проектировании.

Ну возможно мне не приходилось видеть грамотно спроектированного ПО, т.к. PHP/Python/Tcl и прочие перлы с рубями с определенного размера проекта становятся практически неподдерживаемым месивом, особенно если проект ведут множество сильно разных по уровню разработчиков.

Хотя, конечно даже с жабой такое постоянно происходит, но там хоть рефакторить можно более-менее безопасно.

Еще о хаскеле: на нем можно писать без кучи всяческого ФП-матана, но почему-то почти никто этого не делает.

Оборачивая все в свои монады и трансформаторы? Может оно и не нужно?))

metadeus
() автор топика
Ответ на: комментарий от buddhist

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

Какой размер команды и кода, сколько писали в человекочасах? Просто, чтобы понимать.

metadeus
() автор топика

вот по теме -> http://xeno-by.livejournal.com/77979.html

Страница 3: Binding occurrences of variables are explicitly annotated with types.

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

Объяснения occurent typing я не нашёл (поискав «occur» до понравившегося выше фрагмента).

occurence typing - сужение типа терма в зависимости от контекста. Типа "(if (string? x) x x)". Если x имеет тип, например, (U String Number), то тогда в первой ветке тип будет String, а во второй - Number.

А вот вопрос: а зачем нужен subtyping для типов, а не для выполнимых ими операций?

Надо понимать, что описанная система типов сама по себе имеет смысл не как теоретическая игрушка, а как инструмент для решения вполне конкретной практической задачи - наиболее выразительная типизация динамической программы с наименьшей затратой усилий. Это накладывает ряд ограничений на систему типов (т.к. язык который мы будем типизировать нам уже дан вместе с семантикой) - как в плане того, чего в этой системе делать никак нельзя, так и в плане того, что там делать обязательно нужно. Вот сабтайпинг для типов там обязательно должен быть, иначе система типов просто не будет работать, вот и все.

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

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

Посмотреть конкретнее можно где-нибудь здесь:
https://sites.google.com/site/baavector/
http://kx.com

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

А за счет чего получается меньший размер кода? Разве есть что-то мощнее лисповых макросов для этой цели?

metadeus
() автор топика
Ответ на: комментарий от iMushroom

Критерий годности приведите. Что я получу при разработке на Clean, чего у меня не будет с Racket? Желательно хотя бы с надуманным примером.

metadeus
() автор топика
Ответ на: комментарий от buddhist

Какой язык вау-эффект производит на тебя?
Вот на меня бесконечные списки произвели впечатление:-) И как в какой-то книге по Хаскеллу площадь многоугольника посчитали(хотя тут дело просто в математике)

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

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

А, понял, это если в символах считать или в KLOC'ах.

А что могут APL/K/J? Различные парадигмы могут? Макросы, там. Компайл-тайм вычисления вообще могут? Какие у них размеры рантаймов и насколько развиты стандартные библиотеки? Нормальный FFI могут? Спасибо.

metadeus
() автор топика
Ответ на: комментарий от buddhist

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

И ещё интересно: DSL, eDSL могут? В модульность? В ООП? Только динамика везде? В статику, не?

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

Ну давайте начнем с того что Clean чистый. Все профиты Clean - профиты ФП.

Поймите правильно, я сам влюблен в метапрограммирование Lisp-семейства. Но Haskell и его потомки - объективно лучше.

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

Ну в том и вопрос — есть что-то в Хаскеле стоящее, чего днем с огнем не сыщещь больше нигде?

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

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

Поймите правильно, я сам влюблен в метапрограммирование Lisp-семейства. Но Haskell и его потомки - объективно лучше.

Ну вот и хотелось бы на конкретных примерах понять в ЧЕМ лучше? Вот конкретный пример в чем лучше метапрограммирование — там где я бы писал кучу классов/кода вручную я могу запилить макрос и сократить свой труд на порядок за счет того, что нужно править только один макрос, а не все эти классы/код.

Теперь представим, что у меня есть ленивость, чистота, развитая система типов. Что она мне даст? Допустим чистота даст возможность тратить меньше времени на отладку чистой функции (один раз отладил — всю жизнь пользуюсь), но я ведь могу и в Racket писать функции без побочных эффектов. А тут в отместку тебе монады и монадное ИО. Я ведь могу на монадах и в Racket писать, но зачем? Заставляет выделять слои правильно? Я сам себя могу заставить, мне не надсмотрщик нужен, а помощник.

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

Ленивость. В каком случае в принципе ленивость по умолчанию это плюс? За всю свою жизнь мне ленивость ещё не разу не потребовалась (если, конечно, не считать макросы ущербными fexpr'ами). А вот энергичность нужна постоянно — ИО опять же. Будет мне ленивость помогать или мешать постоянно?

Ваша объективность на чем построена — на личном опыте? Вы пишите на Хаскеле или Клине свои проекты? То есть то, где вы вольны самостоятельно выбирать язык. Вы знаете хорошо Схему/Лисп и Хаскель и выбираете Хаскель/Клин, так?

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

А тут в отместку тебе монады

Монады - это на самом деле замечательно. Вот, например, только что писал вывод системы частиц в формате xyz с их помощью:

l >>= \(Atom (x,y,z) e) -> printf "%s %f %f %f\n" (pretty e) x y z
imtw
()
Ответ на: комментарий от imtw

Монады - это на самом деле замечательно.

Если это замечательно, то почему не используется в других языках, с нечистой функциональщиной, например? Какой профит реальный от заворачивания всего в монады?

metadeus
() автор топика
Ответ на: комментарий от iMushroom

Начнём с того, что Clean - академический недоязычок, созданный для написания статей и поездок на конференции. Ещё хуже, чем Хаскель. Вы их рассылку-то читали? 99% писем - это «Second call for papers» и «Postgrad position open!» - они там тусуются и факториалы пишут, программировать им некогда.

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

Какой профит реальный от заворачивания всего в монады?

Думаю, безопасность в первую очередь. Можно допускать только те побочные эффекты, которые нужны.

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

Потому что на них пишут такие как ты.

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

Начнём с того, что Clean - академический недоязычок, созданный для написания статей и поездок на конференции. Ещё хуже, чем Хаскель.

У тебя папа-мама был, а чего тогда такой жирный?

metadeus
() автор топика
Ответ на: комментарий от buddhist

Насколько я знаю, ни в typed racket, ни в scala тайпклассов нет.

В Scala классы типов имитируют через implicits. Правда, это то еще зрелище. Не для слабонервных.

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

Они, по крайней мере, код пишут, а не посты в блоге и туториалы по монадам, лол.

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

Думаю, безопасность в первую очередь. Можно допускать только те побочные эффекты, которые нужны.

Я с этим сам прекрасно справлюсь, зачем надсмотрщик мне? Если бы я руководил командой дебилов, которым желательно скрутить руки, то это было бы ок, но зачем себе-то палки в колеса ставить?

Потому что на них пишут такие как ты.

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

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

Ну вот и хотелось бы на конкретных примерах понять в ЧЕМ лучше? Вот конкретный пример в чем лучше метапрограммирование — там где я бы писал кучу классов/кода вручную я могу запилить макрос и сократить свой труд на порядок за счет того, что нужно править только один макрос, а не все эти классы/код.

Макрос это классно, но поддержка его - это очень сложно.

Теперь представим, что у меня есть ленивость, чистота, развитая система типов. Что она мне даст? Допустим чистота даст возможность тратить меньше времени на отладку чистой функции (один раз отладил — всю жизнь пользуюсь), но я ведь могу и в Racket писать функции без побочных эффектов. А тут в отместку тебе монады и монадное ИО. Я ведь могу на монадах и в Racket писать, но зачем? Заставляет выделять слои правильно? Я сам себя могу заставить, мне не надсмотрщик нужен, а помощник.

Даст хороший, стройный код, который легко понять и поддерживать. А чем моднадое ИО не нравится? Да и сами монады? Может вы просто до них не доросли?

Про надсмотрщика - нужен. Человек существо ленивое. В частности можно сказать «зачем жесткая типизация, мне не надо это», но на практике сильно помогает.

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

А вот тут зависит на сколько полная реализация ООП и на сколько вы способны ее использовать как парадигму. Скажем, если сведете в жуткую мешанину из элементов императивщины, ООП и ФП - то будет примерно как в CL.

Ленивость. В каком случае в принципе ленивость по умолчанию это плюс? За всю свою жизнь мне ленивость ещё не разу не потребовалась (если, конечно, не считать макросы ущербными fexpr'ами). А вот энергичность нужна постоянно — ИО опять же. Будет мне ленивость помогать или мешать постоянно?

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

Ваша объективность на чем построена — на личном опыте? Вы пишите на Хаскеле или Клине свои проекты? То есть то, где вы вольны самостоятельно выбирать язык. Вы знаете хорошо Схему/Лисп и Хаскель и выбираете Хаскель/Клин, так?

На личном опыте. Писал проекте на клине, кложуре и коммон лиспе. Проекты на лиспосемействе - до сих пор вспоминаю с содраганием. А вот Клин только теплые ламповые воспоминания пораждает.

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

Читал, подписан. Язык должен развиваться. Что его используют как академический - для меня скорее плюсь. А так - в чем конкретно он хуже хацкеля?

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

За APL не скажу, поскольку там дикий ынтерпрайз везде, расскажу о J.

Различные парадигмы могут?

Да. ФП, ООП, императивщина. Можно писать в бесточечном стиле.

Макросы, там. Компайл-тайм вычисления вообще могут?

Там вообще нет компайл-тайма.

Какие у них размеры рантаймов и насколько развиты стандартные библиотеки?

Размер полного рантайма J64 со всеми загруженными дополнительными модулями (в том числе бинарями gtk) у меня в венде, к примеру — чуть больше 100 МиБ. Стандартная библиотека сильно ориентирована на всякий матан, статистику и визуализацию.

Нормальный FFI могут?

FFI там прямой как палка и достаточно низкоуровневый.

DSL, eDSL могут?

Не видел, чтобы кто-нибудь заморачивался.

В модульность? В ООП?

Могут

Только динамика везде?

Да.

Причины вышеописанных решений кроются, по большей части, в дефолт-буке Айверсона «A Programming Language».

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

Насколько я знаю, ни в typed racket, ни в scala тайпклассов нет.

(google «Type Classes as Objects and Implicits by Bruno Oliveira, Adriaan Moors and Martin Odersky»)

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

Я с этим сам прекрасно справлюсь, зачем надсмотрщик мне? Если бы я руководил командой дебилов, которым желательно скрутить руки, то это было бы ок, но зачем себе-то палки в колеса ставить?

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

не дают считать интегралы, а хотят писать в БД и сокеты.

Что не даёт? Число ваших извилин? Я делал на хаскеле и первое, и второе, и третье.

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

Я с этим сам прекрасно справлюсь, зачем надсмотрщик мне? Если бы я руководил командой дебилов, которым желательно скрутить руки, то это было бы ок, но зачем себе-то палки в колеса ставить?

Не справитесь. Без контроля человек плохо работает.

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

А давайте вспомним в какой организации были разработаны С, UNIX и BSD...Что? Как так не в крупной ТНК?! Не надо принижать академическую составляющую ИТ, без нее практики бы просто не было. Много хороших идей из академической среды вышло и сейчас они в продакшене. А вот недоязыки, которые были разработаны в продакшене для продакшена в большинстве своем загибаются.

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

Макрос это классно, но поддержка его - это очень сложно.

Ну в Коммон Лиспе, конечно, да, но в Racket-то попроще должно быть на порядок.

А чем моднадое ИО не нравится? Да и сами монады? Может вы просто до них не доросли?

Ну вот вы какого ответа ожидаете на такие посылы? Даже если и присутствует эффект Данинга-Крюгера, то таким образом вы его не поборете никак. Я может поэтому и спрашиваю — хочу понять есть там до чего дорастать или нет, судя по тому, как функциональщики зачастую прячутся в свои скорлупки от простых, в общем-то, вопросов, они и сами не очень-то верят в то, что это действительно нужно, а не просто красиво.

В частности можно сказать «зачем жесткая типизация, мне не надо это», но на практике сильно помогает.

Преимущества системы типов я вижу каждый день, особенно когда приходится работать с жаба кодом и его стиранием типов и постоянными кастами, системы типов же мне и в Коммон Лиспе не хватает.

А вот Клин только теплые ламповые воспоминания пораждает.

Не ощущали недостаток каких-то концепций лиспов в Клине? Проект большой был? Успешно реализовали?

metadeus
() автор топика
Ответ на: комментарий от imtw

Человек отвечающий:

Потому что на них пишут такие как ты.
Что не даёт? Число ваших извилин?

называет меня троллем? Шел бы ты отсюда, петушок.

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

Ну в Коммон Лиспе, конечно, да, но в Racket-то попроще должно быть на порядок.

Макрос в любом случае сложнее класса поддерживать. Класс - проще для понимания человека, который видит ваш код в первый раз.

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

Просто отвечать на такие вопросы не имеет смысла особого. Монады просто надо освоить, изучить и начиться применять. Как объяснить чем лучше Lada «калина», чем майбах?

Не ощущали недостаток каких-то концепций лиспов в Клине? Проект большой был? Успешно реализовали?

Небольшой - казуальная игрушка, под офтопик. Работать было приятно, волосы остались чистыми и шелковистыми. После лиспов я перебрался на tcl (с ним связана основная работа), где окончательно привык к макросам. Вот именно гибких макросов tcl и CL мне не хватало. Но когда я хорошо в голове устаканил принципы ФП - понял, что макросов тикля и лиспа мне просто тут не надо.

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

А давайте вспомним в какой организации были разработаны С, UNIX и BSD...Что? Как так не в крупной ТНК?! Не надо принижать академическую составляющую ИТ, без нее практики бы просто не было. Много хороших идей из академической среды вышло и сейчас они в продакшене. А вот недоязыки, которые были разработаны в продакшене для продакшена в большинстве своем загибаются.

Да я к этому не аппелирую, это был ответ на слишком толстый троллинг. Про загибание продакшн-языков согласен, поэтому такие вопросы и задаю на форуме.

metadeus
() автор топика
Ответ на: комментарий от iMushroom

Макрос в любом случае сложнее класса поддерживать. Класс - проще для понимания человека, который видит ваш код в первый раз.

Согласен, сложность у них выше функций. Но достаточно ли ФВП для замены макросов? Не ощущается ли потребность — «вот тут бы одним макросом я половину кода заменил»?

Просто отвечать на такие вопросы не имеет смысла особого. Монады просто надо освоить, изучить и начиться применять. Как объяснить чем лучше Lada «калина», чем майбах?

Ок. Я вас услышал.

Вот именно гибких макросов tcl и CL мне не хватало. Но когда я хорошо в голове устаканил принципы ФП - понял, что макросов тикля и лиспа мне просто тут не надо.

Всякие Template Haskell'и они же не просто так появляются? Или их неосилляторы делают?

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

Согласен, сложность у них выше функций. Но достаточно ли ФВП для замены макросов? Не ощущается ли потребность — «вот тут бы одним макросом я половину кода заменил»?

Нет, а зачем? Потребляя сгущенку с блинами вы думаете - а вот сейчас бы шашлчка с водочкой?

Всякие Template Haskell'и они же не просто так появляются? Или их неосилляторы делают?

А ООП в lisp'ах просто так появилось? Его неосиляторы ФП и макросов сделали?

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

Нет, а зачем? Потребляя сгущенку с блинами вы думаете - а вот сейчас бы шашлчка с водочкой?

Не люблю аналогии, но если хотите — я всегда думаю как бы чего нибудь более вкусного есть, а если придется дублировать код, то это не очень вкусные блины или шашлык.

А ООП в lisp'ах просто так появилось? Его неосиляторы ФП и макросов сделали?

Нет. ООП пусть будет — иногда очень полезно => шаблоны в функциональщине нужны?

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

А кто вам не даёт считать интегралы, работать с БД и сокетами? Что я могу ответить на этот вопрос, если другие люди с этим работают и просят ещё?

Ты якобы хочешь изучить чистый язык со строгой типизацией, одной из главных особенностей дизайна которого является ориентированность на корректность кода. И при этом говоришь «зачем меня ограничивают? я ведь такой умный!». Ну если ты так думаешь, не нужен тебе этот язык.

Шел бы ты отсюда, петушок.

Здесь тебе не двач. В следующий раз донесу куда следует.

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

Вот что называется многопоточный лиспосрач.

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

Что я могу ответить на этот вопрос, если другие люди с этим работают и просят ещё?

Ты лучше обрати внимание в ответ на что ты такой комментарий получил и сделай выводы.

Ну если ты так думаешь, не нужен тебе этот язык.

Неужели непонятно, что я хочу узнать ПОЧЕМУ это другим нужно, и что они получают взамен на практике.

Здесь тебе не двач. В следующий раз донесу куда следует.

И что? Меня зойбанят на форуме? Ууу, как я буду после того жить...

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

Неужели непонятно, что я хочу узнать ПОЧЕМУ это другим нужно, и что они получают взамен на практике.

Я тебе привёл тебе пару примеров.

Ты лучше обрати внимание в ответ на что ты такой комментарий получил и сделай выводы.

Раскрываю мысль: под «такими как ты» я подразумевал людей, которым лень изучать новое «ведь и так всё можно сделать».

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

Я тебе привёл тебе пару примеров.

Видимо под слоем троллинга я не заметил мыслей. Посмотрю ещё раз.

Раскрываю мысль: под «такими как ты» я подразумевал людей, которым лень изучать новое «ведь и так всё можно сделать».

Ну вот ты чо правда такой медленный? Люди «которым лень изучать новое» сидят на форумах и обсуждают системы типизации и чистоту языков, чтобы сменить или расширить рабочие инструменты? Мне прям такая лень изучать новое, что я скурил все ваши SICP'ы, PCL'и, Learn Haskell For The Great Good, и TAPL'ы.

metadeus
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.