LINUX.ORG.RU
ФорумTalks

Недостатки OCaml


0

0

Изучаю потихоньку, хочется знать о наиболее пакостных недостатках с точки зрения людей, знакомых с этим языком давно. Кое-что нарыл гуглом по запросу OCaml sucks :) http://www.podval.org/~sds/ocaml-sucks.html -- вроде бы достаточно адекватная статья?


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

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

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

мне вот размера/навороченности стандартной библиотеки не хватало.

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

Зря ведешься на на слово "sucks" -- статья та очень даже взвешенная. Писал вроде как лиспер, поэтому sucks надо понимать как "по мнению автора, OCaml хуже Common Lisp".

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

Всё хуже, чем Common Lisp, это каждому младенцу извесно. А что насколько хуже, это уже частности, не очень для меня интересные.

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

Спасибо, почитал. Похоже, за отсутствие generic функции а-ля print OCaml не пинает только ленивый :) Ещё несколько напрягает отсутствие generic арифметики (во всяком случае, меня). Например, невозможно написать функцию перемножения, работающую как с целочисленными, так и вещественными матрицами -- придется либо тупо лепить две версии, либо делать функцию высшего порядка, и скармливать ей +, *, 0.

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

Как же быть "no silver bullet"? Утверждения в стиле "Лисп круче всех" косвенно подразумевают, что другие языки существуют исключительно по недоразумению и от людской тупости. Версия интересная, но чуток сомнительная.

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

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

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

> Как же быть "no silver bullet"?

Так, что по достижении инструментом определённого качества, основным источником проблем становится человек. "no silver bullet" только потому что "no gun appropriate for such a silver bullet". Слишком примитивный инструмент требует много тупой работы, слишком умный - хорошего обучения, чтобы владеть им. Большинство языков и наречий где-то на золотой середине, не потому что, макросы например нехороши, а потому что всё равно мало кто понимает, что с ними делать.

> Версия интересная, но чуток сомнительная.

Почему, интересно? Примеров и аналогов такого положения вещей навалом, не только в ИТ-сфере, и объяснение этому достаточно очевидно.

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

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

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

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

Чтобы доказать, что Лисп лучше того же OCaml или Haskell, придётся формально доказать, например, что динамическая типизация всегда и везде лучше статической. Т.е. поставить точку в холиваре с минимум полувековой историей. Про возможность статической типизации в Лиспе в курсе, но это похоже на костыль. Можно, конечно, представить себе что-то лиспоподобное с системой типов Хиндли-Милнера, но будет ли это Лисп по семантике?

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

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

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

> это похоже на костыль

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

> Можно, конечно, представить себе что-то

Можно себе представить всё, что угодно, намного лучшее лиспа в том числе. Но _пока_ у лиспа есть очевидное приемущество - лисп есть, а того, что можешь представить - нету.

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

>В лиспе есть выбор

ОК. OCaml интересен мне как один из практически применимых функциональных языков с системой типов Хиндли-Милнера. Где можно посмотреть на вариант Лиспа с аналогичной фичей и Лисп ли это будет, семантически?

>лисп есть, а того, что можешь представить - нету.

Ты не понял о чём речь. См. предыдущий параграф.

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

> Про возможность статической типизации в Лиспе в курсе, но это похоже на костыль.

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

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

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

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

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

>В лиспе есть выбор

Можно ссылку на пример использования стстической (== проверяемой на этапе компиляции) типизации в Лиспе? А то все явные указания типов, что я видел, проверялись в рантайме.

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

В Bigloo, например, такое не скомпилится:

(module test)
(define (f x::int) (+ x 1))
(display (f "1"))

Но это, конечно, никак нельзя назвать аналогом или
адекватной заменой типизации в ML языках.

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

> В Bigloo

Это Схема, а не CommonLisp. И при этом - нестандартная Схема, если я правильно понял.

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

> Можно ссылку на пример использования стстической (== проверяемой на этапе компиляции) типизации в Лиспе?

