LINUX.ORG.RU

[функциональщина тред][вопрос к специалистам] что выбрать?


0

1

На работе занимаюсь обработкой текстов на естественном языке.

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

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

А раз так, задумался я над тем какой язык выбрать для реализации. Собрав задницу в кулак и мозг в голову, я прошерстил интернет на предмет того каким решением можно воспользоваться в данной области, по результатам были отобраны следующие языки: Prolog, OCaml, Lisp, Scheme, Haskell и, как это ни странно, Python и Erlang.

Маленькое уточнение: требуется кроссплатформенное решение (windows, linux, macos) с возможностью компиляции в байт-код, хорошо бы иметь потоки, GUI не особо нужны, но будут плюсом, ide - неважно. Ещё один важный момент: наличие коммерческих реализаций с целью дальнейшего на них перехода или, как вариант, серьёзного бэкграунда.

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

  • Prolog - собственно существуют довольно вменяемые открытые и коммерческие реализации, однако общее состояние дел большее напоминает заброшенную ферму (например, разные реализации интерпретатора могут использовать разный синтаксис).
  • OCaml - неплохой претендент, немного стагнирует в своём развитии, но имеет существенную поддержку в лице INRIA (и небольшой буст со стороны в виде F#).
  • Lisp - весьма разносторонний язык, есть весьма вменяемая свободная реализация (Clozure CL; SBCL, увы, *nix oriented) и мега-буст с точки зрения коммерческих реализаций (Allegro CL, LispWorks), есть так же реализация под Java VM.
  • Scheme - сводный брат Lisp, ситуация обстоит приблизительно так же, хотя непонятно что с коммерческими реализациями и вообще Scheme имеет репутацию академического языка.
  • Haskell - довольно молодая и таки тёмная лошадка, есть некоторый зоопарк в реализациях, коммерческие средства отсутствуют, присутствует некоторый перекос ориентации в сторону *nix.
  • Python - довольно годный язык, но поддержка функциональной парадигмы там реализована довольно слабо + наличествуют всякие выкрутасы (типа GIL).
  • Erlang - годный Prolog-like язык, но меня смущает его ориентация на телеком.

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

Сам пока склоняюсь к Lisp.

Собственно, товарищи опытные функциональщики, нужен Ваш совет относительно данной ситуации, что бы использовали Вы (что использовали Вы), что будет более/менее годное для решения подобного класса задач, какие есть подводные камни. И, самое главное, какие по Вашему мнению языки вляются более перспективными, на какие в первую очередь стоит тратить своё время.

Уф! Дописал. Всем откликнувшимся большое спасибо заранее. :)

ЗЫ brainf*ck и иже с ним не предлагать.

★★★★★

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

>> во-первых почему Вы так считаете?

Потому, что это был первый и последний проект такого рода на CL и Yahoo его таки переписала т.к. поддерживать было некому. По прошествии почти 12-ти лет можно сказать, что ничего такого особенного, что было реализовано в Viaweb (кстати вот оно - http://smallbusiness.yahoo.com/ecommerce/) и нереализуемо другими языками/платформами сегодня, там нет.

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

>> >> вспоминается опыт Viaweb

Кстати, вот что пишет сам Грэхэм:

"... Другая особенность нашего софта заключалась в том, что он был написан на языке программирования Lisp. Viaweb вначале состоял из двух частей: редактора, написанного на Lisp'е, который использовался для построения сайтов, и системы обработки заказов, написанной на C. Большую часть первой версии составлял Lisp, так как система обработки заказов была маленькая. Позже мы добавили еще два модуля, генератор изображений на C, и программу для администрирования, написанную большей частью на Perl'е. ..."

Т.е. на лиспе там была только часть - рисовалка сайтов, все остальное - помесь перла и С.

cathode
()

На работе занимаюсь обработкой текстов на естественном языке.

А PAIP не читали? Там много интересных вещей рассматривается - как раз относительно естественных языков тоже (ну может не очень серьёзные грамматики, но в целом есть что посмотреть). Язык - Common Lisp :)

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

> Потому, что это был первый и последний проект такого рода на CL

Хм, какого рода? Как это понимать?

Yahoo его таки переписала т.к. поддерживать было некому.


Гы, вы работали в это время в Yahoo? Откуда инфа, что переписали именно по этому?

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

>>Clozure CL нативно работает на windows x86/x64_64 включая треды.

это в нём и подкупает :)

Весьма сомнительная радость :) Писал я на CL многопоточную числодробилку. Под линаксом в SBCL всё работало как часы, а вот под виндой в CCL всё было очень и очень жалко. Так и выпилил многопоточность из виндовой версии.

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

