Re[2]: OCaml или LISP ?
От: Аноним  
Дата: 15.02.09 19:48
Оценка:
Здравствуйте, thesz, Вы писали:

T>Ещё лучше, конечно, Хаскель, но я и так уже прослыл его рекламным агентом. Поэтому от описания совершенного изящного синтаксиса Хаскеля, его выразительнейшей системы типов с типами классов и возможностью более точно выражать инварианты с помощью GADT, великолепного REPL, удивительно эффективного и мощного компилятора, а также уникального в своём роде ленивого порядка вычислений, что заставит тебя сильнее всего почувствовать всю мощь функционального программирования, я воздержусь.

T>Я воздержусь от описания всех этих невероятно полезных вещей и даже не буду намекать на выгоду от их использования.
T>Да я вообще о них не буду упоминать.
T>Вот.

Уломали)
Поставил GHC.Купился исключительно из-за синтаксиса,больно нравится.Производительность вроде схожая с Ocaml в синтетических тестах.
Будем смотреть.
Всем спасибо за советы.
Re[6]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 15.02.09 19:48
Оценка:
MC>Тогда на фото сверху, видимо, Simon Peyton Jones.

Не узнал старину Семёна.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[6]: OCaml или LISP ?
От: Qbit86 Кипр
Дата: 15.02.09 19:50
Оценка:
Здравствуйте, thesz, Вы писали:

T>Сколько раз я её упоминал?


Я, право, сбился со счёта.
Глаза у меня добрые, но рубашка — смирительная!
Re[7]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 15.02.09 22:20
Оценка:
T>>Сколько раз я её упоминал?
Q>Я, право, сбился со счёта.

То есть, ты не собираешься отвечать за свои слова.

Быстрый поиск по RSDN с помощью Google (поиск самого RSDN сломан) приводит к неожиданному результату: получается, thesz вообще ни разу самостоятельно не упоминал про свою штангу! Про него говорили, а он сам — нет.

Что ж, Qbit86, grown up indication set to off. For a longer time now.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[3]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 15.02.09 22:21
Оценка:
T>>Да я вообще о них не буду упоминать.
T>>Вот.
А>Уломали)
А>Поставил GHC.Купился исключительно из-за синтаксиса,больно нравится.Производительность вроде схожая с Ocaml в синтетических тестах.
А>Будем смотреть.
А>Всем спасибо за советы.

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

Ну, если что, спрашивай.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[8]: OCaml или LISP ?
От: Qbit86 Кипр
Дата: 15.02.09 23:31
Оценка: :)
Здравствуйте, thesz, Вы писали:

T>>>Сколько раз я её упоминал?

Q>>Я, право, сбился со счёта.
T>То есть, ты не собираешься отвечать за свои слова.

Нет, Сергей Зефиров, я могу ответить за свои слова. Вот только станет ли тебе от этого легче? Я просто добродушно подшутил над твоим хвастовством, не со зла. Конкретизировать я не хотел, просто чтобы не выставить тебя в неприглядном свете. Но ты всё тянешь и тянешь меня за язык, при том обидеть норовишь. Раз уж ты настаиваешь...

1) В давней дискуссии с zabivator'ом твоё ораторское мастерство проявилось во всей красе:

<span class='lineQuote level1'>T&gt;</span>По-моему, вы все-таки идиот... вы малообразованный тупой идиот, как бы вам не хотелось представить все по-другому...
<span class='lineQuote level1'>T&gt;</span>Я старше вас в полтора раза, как мы тут выяснили. Поэтому я могу, некоторым образом, повелевать (поскольку я еще и сильнее [по ссылке — штанга] не менее, чем в полтора раза, я думаю).
Так вот, сим повелеваю: ЖЖ-пользователю zabivator для опровержения разумных предположений о его идиотичности выполнить следующее...
<span class='lineQuote level1'>Z&gt;</span>Ты кто такой, дядя, что бы мне указывать?
<span class='lineQuote level1'>T&gt;</span>Я не указываю, я повелеваю.

