LINUX.ORG.RU

Основывая на чём можно выбрать OCamL или Erlang или Haskell


0

5

Я догадываюсь, что это какая-то паранойа !!! Но как !?

Конечно очевидный вариант - попробовать все. И подумать.

Пробую... Думаю... А дальше что ???

OCamL похож на F#, красив и удобен... хорошо. Применять можно везде, к web имеет много забавных наработок.

Erlang имеет достаточно мощную, стабильную виртуальную машину и синтаксис очень забавный ! Интересный web server yaws и NoSQL DBMS.

Haskell выигрывает по полярности и там есть много действительно хороших библиотек вообще в любой сфере...

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


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

> А кто-то пытался? Вижу много слов про хорошие алгоритмы и ни слова про то что именно С++ помог их решить и был идеальным языком для этого.

Я Вам про это в треде написал. Про попытки - не знаю. То что я знаю про эти алгоритмы и про другие ЯП - я альтернативы С++ тут не вижу. Мб лисп... но у нас нет специалиста по лиспу такого уровня.

Весьма опрометчиво употреблять слова «эффективность» и «С++» в одном предложении.

Вы про LRnLA читали? Именно что ЭЖФФЕКТИВНО и именно что С++. То,что Вы лично не умеете быстро писать эффективный код на С++, не означает что этого вообще никто не умеет делать.

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

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

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

это добавляет ему мутабельности, внезапно?

нет, конечно

поясните Вашу мысль с этой точки зрения

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

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

смотрим любую программу prolog - последовательность команд рантайму

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

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

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

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

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

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

Это когда выхлоп одной функции передается на вход другой. При этом сами функции могут созданы на месте.

Вот пример реального кода

let rec basis_vertices1 basis_order =
  if basis_order = 1 then
    [Basis [ Plane [ Point [1] ]]; Basis [ Plane [ Point [0]]]]
  else
    let b = basis_vertices1 (basis_order - 1) in
    (Basis (rev_map (fun x-> Plane [ Point [x] ] )
              (range 0 (basis_order - 1))) :: 
       (rev_map (fun x-> 
         match x with
         | Basis pp -> Basis ((Plane [Point [basis_order]]):: pp)
        ) b)) |> rev
;;

В else идет вызыв целой связки функций.

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

смотрим любую программу prolog - последовательность команд рантайму

рантайм пролога не будет исполнять их последовательно.

это почему же? в каком порядке в программе правила написаны - в таком и применяются, причём порядок написания имеет значение, гуглите prolog infinite loop

последовательнось определяет только то, в каком порядке правила будут учитыватся при унификации

что Вы понимаете говоря «унификация»?

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

http://www.google.ru/search?q=Anton+Ivanov+LRnLA печалька, хоть бы одна статья бы нашлась...

у меня складывается ощущение, что ты ничем кроме тролленья на лоре не занимаешься, а просто услышал про название эффективных алгоритмов/алгоритма и теперь услышав красивую аббривеатуру The Local-Recursive Nonlocal-Asynchronous пытаешься вприхнуть её везде. При этом популярного объяснения «для идиотов» не даёшь (а может просто не знаешь?)

Если тебе лень поискать - какя мне пофиг разница тратишь ли ты время на мои посты?

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

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

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

давайте от теории перейдём к практике, а то болтать можно много, напомню мы говорили про:

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

приведите пример, пожалуйста

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

Весьма опрометчиво употреблять слова «эффективность» и «С++» в одном предложении.

весьма опрометчиво говорить «весьма опрометчиво» и не приводить никакого обоснования своим словам

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

причём порядок написания имеет значение

я об этом написал в следующем абзаце.

тогжа мне непонятна Ваша вот эта фраза: «рантайм пролога не будет исполнять их последовательно», поясните пожалуйста

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

приведите пример, пожалуйста

process_binary(Pid, Bin) ->
    spawn(
      fun() ->
              L = string:tokens(binary_to_list(Bin), "\n"),
              V = lists:foldr(
                    fun(Line, Total) ->
                            Tok = string:tokens(Line, " "),
                            Total + find_match(lists:nth(7, Tok))
                    end, 0, L),
              Pid ! V
      end).

последовательное выполнение трёх действий: расчёт L, расчёт V, отправка сообщения в процесс Pid; мало того, это вообще процедура, не возвращающая значения - все эффекты являются сайд-эффектами (что fun, что порождающая process_binary)

желания обсуджать мутабельность у меня нет

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

Это когда выхлоп одной функции передается на вход другой.

Так хорошо.

При этом сами функции могут созданы на месте.

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

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

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

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

приведите пример, пожалуйста

последовательное выполнение трёх действий: расчёт L, расчёт V, отправка сообщения в процесс Pid; мало того, это вообще процедура, не возвращающая значения - все эффекты являются сайд-эффектами (что fun, что порождающая process_binary)

ну ок, а вывод-то какой?

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

ну ок, а вывод-то какой?

он из всех трёх наименее функциональный

и я бы сказал, что Erlang - это чистый ОО-язык. в определение Алана Кея он укладывается идеально: объектом выступает процесс, разделяемой памяти нет, позднее связывание присутствует

jtootf ★★★★★ ()

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

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

ну ок, а вывод-то какой?

он из всех трёх наименее функциональный