>> Гы, вы работали в это время в Yahoo? Откуда инфа, что переписали именно по этому?

Да, блин, с Грэхэмом водку пил, вод под нее родимую он мне все рассказал.

Погуглить не судьба? Если нет то вот тебе линк http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg02367.html

Хм, какого рода? Как это понимать?

В меру своей испорченности, конечно.

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

>> хорошо слился, грамотно, поздравляю

угу, мне самому нравится.

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

> Если нет то вот тебе линк

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

В меру своей испорченности, конечно.


Т.е. раскрыть смысл фразы вы не в состоянии?

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

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

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

>> Т.е. раскрыть смысл фразы вы не в состоянии?

А что смысл так глубоко закопан? Покажи мне еще один удачный Web-проект на CL размаха уровня Viaweb, и я заберу свои слова назад.

Хм, разве это было официальное заявление представителей Yahoo?

А ты думаешь они такое заявление сделают? Типа мы такие длбо*бы, купили кучу кода на лиспе и теперь не знаем что с ним делать, так? Я думаю вряд-ли они такое скажут.

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

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

А вот тоже самое только не тормозное можно?

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

На работе занимаюсь обработкой текстов на естественном языке.

А PAIP не читали? Там много интересных вещей рассматривается - как раз относительно естественных языков тоже (ну может не очень серьёзные грамматики, но в целом есть что посмотреть). Язык - Common Lisp :)

смотрел, но там немного в сторону, у меня Artificial Intelligence. Structures and Strategies for Complex Problem Solving

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

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

Ну, что же. Лисп будет хорошим выбором (лисп - это не только common lisp, но и clojure тоже). Только как ты перенесешь культурный шок, который ты неизбежно испытаешь после перехода с плюсов? Мне кажется, что для этого мозги должны работать определенным образом, а иначе получится всего лишь «продвинутый Си++ на лиспе». Впрочем, если тебе повезет найти решение для своей задачи, то при некоторых обстоятельствах потом сможешь вернуться снова к своим плюсам, если захочешь :)

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

Clozure CL нативно работает на windows x86/x64_64 включая треды.

это в нём и подкупает :)

Весьма сомнительная радость :) Писал я на CL многопоточную числодробилку. Под линаксом в SBCL всё работало как часы, а вот под виндой в CCL всё было очень и очень жалко.

а под linux ccl как себя показал? может дело в тонкой разнице между sbcl и ccl?

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

> Хм, разве это было официальное заявление представителей Yahoo?

а они должны были прессконференцию устроить и по всем ТВ каналам заявить, что, код на лиспе пришлось переписать на С/С++, и вот десять томов с объяснения почему?

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

Только как ты перенесешь культурный шок, который ты неизбежно испытаешь после перехода с плюсов?

да не будет его, я на лиспе раньше начал писать чем на С++ (речь конечно идёт о студенческих поделках - ничего серьёзного) :)

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

а от них никуда не денешься, пока ничего лучше не придумали в этой области, правда вот появляются всякие вещи типа C/Python, C/OCaml, но они пока не сильно распространены среди работодателей

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

> о как ты перенесешь культурный шок, который ты неизбежно

испытаешь после перехода с плюсов?


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

Мне кажется, что для этого мозги должны работать определенным

образом, а иначе получится всего лишь «продвинутый Си++ на лиспе»



С чего бы это? Мозги они либо работают, либо нет. Что такое «определённым образом»?

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

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

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

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

>> Хм, разве это было официальное заявление представителей Yahoo?

А ты думаешь они такое заявление сделают? Типа мы такие длбо*бы, купили кучу кода на лиспе и теперь не знаем что с ним делать, так? Я думаю вряд-ли они такое скажут.

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

купили же эту идею, ни какую другую, да? значит было то самое конкурентное преимущество о котором говорил Грехэм

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

> они должны были прессконференцию устроить и по всем ТВ каналам заявить

Кто сказал? Просто не стоит доверять мнению Грэхэма о том, почему «эти бездари» переписали «его любимую программу». Грэхэм вообще не очень адекватен, а уж по такому вопросу... Ключевым является именно вопрос «почему переписали», а что при этом повторно выберут CL, естественно, было крайней маловероятно.

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

> Ключевым является именно вопрос «почему переписали»

«current engineers didn't understand Lisp and were too afraid to learn it.» - вы думаете, что он соврал и истинная причина не в этом?

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

> вы думаете, что он соврал и истинная причина не в этом?