По-моему, уровень твоей аргументации слабоват, стоило накинуть ещё десяток килограммов.

2) В недавнем твоём комментарии к посту _winnie опять чудесным образом всплыла штанга. Хотя пост был посвящён Забавной Невероятной Хреновине:

Так каждый сможет.
А ты вот так смоги:
[Дальше идёт видео с чем? Правильно, со штангой.]
Во.


3) Вернёмся в лоно RSDN'а:

<span class='lineQuote level1'>T&gt;</span>

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


4) И вот опять на ровном месте:

<span class='lineQuote level1'>T&gt;</span>

На фотографии под штангой — я. Ну, чтобы ты знал, если что.


T>То есть, ты не собираешься отвечать за свои слова.

T>Что ж, Qbit86, grown up indication set to off. For a longer time now.

Что ж, таким вот нехитрым приёмом ты и поставил меня в дурацкое положение, вынудив кому-то что-то доказывать, откапывать твои нелицеприятные высказывания. Ты доволен?
Глаза у меня добрые, но рубашка — смирительная!
Re[9]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 16.02.09 09:28
Оценка: -1
T>>>>Сколько раз я её упоминал?
Q>>>Я, право, сбился со счёта.
T>>То есть, ты не собираешься отвечать за свои слова.

Q>Нет, Сергей Зефиров, я могу ответить за свои слова. Вот только станет ли тебе от этого легче? Я просто добродушно подшутил над твоим хвастовством, не со зла. Конкретизировать я не хотел, просто чтобы не выставить тебя в неприглядном свете. Но ты всё тянешь и тянешь меня за язык, при том обидеть норовишь. Раз уж ты настаиваешь...


Q>1) В давней дискуссии с zabivator'ом твоё ораторское мастерство проявилось во всей красе:

Q>

<span class='lineQuote level1'>T&gt;</span>По-моему, вы все-таки идиот... вы малообразованный тупой идиот, как бы вам не хотелось представить все по-другому...
Q><span class='lineQuote level1'>T&gt;</span>Я старше вас в полтора раза, как мы тут выяснили. Поэтому я могу, некоторым образом, повелевать (поскольку я еще и сильнее [по ссылке — штанга] не менее, чем в полтора раза, я думаю).
Q>Так вот, сим повелеваю: ЖЖ-пользователю zabivator для опровержения разумных предположений о его идиотичности выполнить следующее...
Q><span class='lineQuote level1'>Z&gt;</span>Ты кто такой, дядя, что бы мне указывать?
Q><span class='lineQuote level1'>T&gt;</span>Я не указываю, я повелеваю.

Q>По-моему, уровень твоей аргументации слабоват, стоило накинуть ещё десяток килограммов.

Grown up check failed for not following the discussion in time.

Plase, try again later.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[10]: OCaml или LISP ?
От: Qbit86 Кипр
Дата: 16.02.09 09:38
Оценка:
Здравствуйте, thesz, Вы писали:

T>Grown up check failed for not following the discussion in time.


T>Plase, try again later.


Засчитан.
Глаза у меня добрые, но рубашка — смирительная!
Re[11]: OCaml или LISP ?
От: FR  
Дата: 16.02.09 12:22
Оценка: :))) :)
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, thesz, Вы писали:


T>>Grown up check failed for not following the discussion in time.


T>>Plase, try again later.


Q>Засчитан.


Думаю из этой беседы будут сделаны правильные выводы и выбран Ocaml
Re[2]: OCaml или LISP ?
От: Rtveliashvili Denys Великобритания  
Дата: 16.02.09 12:29
Оценка: 5 (1)
T>Ещё лучше, конечно, Хаскель, но я и так уже прослыл его рекламным агентом. Поэтому от описания совершенного изящного синтаксиса Хаскеля, его выразительнейшей системы типов с типами классов и возможностью более точно выражать инварианты с помощью GADT, великолепного REPL, удивительно эффективного и мощного компилятора, а также уникального в своём роде ленивого порядка вычислений, что заставит тебя сильнее всего почувствовать всю мощь функционального программирования, я воздержусь.