ну, насчёт O'Caml я бы не был так уверен, но допустим

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

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

Erlang - это чистый ОО-язык. в определение Алана Кея он укладывается идеально: объектом выступает процесс, разделяемой памяти нет, позднее связывание присутствует

1. если мы принимаем процесс за объект - тогда да
2. по определению А.К., это не то же что сегодня принимают за ООЯ

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

Не мелочи. У тебя получится нагромождение обяъвлений загромождающее код. Борются с этой проблемой просто — просто не используют примитивы (map,fold,foreach ....), а пишут все циклы руками в обыкновенном кондовом императивном стиле.

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

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

> не знают что lisp - мультипарадигменный язык

+1.

Функциональный в том числе.

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

> у меня складывается ощущение, что ты ничем кроме тролленья на лоре не занимаешься,

Рассказывая и дальше всем о своих ощущениях, это так познавательно!

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

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

По приведенному мной примеру запроса на первой же странице можно найти вот это http://www.keldysh.ru/papers/2008/source/prep2008_21.pdf где скажем в 9-й позиции списка литературы можно найти дост. подробное описание LRnLA. Но я не советую тебе в это вникать - это может повредить твой неокрепшей психике.

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

В каком языке они могут быть выполнены непоследовательно?

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

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

У тебя получится нагромождение обяъвлений загромождающее код.

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

типа каррирование

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

которые облегчают чтение и понимание работы связки функций

А мы просто делаем присваивания промежуточным переменным.

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

собственно мы и не говорили не про то кто из них самый «функциональный»

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

по определению А.К., это не то же что сегодня принимают за ООЯ

поскольку я озвучиваю субъективное отношение, имею полное право использовать любые определения на свой вкус. обсуждать соответствие Erlang'а «тому, что сегодня принимают за ООЯ», опять же, ни малейшего желания не имею

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

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

Что мешает то же самое провернуть эрланговской vm?

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

> Если числ моделирование у-й максвелла, власова-максвелла, упругости, ландау-лифишица не коррелирует с твоими интересами, то ты не сможешь даже понять аннотацию, которую кстати по приведенной тобой выше ссылке найти таки можно.

По моей ссылке:

Не найдено ни одного документа, соответствующего запросу Anton Ivanov LRnLA.

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

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

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

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

Для этого нужна какая-то специальная поддержка от языка?

Для удобного использования нужна.

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

Есть функция от двух аргументов, если я вызываю её от одного аргумента, то автоматом получаю функцию от одного аргумента. Если городить это через замыкания, то получится нагромождение кода.

А мы просто делаем присваивания промежуточным переменным.

Вот, лезут всякие дополнительные ненужные сущности.

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

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

это тоже по-вашему императивный стиль?

% 0 - Calling Rule
cl(List, Out) :-
        call(List, 0 , Out).

% 1 - Terminating condition
call([], Count, Count).

% 2 - Recursive rule
call([H|T], Count, Out) :-
        Count1 is Count + 1,
        call(T, Count1, Out).
shty ★★★★★ ()
Ответ на: комментарий от baverman

> Каждый следующий вызов зависит от предыдущего.

однако последовательность вычисления не будет строгой L -> V -> !

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

по определению А.К., это не то же что сегодня принимают за ООЯ

поскольку я озвучиваю субъективное отношение, имею полное право использовать любые определения на свой вкус. обсуждать соответствие Erlang'а «тому, что сегодня принимают за ООЯ», опять же, ни малейшего желания не имею

а я на Ваше суверенное право и не покушаюсь, просто уточняю

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

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

Кстати, в окамле это работает для именованных аргументов?

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

однако последовательность вычисления не будет строгой L -> V -> !

В смысле? Ты же не имеешь ввиду, что можно выполнить V -> L -> !

baverman ★★★ ()

> OCamL ... красив и удобен

Очень спорное утверждение

Haskell выигрывает по полярности и там есть много действительно хороших библиотек вообще в любой сфере...


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

Бери Ruby ибо ничего эффективнее чем RoR для веб-разработки еще не придумали. Или Clojure, если так интересна функциональщина

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

это тоже по-вашему императивный стиль?

call([H|T], Count, Out) :-
        Count1 is Count + 1,
        call(T, Count1, Out).

dddddefinitely!

na-ah it's declarative style, baby

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

> программа на Haskell - система вызовов функций

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

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

Опять же, vm знает вызывает ли их функция или нет.

и учитывает? в C++ компилятор тоже много чего знает о программе

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

> Не найдено ни одного документа, соответствующего запросу Anton Ivanov LRnLA.

Потому что у меня почти нет публикаций на эту тему, а те которые есть не содержат в заглавии LRnLA (еще имей ввиду, что обычно указывается не полное имя а инициалы).

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

Я на ЛОРе подобную аннотацию писал раз дцать по моему... надоело если честно. Но - если поиск тебе дается так сложно, мог бы сказать об этом и ВЕЖЛИВО попросить - я бы написал тут в дцать первый. Тебя мама не учила что хамить некрасиво?

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

na-ah it's declarative style, baby

ох, да пожалуйста. называйте хоть зелёным сыром, я свою аргументацию привёл

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

Посмотри на примеры использования любого Хаскелевского веб-фреймворка - они страшны как грех

можно недостатки Yesod'а? что именно в его использовании тебя смущает?

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