LINUX.ORG.RU

Потрогать палочкой функциональщину

 


1

4

Привет всем. На фоне последних тем про всякие там лиспы и хаскелли возникло желание тоже стать «крутым» (ибо знание линукса уже крутостью не является) и поглядеть какой-нибудь из них.

А если серьезно, то хочется какой-нибудь функциональный язык, но не древний как экскременты мамонта и такой, чтобы хоть с вероятностью 0.0001 я мог бы применить в разработке. Что посоветуете? F#? Haskell? Scheme? Lisp?

Ответ на: комментарий от dismal_faun

Зависит от кода. В скале есть все, в том числе и возможность писать как на java. В этом случае производительность и расход ресурсов точно такой же, байткод выходит одинаковый (с незначительными особенностями).

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

Пользуясь случаем, спрошу у знающего человека:

Если в перспективе маячит угроза освоения Скалы, то как на этот процесс повлияет знание/незнание Java? Затруднит ли слабое знание Java освоение Scala? Или Scala можно начинать пользовать, как независимый ЯП?

Понимаю, что зависит от задачи. Но пока информации минимум. Поэтому вопросы пока общие.

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

Про то и речь. А функциональщина, она на некоторые задачки позволяет взглянуть под другим углом, поосмыслять «в ширину», так сказать. :) Глядишь, и решение поаккуратнее находится.

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

Знание java очень помогает, именно потому, что работают приложения одинаково, и можно сначала писать как раньше, только с немного другим синтаксисом. Без — тоже можно, почему бы и нет.

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

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

не тяжелее лиспа.

Я здесь не соглашусь, мне легче пошла schema, чем haskell.

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

Да, мне процедурщины за глаза хватает: и для железа, и для алгоритмов.

Кто ж виноват, что твой кругозор — на уровне «язык Си за 21 день».

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

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

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

Понятно. Спасибо. Немного успокоил.

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

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

«Работает — не трожь!» — знаешь такой принцип? Если получается и получается хорошо, зачем мне париться и учить черт-те что? Тем паче, все равно МКшки, да CGI, да всякий софт для работы с железом и/или обработки данных удобнее всего на сях писать.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от note173

Как-то так сложилось. Точнее, предвзятое отношение было раньше. Сейчас я вполне спокойно отношусь и к самому языку, и к приложениям, на нём написанным. Не разделяю шум и крики по поводу «на Java все приложения тормозят». Сам пользую пару Java-приложений — всё нормально, особых тормозов не замечаю. Кому-то интерфейсы java-ские не нравятся, так я и похуже видел. :)

В общем и я не так давно пришёл к позиции:

Неплохой язык для своей области.

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

Да я и не спорю — любой подход, который даёт требуемый результат (с разумными затратами времени и прочих ресурсов) — это нормально. У тебя больше задач с применением матаппарата, у меня больше задач с парсингом текстовых конструкций и прочей обработки текстов, отсюда и разница в выборе инструментов.

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

Если получается и получается хорошо, зачем мне париться и учить черт-те что?

Чтобы получалось лучше.

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

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

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

обработки данных удобнее всего на сях писать.

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

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

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

РазЪ: я не программист. ДЫва: мне другие области нафиг не нужны.

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

Ну покажи мне хоть один пример серьезного софта, написанного не на сях.

Ты сейчас пошутил?

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

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

У, с текстовыми конструкциями я столкнулся, когда начал свою CGI'шную библиотечку делать. Вот там пришлось постичь премудрости string.h

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от SAA

Ты сейчас пошутил?

Нет.

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

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

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

РазЪ: я не программист. ДЫва: мне другие области нафиг не нужны.

Вероятно, это и является причиной узких взглядов на разработку.

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

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

А программистов мне иногда даже жаль становится: столько времени тратить на обезьяний труд… Кошмар!

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

А программистов мне иногда даже жаль становится: столько времени тратить на обезьяний труд… Кошмар!

Они сами выбрали PHP.

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

Ой, не смеши мои тапочки! Пыхпыхеры — программисты… Да это уже хуже Петросяна!

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

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

В гугле, много примеров.

Один, с которым сталкивался я, это xapi, сервис управления виртуальными машинами(если очень грубо сказать), написан на OCaml людьми из Citrix(xen.org).

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

А программистов мне иногда даже жаль становится: столько времени тратить на обезьяний труд

Зато интересно же. Мне вот, например, до сих пор интересно то, чего я ещё не знаю в программировании.

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

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

Но в чём правда твоя, так в том, что времени нужно достаточно много на должное освоение того, чего ещё не знаешь

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

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Rastafarra

Если ты называешь уважение к другому человеку «лизанием», то тоже мимо попал.

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

Ну покажи мне хоть один пример серьезного софта, написанного не на сях.

Практически весь серьезный софт, с которым я за свою жизнь имел дело, был написан на Фортране. Часть на PL/I. Немного на Ada. На Си было сильно меньше, чем на PL/I. Но это, возможно, область такая.

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

В принципе да: фортран я незаслуженно забыл. До сих пор уйма математических библиотек на нем.

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

Откуда такая зависть, на работе недооценивают как профессионала?

профессионального лизателя...? пардон, ты меня как обычно с кем-то путаешь.

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

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

ты меня как обычно с _кем-то_ путаешь

К счастью (для _кого-то_) не путаю.

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

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

можно пример?

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

(пишу по памяти)

async {
  for i = 1 to 10 do
    do! someAsynComp(i)
}

// или list expression

[ for i = 1 to 10 do yield i ]

В последнем случае должно вернуть список [1, .., 10]. В обоих случаях for «преобразуется» в функциональную форму (см. квазицитирование <@ [ for i = 1 to 10 do yield i ] @>).

dave ★★★★★ ()

Из юзабельных и функциональных одновременно - только Хаскел. Все остальное - либо нечитаемое месиво скобок, либо неуклюжие попытки впихнуть хоть какую-то теорию в плотные ООП-костыли из говна и палок, либо экспериментальные языки для задротов.

anonymous ()

Крутым знание функциональщины тебя не сделает.

Я бы посоветовал Scala, если тебя интересует интеграция с ОО парадигмой и практичность. И Haskell, если не интересует.

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

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

Управление ядерными реакторами на си? Ты думаешь есть такие дураки, которые будут писать подобный софт на си? А если сегфолт? Людей то не смеши, дебил.

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

Сообщение было не о том. Если хочется именно сравнения с Haskell, то надо, очевидно, брать другой код. В книгах по F# должны быть сложные примеры с sequence expression. У меня в коде на F#, может быть, тоже есть, но я туда давно не лазил. Мне лень искать. Да и как-то остыл к непереносимым решениям за последнее время. Но найти пример можно, где подходы на F# и Haskell будут разными. Посыл был в том, что вычислительные выражения сложнее нотации do.

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

Управление ядерными реакторами на си? Ты думаешь есть такие дураки, которые будут писать подобный софт на си? А если сегфолт? Людей то не смеши, дебил.

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

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

Да, именно на Си. Как и, допустим, софт для авиации. Но там очень жесткие требования. И верификацию кода, как правило, выполняет отдельная контора. А ты предлагаешь юзать всякие умные языки с непредсказуемым по скорости реакции рантаймом или специальные его(рантайма) real time вариации, которые могут привести к тому, что у тебя скорость реакции не укладывается в требования? Ну ну.

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

Это какашель-то «юзабельный»? Функциональщина вообще не может быть юзабельной. По определению.

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