Конечно. Может слово «соврал» и не совсем то, но если бы там использовалась нормальная технологическая база, то никто бы не стал не стал переписывать. Сфига и зачем? CL не настолько редкий язык, что бы нельзя было найти несколько человек на проект стоимостью в 50 лимонов. Но Грэхэм же наверняка не считал, что его проект говно с точки зрения технологии и не имеет перспектив развития, поэтому, конечно, проще объяснить всё тем, что «они не понимаю и не хотят понимать».

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

Потому, что это был первый и последний проект такого рода на CL и Yahoo его таки переписала т.к. поддерживать было некому.

И? Бабки Грэм с товарищем получил? Получил. Пупок при этом не развязался, геморрой не вылез, конкуренты не съели? Нет, нет, нет.

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

А ты думаешь они такое заявление сделают? Типа мы такие длбо*бы, купили кучу кода на лиспе и теперь не знаем что с ним делать, так? Я думаю вряд-ли они такое скажут.

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

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

а под linux ccl как себя показал? может дело в тонкой разнице между sbcl и ccl?

ccl в плане маш.кода сильно хуже sbcl.

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

> а под linux ccl как себя показал? может дело в тонкой разнице между sbcl и ccl?

ccl в плане маш.кода сильно хуже sbcl.

а под винду есть вообще вменяемые реализации CL, исключая коммерческие?

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

а под винду есть вообще вменяемые реализации CL, исключая коммерческие?

Что ты имеешь в виду по «вменяемыми». Если качество маш.кода, то платный AllegroCL и особо платный LispWorks всё равно хуже SBCL ;)

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

а под винду есть вообще вменяемые реализации CL, исключая коммерческие?

Что ты имеешь в виду по «вменяемыми».

чтобы качества машинного кода было не «сильно хуже» :) на самом деле это не особо критичный параметр, всё критичное к скорости будет написано на С/С++

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

>> Когда покупают раскрутившийся стартап [...]

Вот и я говорю, что весь хай вокруг лиспа в разрезе истории с viaweb - пучтышка.

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

> Он как раз вот написал статью про Яху

Хм, дата стоит свежая, но у меня такое впечатление, что я всё это уже читал, при чём не один раз, и кажется сразу в нескольких его эссе ;)

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

> Вот и я говорю, что весь хай вокруг лиспа в разрезе истории

с viaweb - пучтышка.


А вот с этим, что пустышка, согласен. Но только если и есть этот хай, то его подымают люди знакомые с лиспом в основном по статьям Грэхэма, а не те, кто реально на нём пишет.

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

Вот и я говорю, что весь хай вокруг лиспа в разрезе истории с viaweb - пучтышка.

Грэм обосновывает успех стартапа тем, что морда магазина на лиспе писалась и дополнялась очень быстро. Быстрее, чем могли сделать конкуренты. Если на лиспе разработка получается быстрее, чем на <подставить нужное>, то это конкурентное преимущество лиспа перед <подставить нужное>.

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

>Да, блин, с Грэхэмом водку пил, вод под нее родимую он мне все рассказал.

Грэм. Пол Грэм.

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

>> подымают люди знакомые с лиспом в основном по статьям Грэхэма, а не те, кто реально на нём пишет.

где же эти мифические люди, которые на нем реально пишут...

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

> где же эти мифические люди, которые на нем реально пишут...

все уже собрались - mv, archimag( Love5an не в счет ), спрашивай у них, что хотел

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

>я имел в виду в сравнении с Lisp, конечно же
CL быстрый. Код, компилируемый в SBCL до уровня хотя бы жабы оптимизируется легко.
Ну, разумеется, если и использовать возможности, сравнимые с той же жабой. А то часто бывает - понавтыкают обобщенных функций, CLOS классов, вычислений на bignum'ах, а потом орут - ой, оно тормозит.
При желании можно оптимизировать и до уровня Си. Ну, естественно, если и писать как на Си, опять же.

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

Это было актуально в далеком 1998-м.

Зарабатывать деньги на конкурентном преимуществе всегда актуально.

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

Это все? )))

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

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

> где же эти мифические люди, которые на нем реально пишут...

Люди не мифические, а вполне реальные. Работаю, а ЛОР как бы не центр вселенной и далеко не всем он нравится. А вы с какой целью интересуетесь? Вероятно, самый большой штат лисп-разработчиков был в ITA Software.

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

> да хотя бы с целью поиска работы:

Ну, можете попробовать начать отсюда: http://lispjobs.wordpress.com/

Впрочем, я никогда такой вакансии не искал, поэтому рецепта дать не могу.

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