Ну если REPL — образец великолепия... Впрочем, я достаточно либерален и спокойно отношусть к мазохизму. Это ж надо, ловить кайф от того, что софтина пишется в одном месте (скажем, в текстовом редакторе), а проверка типов, разного рода экспериментирование и т.д. — в другом (REPL).
Конечно, реализовать REPL проще чем приличный IDE где все то же самое было бы прямо в редактируемом модуле. Кстати, нечто подобное Common LISPеры сделали в своем Slime. Для языков типа Haskell это было бы еще удобнее. Но "Emacs это наше все" и нет света в конце тоннеля. Разве что может Leksah?


GADT это сила, сомнений нет. Одна из тех вещей, что подчеркивают убожество языков типа Java. Вот только разве нет их в том же Ocaml? В хаскель, конечно, через GADT все делается. Прямо как в одном бородатом анекдоте. Даже records. И никого не смущает ни мусор из-за валяющихся под ногами функций доступа к полям, ни бредовый синтаксис этих самых records, ни прочие прелести. Впрочем, тут я преувеличиваю. Были какие-то предложения это исправить, но воз и ныне там.


Увидительно эффективный и мощный компилятор. Когда глядел на него последний раз, то результат непосредственной компиляции в native был в разы тормознее окольного пути генерации Cшного кода и потом компиления оного. Далее, пробовал чисто формально обернуть в монаду фнкцию что проходит по строке и выбрасывает символы удовлетворяющие простенькому условию. Результат удручающий — скорость упала в 10 (десять) раз. Видимо это так сей компилятор умеет выбрасывать ненужные ветви исполнения и именно так в хаскеле демонстрируется мощь ленивых вычислений.


Изящество синтаксиса. Хочешь передать функции foo пару отрицательных чисел — будь добр обернуть их в скобки.

foo (-1) (-2)

Сравниваем с LISP:

(foo -1 -2)


Да, конечно это не часто нужно. Но я что слышал это имено в LISP сильно много скобок.


Система типов. Да, typeclassы это хорошо. Действительно удобная штука. Вот только почему-то в стандартных библиотеках начхать всем на них. Вот что мешало сделать штуки типа "null", "empty", "singleton" методами абстрактных TypeClass'ов? А так импортнешь IntSet и Seq и сразу же каша получается.


Вещи типа unzip7, наверное, тоже следствие выразительности системы типов. Функций с переменным числом агрументов в haskell не осилили?


Поддержка Unicode... Эх, не будем о грустном и вечном.


Но особенно радует runtime. Если ни дай Бог программа съест много памяти — бах, и лежит труп с out of memory. Понять, из-за чего она сдохла почти не реально. Тем более, что она вся такая модная и ленивая и на такие мелочи как нормальный мониторинг потребления ресурсов и экономное расходование памяти не отвлекается. Да, я в курсе что есть такая штука как нагрузочное тестирование. Вот только лишь для самых простых случаев это потребление памяти можно им надежно отследить. На все остальное самый действенный способ — неистовая молитва.


P.S. И несмотря на все вышеперечисленное, Haskell действительно (не, я серьезно) один из самых лучших языков на данных момент. Прямо как Unix: "Unix — паршивая ОС, но лучше пока ничего не придумали".
Re[3]: OCaml или LISP ?
От: FR  
Дата: 16.02.09 12:40
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Уломали)

А>Поставил GHC.Купился исключительно из-за синтаксиса,больно нравится.Производительность вроде схожая с Ocaml в синтетических тестах.

Тут http://www.wagerlabs.com/blog/2007/05/who-let-the-dog.html насчет производительности написано:

I cannot emphasize this enough. GHC takes 2-3-4 minutes to rebuild my project whenever I touch the parser. Ocaml takes 1-2-3 seconds. I use a 2Ghz Core Duo MacBook Pro and Topdog is decidedly not a large project which makes the difference all the more glaring. With Haskell I was loath to touch the parser or my syntax tree definition, with OCaml I look forward to tweaking things to my hearts content. Normal recompilation time of Topdog is so far as to be almost unnoticeable.


Интересно неужели за два года GHC смог ускорится на порядок.
Re[4]: OCaml или LISP ?
От: Rtveliashvili Denys Великобритания  
Дата: 16.02.09 13:12
Оценка: :)
FR>Тут http://www.wagerlabs.com/blog/2007/05/who-let-the-dog.html насчет производительности написано:
FR>

FR>I cannot emphasize this enough. GHC takes 2-3-4 minutes to rebuild my project whenever I touch the parser. Ocaml takes 1-2-3 seconds. I use a 2Ghz Core Duo MacBook Pro and Topdog is decidedly not a large project which makes the difference all the more glaring. With Haskell I was loath to touch the parser or my syntax tree definition, with OCaml I look forward to tweaking things to my hearts content. Normal recompilation time of Topdog is so far as to be almost unnoticeable.


FR>Интересно неужели за два года GHC смог ускорится на порядок.


Тут про сборку написано а не про время работы собранного софта. Так что все логично и GHC не ускорялся.
А воообще-то 2-4 минуты на сборку это нехило. И легко объясняет приверженность REPLу. Т.к. "на безрыбье и рак — рыба".
Re[5]: OCaml или LISP ?
От: FR  
Дата: 16.02.09 13:16
Оценка:
Здравствуйте, Rtveliashvili Denys, Вы писали:

FR>>Интересно неужели за два года GHC смог ускорится на порядок.


RD>Тут про сборку написано а не про время работы собранного софта. Так что все логично и GHC не ускорялся.


Да что-то меня прерклинило

RD>А воообще-то 2-4 минуты на сборку это нехило. И легко объясняет приверженность REPLу. Т.к. "на безрыбье и рак — рыба".


Ну после C++ 5 минут вполне нормально
Re[3]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 16.02.09 14:37
Оценка:
T>>Ещё лучше, конечно, Хаскель, но я и так уже прослыл его рекламным агентом. Поэтому от описания совершенного изящного синтаксиса Хаскеля, его выразительнейшей системы типов с типами классов и возможностью более точно выражать инварианты с помощью GADT, великолепного REPL, удивительно эффективного и мощного компилятора, а также уникального в своём роде ленивого порядка вычислений, что заставит тебя сильнее всего почувствовать всю мощь функционального программирования, я воздержусь.
RD>Ну если REPL — образец великолепия... Впрочем, я достаточно либерален и спокойно отношусть к мазохизму. Это ж надо, ловить кайф от того, что софтина пишется в одном месте (скажем, в текстовом редакторе), а проверка типов, разного рода экспериментирование и т.д. — в другом (REPL).
RD>Конечно, реализовать REPL проще чем приличный IDE где все то же самое было бы прямо в редактируемом модуле. Кстати, нечто подобное Common LISPеры сделали в своем Slime. Для языков типа Haskell это было бы еще удобнее. Но "Emacs это наше все" и нет света в конце тоннеля. Разве что может Leksah?

Сразу после проверки типов ты проверяешь функциональность. И это нормально,

RD>GADT это сила, сомнений нет. Одна из тех вещей, что подчеркивают убожество языков типа Java. Вот только разве нет их в том же Ocaml? В хаскель, конечно, через GADT все делается. Прямо как в одном бородатом анекдоте. Даже records. И никого не смущает ни мусор из-за валяющихся под ногами функций доступа к полям, ни бредовый синтаксис этих самых records, ни прочие прелести. Впрочем, тут я преувеличиваю. Были какие-то предложения это исправить, но воз и ныне там.