Нельзя. Я пьян как ояб, а ты хотиш чтобы я за тя в гуголь лез :(

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

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

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

> Я пьян как ояб, а ты хотиш чтобы я за тя в гуголь лез :(

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

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

> Олкоголь - зло

вот я с ним и борюсь по мере сил

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

В чём состоит эксперимент? Сработает/не сработает ограничение на тип? А в спецификации чего пишут?

> Нужны живые люди с опытом

Их есть у нас. А вам, простите, зачем?

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

> А в спецификации чего пишут?

HyperSpec для меня - слишком сложное чтение. Ну и опять же - практика интересует.

>> Нужны живые люди с опытом

> Их есть у нас. А вам, простите, зачем?

Мне для извлечения из них полезного опыта использования статической типизации в CL. Для самообразования.

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

>И чем тебя предложеный не устраивает?

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

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

> HyperSpec для меня - слишком сложное чтение.

Ну раз лисп ниасилил, чегож тебе надобно, боярин?

> Ну и опять же - практика интересует.

Без спецификации? "как получится, так получится"?

> Мне для извлечения из них полезного опыта использования статической типизации в CL. Для самообразования.

Кури тогда упомянутую спецификацию, там во всех подробностях.

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

> Самому написать кривое подобие OCaml на макрах Лиспа

А прямое никак?

> только потому что Лисп кошерный?

Нет, потому что в _нужных_ местах лисп может мутировать в окамл, или во что тебе потребно. А вот с окамлом такое так же просто не пройдёт.

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

>>> Нужны живые люди с опытом

>> Их есть у нас. А вам, простите, зачем?

>Мне для извлечения из них полезного опыта

Найти 2-3 живых людей, промыть, просушить, перегнать перегонным кубом. Полученную жидкость перегнать еще раз. Результат испарить, полученный порошок и есть опыт. Хранить в герметической посуде не более двух лет.

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

Зачем главу? Бери всю спецификацию и читай, для хорошего человека не жалко.

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

>в _нужных_ местах лисп может мутировать в окамл

За неимением примера, сиё не более чем голословное утверждение. Мутировать-то он может и мутирует, да только вполне возможно, что результат мутации абсолютно невозможно использовать на практике.

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

получится не порошок, а спирт. Его не хранят, а лачут.

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

> За неимением примера, сиё не более чем голословное утверждение.

Взял бы да написал пример. Согласно спецификации это не сложно.

> Мутировать-то он может и мутирует, да только вполне возможно, что результат мутации абсолютно невозможно использовать на практике.

Будь уверен, возможно. Вот только нужно ли?

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

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

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

Чего тебе, чудо анонимное, неспокойно так? Хочется чего-нибудь запостить, а нечего?

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

>Взял бы да написал пример. Согласно спецификации это не сложно.

Что несложно, реализовать на макрах язык со статической типизаций и выводом типов (type inference) под Хиндли-Милнеру, аналогичный OCaml? Причём, не абы как, а чтобы был удобным и выдавал внятные диагностические сообщения при ошибках типизации. Позволь тебе не поверить.

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

> Что несложно, реализовать на макрах язык со статической типизаций и выводом типов (type inference) под Хиндли-Милнеру, аналогичный OCaml?

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

> Позволь тебе не поверить.

Ну как хочешь. Это твоё право, основывать свои суждения на вере.

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

>>Ну как хочешь. Это твоё право, основывать свои суждения на вере.

В заведомо проигрышной позиции так изворачиваться на протяжении 30 постов. Тебе в политеки нужно было идти, а не на ЛОРе со студентами ругаться.
Уважаю.

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

>Это твоё право, основывать свои суждения на вере.

Ага, по-настоящему рациональный подход -- слепо верить примитивной аргументации уровня "согласно спецификации, это легко" :-)

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

почеме примитивное? Ты ведь эту спецификацию так и ниасилил.

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

> Что несложно, реализовать на макрах язык со статической типизаций и выводом типов (type inference) под Хиндли-Милнеру, аналогичный OCaml?

Вообще-то, первые версии CAML именно так и были реализованны.

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

>> Что несложно, реализовать на макрах язык со статической типизаций и выводом типов (type inference) под Хиндли-Милнеру, аналогичный OCaml?

> Вообще-то, первые версии CAML именно так и были реализованны.

Хм... а ссылка на это есть? ЕМНИП, CAML старше CL.

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

> Хм... а ссылка на это есть? ЕМНИП, CAML старше CL.

CL -- сборная солянка из разных, существовавших на тот момент, Lisp'ов. Вообще, LISP один из самых старых языков, если называть это языком, хотя LISP -- это уже больше идея, чем язык.

> ML built a polymorphic type system (invented by Robin Milner in 1978) on top of Lisp, pioneering statically typed functional programming languages.

http://en.wikipedia.org/wiki/History_of_programming_languages

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

> ML built a polymorphic type system (invented by Robin Milner in 1978) on top of Lisp

То есть ML таки старше CL :) Кстати, эта же страничка относит ML к 1973 году, а http://en.wikipedia.org/wiki/ML_programming_language вообще не упоминает Лисп.

А вот на http://en.wikipedia.org/wiki/Caml мы видим, что "The first Caml implementation in Lisp", так что Лисп был всего лишь языком реализации, и ни о каком type inference на макрах речь не идет.

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

А ты эту реализацию видел? Как раз на макрах и сделали.

На самом деле, это вообще не проблема. У меня тут валяется реализация Хиндли-Милнера, парсера для ML-синтаксиса и, самого сложного - карринга, и всё это - меньше двух тысяч строк на Лиспе. Только никому не дам, извините. Не моё. Там, кстати, type inference прикольно сделан - поверх такой же вот, на макрах, реализации Пролога.

anonymous
()

Насчёт статической типизации - блин я и другие приводили уже примеры тут раз 40. Не ужели не видели?

(defun balh (op)
  (declare (fixnum op))
  (the fixnum (+ 10 op)))

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

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

> А ты эту реализацию видел?

Нет. А ты?

> Как раз на макрах и сделали.

Позволь тебе не поверить. Макры, может, и использовались, но про не для определения синтаксиса Ocaml с реализацией type inference и генерацией Лисп-кода, которую можно было бы выполнить путем вызова macroexpand или как оно там зовется.

> У меня тут валяется реализация Хиндли-Милнера, парсера для ML-синтаксиса и, самого сложного - карринга, и всё это - меньше двух тысяч строк на Лиспе. Только никому не дам, извините.

А у меня тут валяется реализация Common Lisp на PL/I, примерно тысяча строк. Только никому не дам, извините.Там, кстати, type inference прикольно сделан - поверх такой же вот, на макрах, реализации OPS5.

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