GADT в OCaml нет.

Синтаксис записей наилучший из возможных в чистом функциональном языке.

RD>Изящество синтаксиса. Хочешь передать функции foo пару отрицательных чисел — будь добр обернуть их в скобки.

RD> foo (-1) (-2)
RD>Сравниваем с LISP:
RD> (foo -1 -2)

Бляха муха!

Я понял, отчего у меня программа-то такая большая! У меня на 2500 строк кода есть строка с отрицательными числами!

Вот она, зараза:
noPos = Pos "<artifical position>" (-1) (-1)


RD>

RD>Да, конечно это не часто нужно. Но я что слышал это имено в LISP сильно много скобок.

Перехожу на Liskell или как его там. Сегодня же.

RD>Система типов. Да, typeclassы это хорошо. Действительно удобная штука. Вот только почему-то в стандартных библиотеках начхать всем на них. Вот что мешало сделать штуки типа "null", "empty", "singleton" методами абстрактных TypeClass'ов? А так импортнешь IntSet и Seq и сразу же каша получается.


Дело в том, что они не обобщаются. Map.singleton /= Set.singleton. Твои проблемы, однако, решаются использованием import Data.Map qualified as Map — замени Data.Map на Data.IntMap и разницы не заметишь.

RD>Вещи типа unzip7, наверное, тоже следствие выразительности системы типов. Функций с переменным числом агрументов в haskell не осилили?


Как ты им тип будешь задавать?

Но если ты хочешь, есть вариант.

RD>Но особенно радует runtime. Если ни дай Бог программа съест много памяти — бах, и лежит труп с out of memory. Понять, из-за чего она сдохла почти не реально. Тем более, что она вся такая модная и ленивая и на такие мелочи как нормальный мониторинг потребления ресурсов и экономное расходование памяти не отвлекается. Да, я в курсе что есть такая штука как нагрузочное тестирование. Вот только лишь для самых простых случаев это потребление памяти можно им надежно отследить. На все остальное самый действенный способ — неистовая молитва.


Программист только тогда по настоящему программировал на ЯП, когда он профилировал свои программы.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[12]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 16.02.09 14:38
Оценка:
T>>>Grown up check failed for not following the discussion in time.
T>>>Plase, try again later.
Q>>Засчитан.
FR>Думаю из этой беседы будут сделаны правильные выводы и выбран Ocaml

Ты прав.

Нафиг Лискель, перехожу на ОКамл.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[4]: OCaml или LISP ?
От: Rtveliashvili Denys Великобритания  
Дата: 16.02.09 15:12
Оценка:
T>Сразу после проверки типов ты проверяешь функциональность. И это нормально,

Да, конечно это нормально. Просто если пользуешься REPL то это зверски неудобно. Разве Вам не кажется, что проще делать это прямо в IDE и не возиться с постоянным перебрасыванием кода в REPL (что еще более-менее приемлемо) и обратно (что уже совсем изврат)?

В упомянутом мной Slime это делается на раз. Пишешь код, жмешь shortcut и он выполнился. Результат выполнения виден. Не нравится — подправил, проверил снова. А из REPL вытащить когда-то определенную там ф-цию или структуру почти невозможно.
Но все это проблема не языка, конечно, а его инфраструктуры.


T>GADT в OCaml нет.


Убедили, GADT похоже действительно нет в OCaml.


T>Бляха муха!


T>Я понял, отчего у меня программа-то такая большая! У меня на 2500 строк кода есть строка с отрицательными числами!


T>Вот она, зараза:

T>
T>noPos = Pos "<artifical position>" (-1) (-1)
T>


Я думал заметят, что это — шутка... Ладно, шутить не буду.

T>Дело в том, что они не обобщаются. Map.singleton /= Set.singleton. Твои проблемы, однако, решаются использованием import Data.Map qualified as Map — замени Data.Map на Data.IntMap и разницы не заметишь.


Точно никак не обобщаются? Я допускаю, что может быть какая-то суровая причина на то. Особенно в случае с Map. Но глядя на singleton в Seq и Set я вижу следующие типы:

a -> Set a
a -> Seq a

Неужели type inference в haskell не просечет что если я делаю singleton "1" и дальше пользуюсь им как Set, то я использую singleton из Set а не из Seq? Особенно, если есть некий typeclass Singletonable с этим методом и Set с Seq являются частными случаями.

RD>>Вещи типа unzip7, наверное, тоже следствие выразительности системы типов. Функций с переменным числом агрументов в haskell не осилили?


T>Как ты им тип будешь задавать?


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

T>Но если ты хочешь, есть вариант.


О! Спасибо за ссылку. Будет интересно почитать.

T>Программист только тогда по настоящему программировал на ЯП, когда он профилировал свои программы.


Как я уже говорил, профилирование не всегда спасает. Если софт достаточно сложный, то можно просто не догадаться о каком-то случае, где пойдет резкий рост потребления ресурсов. Преставьте себе, что речь идет не о программе в 100-1000 строк написанной одним человеком а скажем о софте в 100K, который писали человек 20.

Кроме того, если софт уже работает в продакшн, то желательно иметь возможность следить за тем, сколько он уже отъел. Хотя бы чтобы не произошло неожиданной беды. В Java для мониторинга есть JMX. А есть ли для хаскеля нормальные средства мониторинга? Лично я не видел ни разу. Что весьма прискорбно.

Обратно же, если у софта out of memory, то желательно чтобы сдохла не более чем одна нить, и было ясно где она умерла. Но этого, насколько я понимаю, от GHC добиться не получится.
Re: OCaml или LISP ?
От: MasterZiv СССР  
Дата: 16.02.09 15:50
Оценка:
Аноним 538 пишет:

> Важна скорость и удобство.Собственно интересует пока только

> прототипирование,но если скорость будет приличной можно и остановиться
> на выборе,по сему важны привязки к C(++) .

На сколько я знаю, вызов лиспового кода из С(++) — проблемы
большие (наоборот — легко, как правило). Т.е. вполне возможно
придётся использовать всякие IPC, доступные с двух сторон.

> О LISP слышал много чего хорошего,причём использовать/реализовать можно

> любую парадигму программирования.Но вот о скорости не нашёл ни
> чего.

Естественно, как напишешь, и какую реализацию возмёшь (есть компиляторы,
есть даже может быть, если остались, голые интерпретаторы, есть и
a la Java virtual machine.
но в некоторых случаях она достигает С-шную.
Т.е. быстро.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: OCaml или LISP ?
От: MasterZiv СССР  
Дата: 16.02.09 15:53
Оценка:
Аноним 538 пишет:

> С LISP не понятно как у него со скоростью и с pattern matching'ом , и


pattern matching-а встроенного в язык нет.

Есть аналоги yacc. и лексеры на регвыражениях.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: OCaml или LISP ?
От: MasterZiv СССР  
Дата: 16.02.09 15:56
Оценка:
Mr.Cat пишет:
>

> Если цель — ФП, то лучше scheme. Common lisp отличается повышенной

> императивностью.

Да ну, уже. Ни то, ни другое — не строгий функц. язык. Ну и как ты
оцениваешь "повышенную императивность" ?

Повышенную императивность — она в мозгах. Если нет там
функциональности, вот и будет у тебя повышенная императивность.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: OCaml или LISP ?
От: MasterZiv СССР  
Дата: 16.02.09 15:57
Оценка:
Аноним 538 пишет:

> А как у Common lisp с pattern matching ?


Я написал уже, нет встроенной. Есть регвыражения,
лексеры и парсеры, в виде библиотек.
Posted via RSDN NNTP Server 2.1 beta
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.