Re[5]: OCaml или LISP ?
От: FR  
Дата: 16.02.09 16:01
Оценка: +1
Здравствуйте, Rtveliashvili Denys, Вы писали:

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


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


Если хорошо сделано (как в Smalltalk ) то вполне удобно.
Re[5]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 16.02.09 16:05
Оценка:
T>>Сразу после проверки типов ты проверяешь функциональность. И это нормально,
RD>Да, конечно это нормально. Просто если пользуешься REPL то это зверски неудобно. Разве Вам не кажется, что проще делать это прямо в IDE и не возиться с постоянным перебрасыванием кода в REPL (что еще более-менее приемлемо) и обратно (что уже совсем изврат)?

Я код не бросаю туда-сюда. Я только проверяю, что типы, что выполнение.

T>>GADT в OCaml нет.

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

OCaml отстаёт от привычного объёма инструментов лет на десять, по-моему.

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

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

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

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

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

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

Это, по-моему, тоже редко встречающаяся проблема. Усложнять из-за неё компилятор, делая неразрывно связанными этапы анализа окружения и вывода типов, не стоит. По-моему, конечно.

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

RD>Как я уже говорил, профилирование не всегда спасает. Если софт достаточно сложный, то можно просто не догадаться о каком-то случае, где пойдет резкий рост потребления ресурсов. Преставьте себе, что речь идет не о программе в 100-1000 строк написанной одним человеком а скажем о софте в 100K, который писали человек 20.
RD>Кроме того, если софт уже работает в продакшн, то желательно иметь возможность следить за тем, сколько он уже отъел. Хотя бы чтобы не произошло неожиданной беды. В Java для мониторинга есть JMX. А есть ли для хаскеля нормальные средства мониторинга? Лично я не видел ни разу. Что весьма прискорбно.
RD>Обратно же, если у софта out of memory, то желательно чтобы сдохла не более чем одна нить, и было ясно где она умерла. Но этого, насколько я понимаю, от GHC добиться не получится.

Тут я спорить не стану.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[4]: OCaml или LISP ?
От: FR  
Дата: 16.02.09 16:06
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Я написал уже, нет встроенной. Есть регвыражения,

MZ>лексеры и парсеры, в виде библиотек.

В QI http://www.lambdassociates.org/ есть, правда это не совсем lisp
Re[5]: OCaml или LISP ?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 16.02.09 16:09
Оценка: 12 (2)
Здравствуйте, Rtveliashvili Denys, Вы писали:

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


Так это тот же REPL, разве нет?

Ещё — про haskell-mode для Emacs или для vim знаете?

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


Можно сделать Set монадой, тогда это будет простой return. И вообще — это проблема библиотек
Такие проблемы есть, да. Слишком большой Num, например. Или то, что Bool — не класс типов.

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


Ну, printf же как то работает.

Там всё просто на самом деле

class Glue g where
    glue :: String -> g

instance Glue String where
    glue = id

instance Glue g => Glue (String -> g) where
    glue s1 = \s2 -> glue (s1 ++ s2)


И затем просто

main = putStrLn $ glue
  "В пустыне чахлой и скупой,\n"
  "На почве, зноем раскаленной,\n"
  "Анчар, как грозный часовой,\n"
  "Стоит - один во всей вселенной.\n"


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

RD>Обратно же, если у софта out of memory, то желательно чтобы сдохла не более чем одна нить, и было ясно где она умерла. Но этого, насколько я понимаю, от GHC добиться не получится.


Re[6]: OCaml или LISP ?
От: Rtveliashvili Denys Великобритания  
Дата: 16.02.09 16:59
Оценка:
RD>>В упомянутом мной Slime это делается на раз. Пишешь код, жмешь shortcut и он выполнился. Результат выполнения виден. Не нравится — подправил, проверил снова. А из REPL вытащить когда-то определенную там ф-цию или структуру почти невозможно.

L>Так это тот же REPL, разве нет?


Нет, это совсем не REPL (хотя Slime включает его, наверное для ценителей антиквара).

REPL = Read-Eval-Print Loop

Т.е. ввел выражение, оно выполнилось, распечаталось. И пошло по новой. Это то, что наблюдается в GHCi и по моему скромному мнению оно ну просто никак не может претендовать на образец удобства и совершенства.
Однажды введенное выражение уже не так просто вытащить из repl и поместить в модуль. Можно, но зверски неудобно.

Slime чуть более удобен. В нем редактируется непосредственно код. И можно делать как минимум следующее:
1. Выполнить любой фрагмент кода и посмотреть результат выполнения.
2. Развернуть любой макрос.
3. Посмотреть на ассемблерный вариант функции.
4. Легко перейти к определению любой ф-ции или переменной.

Вот подобный инструмент для хаскеля не помешал бы. Вместо LISP-специфичных штучек типа разворачивания макросов можно было бы сделать:
1. Тип выражения, на котором находится курсор.
2. Значение выражения, на котором находится курсор (конечно, если его легко отобразить).

Кстати, я как-то видел плагин для Eclipse что часть этих вещей делает для Ocaml. Для Haskell с его функциональной чистотой это должно быть особенно легко.

L>Ещё — про haskell-mode для Emacs или для vim знаете?


Конечно. Но по-моему это тихий ужас.

Пытался пользоваться haskell-mode. Впечатления:

1. Autoindent есть, но выбирает он, как правило, наименее разумную позицию.
2. Нормальный autocomplete отсутствует.
3. Отображение ошибок отсутствует.
4. Навигация по коду отсутсвует.

Вывод — почти что notepad.

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


L>Можно сделать Set монадой, тогда это будет простой return. И вообще — это проблема библиотек

L>Такие проблемы есть, да. Слишком большой Num, например. Или то, что Bool — не класс типов.

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


L>Ну, printf же как то работает.


L>Там всё просто на самом деле


L>
L>class Glue g where
L>    glue :: String -> g

L>instance Glue String where
L>    glue = id

L>instance Glue g => Glue (String -> g) where
L>    glue s1 = \s2 -> glue (s1 ++ s2)
L>


L>И затем просто


L>
L>main = putStrLn $ glue
L>  "В пустыне чахлой и скупой,\n"
L>  "На почве, зноем раскаленной,\n"
L>  "Анчар, как грозный часовой,\n"
L>  "Стоит - один во всей вселенной.\n"
L>


Симпатично.
Re[7]: OCaml или LISP ?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 16.02.09 17:33
Оценка:
Здравствуйте, Rtveliashvili Denys, Вы писали:

RD>Однажды введенное выражение уже не так просто вытащить из repl и поместить в модуль. Можно, но зверски неудобно.


Э... Как так? Мышкой выделил, средней кнопкой вставил, если отдельные окна, а если в редакторе, например, в vim, то можно yank/paste средствами vim.

RD>1. Выполнить любой фрагмент кода и посмотреть результат выполнения.


:GHCi

RD>2. Развернуть любой макрос.




RD>3. Посмотреть на ассемблерный вариант функции.


Не знаю, навряд ли.

RD>4. Легко перейти к определению любой ф-ции или переменной.


Да. Например, по тагам. В emacs это ещё удобнее.

RD>Вот подобный инструмент для хаскеля не помешал бы. Вместо LISP-специфичных штучек типа разворачивания макросов можно было бы сделать:

RD>1. Тип выражения, на котором находится курсор.

Есть. _t. _T вставляет тип функции.

RD>2. Значение выражения, на котором находится курсор (конечно, если его легко отобразить).


Не знаю, как это сделать удобно, но сделать это вообще совсем несложно — та же команда :GHCi

RD>Пытался пользоваться haskell-mode. Впечатления:


RD>1. Autoindent есть, но выбирает он, как правило, наименее разумную позицию.


Если про Emacs, то да — поначалу расстраивает. Потом привыкаешь
В vim он проще, возможно, удобнее.

RD>2. Нормальный autocomplete отсутствует.


Э? Да там этих автокомплишнов несколько штук. Пример можно?

RD>3. Отображение ошибок отсутствует.


Как это? а quickfix окошко чем не устраивает?

RD>4. Навигация по коду отсутсвует.


Опять таки — таги для идентификаторов, также бегает по файлам (import Blah — стать на Blah, нажать gf).
Или какой то пример, чего не может?

RD>Вывод — почти что notepad.


Ну, чуть более чем Там очень много удобного, на самом деле — haddock, hpaste, помимо этого есть куча других плагинов для Хаскель.
Re[3]: OCaml или LISP ?
От: Mr.Cat  
Дата: 16.02.09 17:51
Оценка:
Здравствуйте, MasterZiv, Вы писали:
MZ>Да ну, уже. Ни то, ни другое — не строгий функц. язык.
Как это не строгий? Может, "не чистый"?

MZ>Ну и как ты оцениваешь "повышенную императивность" ?

Например, негарантированная хвостовая рекурсия заставляет использовать циклы, там, где с точки зрения ФЯ должна быть рекурсия.
Re[6]: OCaml или LISP ?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 16.02.09 18:32
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Можно сделать Set монадой, тогда это будет простой return. И вообще — это проблема библиотек


В общем, да. Set нельзя сделать монадой, т.к. у множества ограничение на тип-параметр (Ord a).

Поэтому и синглтонами тоже нельзя сделать — типы отличаются — в одном случае a -> Seq a, в другом (Ord a) => a -> Set a.
Re[7]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 16.02.09 20:42
Оценка: :))
RD>Вывод — почти что notepad.

Даже вершина и будущее всех программистов — SymADE, — и та представляет собой Notepad.

Больше которого лично мне и не нужно.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[6]: OCaml или LISP ?
От: awson  
Дата: 16.02.09 21:34
Оценка:
RD>>А воообще-то 2-4 минуты на сборку это нехило. И легко объясняет приверженность REPLу. Т.к. "на безрыбье и рак — рыба".
FR>Ну после C++ 5 минут вполне нормально

Любопытно смотрится болтовня пикейных жилетов. Да, GHC — достаточно тормозной, но со времен написания поста Джоэла скрость *компиляции* выросла чуть ли не на порядок.
Re[8]: OCaml или LISP ?
От: Rtveliashvili Denys Великобритания  
Дата: 16.02.09 23:16
Оценка:
RD>>Однажды введенное выражение уже не так просто вытащить из repl и поместить в модуль. Можно, но зверски неудобно.

L>Э... Как так? Мышкой выделил, средней кнопкой вставил, если отдельные окна, а если в редакторе, например, в vim, то можно yank/paste средствами vim.


Вот-вот. Вместо того, чтобы не делать вообще ничего (т.к. код УЖЕ находится в тексте программы), приходится рыскать по истории команд в ghci и копировать это счастье. Чем не обезьянья работа.

RD>>1. Выполнить любой фрагмент кода и посмотреть результат выполнения.


L>:GHCi


Не понял. Предлагается запустить ghci командой из VIM и в нем все выполнить? Спасибо, но как по мне, то нажать один шорткат проще.

RD>>4. Легко перейти к определению любой ф-ции или переменной.


L>Да. Например, по тагам. В emacs это ещё удобнее.


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

RD>>Вот подобный инструмент для хаскеля не помешал бы. Вместо LISP-специфичных штучек типа разворачивания макросов можно было бы сделать:

RD>>1. Тип выражения, на котором находится курсор.

L>Есть. _t. _T вставляет тип функции.


В смысле вставляет? Не надо никуда ничего вставлять. Надо просто взять и показать. Причем желательно так: подводишь курсор к выражению (или выделяешь его) и сразу же видишь и тип и (возможно) значение. Это называется "эргономика".
Я готов даже на вариант-минимум a-la Slime: там по шорткату тип функции показывается в status bar'е.

RD>>2. Значение выражения, на котором находится курсор (конечно, если его легко отобразить).


L>Не знаю, как это сделать удобно, но сделать это вообще совсем несложно — та же команда :GHCi


Все еще не понимаю к чему Вы клоните. :-) Не нужна команда. Надо чтобы было по-нормальному и с минимумом телодвижений. А монумент из кучи тулов и скриптов лишь для того чтобы сделать иллюзию чего-то полезного моей душе принять сложно.

RD>>Пытался пользоваться haskell-mode. Впечатления:


RD>>1. Autoindent есть, но выбирает он, как правило, наименее разумную позицию.


L>Если про Emacs, то да — поначалу расстраивает. Потом привыкаешь :))


Я долго пытался привыкнуть. Решил что лучше вообще без него и в конце-концов перебрался под EclipseFP.

L>В vim он проще, возможно, удобнее.


Возможно. Я не видел, наверное стоит глянуть.

RD>>2. Нормальный autocomplete отсутствует.


L>Э? Да там этих автокомплишнов несколько штук. Пример можно?


Не существует "несколько штук" "нормальных автокомлитов". Это как с добрым, мудрым и вечным. Говорят, все три характеристики вместе не уживаются.

Есть только ОДИН нормальный автокомплит и его ни в одном редакторе для хаскеля я не видел.
Нормальный автокомплит должен:
1. Понимать, что именно находится в области видимости, включая импортированные определения, top-level определения, определения внутри текущей ф-ции и т.д. В общем, надеюсь ясно.
2. Должен ясно понимать систему типов и предлагать только то, что имеет смысл. Если я уже написал foo и у нее тип foo :: Int -> String, то нечего мне предлагать переменные типа Bool.
3. (Особое пожелание) Если написан идентификатор, который не находится в области видимости, но есть среди библиотек (или пользователь пишет import My.Mega.Li..) то autocomplete должен сказать что есть варианты из еще неимпортированных библиотек и автоматически импортнуть когда вариант будет выбран.

А пока что лучшее что я видел — выбор из top-level определений, причем слепой. Еще есть совсем убогий вариант: автокомплит по всем словам что есть в файле. Ну прямо детский сад, ясельная группа. :(

RD>>3. Отображение ошибок отсутствует.


L>Как это? а quickfix окошко чем не устраивает?


Не видел я этот quickfix но попробую догадаться. Надо дать какую-то команду на то, чтобы запустить сборку. И когда она завалится, то будет окошко со списком ошибок и возможностью перейти к нужной строке. Так?
По нормальному это делается так: IDE автоматически проверяет код на ошибки в то время как этот код пишут. И даже не надо запускать билд. Конечно, это надо напрячься и воспользоваться GHC API, но может кто-то на это сподвигнется.

RD>>4. Навигация по коду отсутсвует.


L>Опять таки — таги для идентификаторов, также бегает по файлам (import Blah — стать на Blah, нажать gf).

L>Или какой то пример, чего не может?

Насчет тагов — см. выше.

RD>>Вывод — почти что notepad.


L>Ну, чуть более чем :) Там очень много удобного, на самом деле — haddock, hpaste, помимо этого есть куча других плагинов для Хаскель.


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

Единственное что радует, это что хаскель стает более популярным и может быть ситуация со временем улучшится. Но как говорится, "блажен кто верует".
Re[7]: OCaml или LISP ?
От: Rtveliashvili Denys Великобритания  
Дата: 16.02.09 23:24
Оценка:
L>В общем, да. Set нельзя сделать монадой, т.к. у множества ограничение на тип-параметр (Ord a).

L>Поэтому и синглтонами тоже нельзя сделать — типы отличаются — в одном случае a -> Seq a, в другом (Ord a) => a -> Set a.


Я наивно думал, что можно сделать что-то типа такого:

class Singletonable a where
  singleton :: a -> Singletonable a

class (Singletonable a) => Seq a where
  singleton :: a -> Seq a

class (Singletonable a, Ord a) => Set a where
  singleton :: a -> Set a


Ну или типа того. В общем, Set — это тоже Singletonable и singleton ему не чужд, но ограничений чуть больше, потому что "a" должно быть еще и Ord.
Re[7]: OCaml или LISP ?
От: FR  
Дата: 17.02.09 04:06
Оценка:
Здравствуйте, awson, Вы писали:

A>Любопытно смотрится болтовня пикейных жилетов. Да, GHC — достаточно тормозной, но со времен написания поста Джоэла скрость *компиляции* выросла чуть ли не на порядок.


Даже на малюсеньких примерах которые я компилирую хаскель (последняя версия) намного тормозней Ocaml'а
Re[8]: OCaml или LISP ?
От: awson  
Дата: 17.02.09 06:12
Оценка: 1 (1)
Здравствуйте, FR, Вы писали:

FR>Даже на малюсеньких примерах которые я компилирую хаскель (последняя версия) намного тормозней Ocaml'а


Да, это так. Но сейчас это уже не пропасть. GHC — очень большой и там есть просто неоптимально сделанные места, причем многие давно известны, но не хватает manpower, чтобы этим заниматься. Например, скорость компиляции выросла в 5 раз при переходе (если я правильно помню) от 6.4 к 6.6 просто потому, что пофиксили баг производительности.
Re[8]: OCaml или LISP ?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 17.02.09 08:18
Оценка:
Здравствуйте, Rtveliashvili Denys, Вы писали:

RD>Ну или типа того. В общем, Set — это тоже Singletonable и singleton ему не чужд, но ограничений чуть больше, потому что "a" должно быть еще и Ord.


Стоп! Set — это тип или класс? Я думал, речь идёт о типе.

class Singletonable s where
    singleton :: a -> s a

instance Singletonable Seq where
    singleton = Seq.singleton

instance Singletonable Set where
    singleton = Set.singleton


Но, в общем, Вы правы, его действительно можно сделать синглтоном.
Re[9]: OCaml или LISP ?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 17.02.09 08:18
Оценка:
Здравствуйте, Rtveliashvili Denys, Вы писали:

RD>>>1. Выполнить любой фрагмент кода и посмотреть результат выполнения.


L>>:GHCi

RD>Не понял. Предлагается запустить ghci командой из VIM и в нем все выполнить? Спасибо, но как по мне, то нажать один шорткат проще.

Нет, это команда, вяжешь к ней шоткат, жмёшь и видишь результат в статусе.

RD>>>4. Легко перейти к определению любой ф-ции или переменной.


RD>Да неужели..? Может я чего-то упустил, но всегда мне казалось что таги это костыль. Их надо генерить, а значит они в процессе разработки быстро устаревают.


Да фигли их там генерить, на сохранение, например.

RD>В смысле вставляет? Не надо никуда ничего вставлять. Надо просто взять и показать. Причем желательно так: подводишь курсор к выражению (или выделяешь его) и сразу же видишь и тип и (возможно) значение. Это называется "эргономика".

RD>Я готов даже на вариант-минимум a-la Slime: там по шорткату тип функции показывается в status bar'е.

Ну так я же говорю — _t показывает, а _T вставляет тип.

RD>>>2. Значение выражения, на котором находится курсор (конечно, если его легко отобразить).

L>>Не знаю, как это сделать удобно, но сделать это вообще совсем несложно — та же команда :GHCi

RD>Все еще не понимаю к чему Вы клоните. Не нужна команда. Надо чтобы было по-нормальному и с минимумом телодвижений. А монумент из кучи тулов и скриптов лишь для того чтобы сделать иллюзию чего-то полезного моей душе принять сложно.


Э... Ни к чему я не клоню. Есть команда, на неё можно повестить шоткат.

RD>>>Пытался пользоваться haskell-mode. Впечатления:


RD>>>1. Autoindent есть, но выбирает он, как правило, наименее разумную позицию.

L>>Если про Emacs, то да — поначалу расстраивает. Потом привыкаешь
RD>Я долго пытался привыкнуть. Решил что лучше вообще без него и в конце-концов перебрался под EclipseFP.

Кому как, мне удобный редактор важнее.

RD>>>2. Нормальный autocomplete отсутствует.

L>>Э? Да там этих автокомплишнов несколько штук. Пример можно?
RD>Не существует "несколько штук" "нормальных автокомлитов". Это как с добрым, мудрым и вечным. Говорят, все три характеристики вместе не уживаются.

RD>Есть только ОДИН нормальный автокомплит и его ни в одном редакторе для хаскеля я не видел.

RD>Нормальный автокомплит должен:
RD>1. Понимать, что именно находится в области видимости, включая импортированные определения, top-level определения, определения внутри текущей ф-ции и т.д. В общем, надеюсь ясно.

omnicompletion

RD>2. Должен ясно понимать систему типов и предлагать только то, что имеет смысл. Если я уже написал foo и у нее тип foo :: Int -> String, то нечего мне предлагать переменные типа Bool.


Этого, вроде, нет.

RD>3. (Особое пожелание) Если написан идентификатор, который не находится в области видимости, но есть среди библиотек (или пользователь пишет import My.Mega.Li..) то autocomplete должен сказать что есть варианты из еще неимпортированных библиотек и автоматически импортнуть когда вариант будет выбран.


Это есть.

RD>А пока что лучшее что я видел — выбор из top-level определений, причем слепой. Еще есть совсем убогий вариант: автокомплит по всем словам что есть в файле. Ну прямо детский сад, ясельная группа.


Такой тоже есть.

RD>>>3. Отображение ошибок отсутствует.

L>>Как это? а quickfix окошко чем не устраивает?
RD>Не видел я этот quickfix но попробую догадаться. Надо дать какую-то команду на то, чтобы запустить сборку. И когда она завалится, то будет окошко со списком ошибок и возможностью перейти к нужной строке. Так?

Да.

RD>По нормальному это делается так: IDE автоматически проверяет код на ошибки в то время как этот код пишут. И даже не надо запускать билд. Конечно, это надо напрячься и воспользоваться GHC API, но может кто-то на это сподвигнется.


Может.

RD>>>4. Навигация по коду отсутсвует.


L>>Опять таки — таги для идентификаторов, также бегает по файлам (import Blah — стать на Blah, нажать gf).

L>>Или какой то пример, чего не может?
RD>Насчет тагов — см. выше.

Ну тогда нечестно говорить, что навигация отсутствует — это вводит незнающих в заблуждение. Навигация есть, через таги.

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


Инструментарий у каждого свой. Вещь всё таки больше субъективная. Мне вот для написания программы важнее удобный редактор.

RD>Единственное что радует, это что хаскель стает более популярным и может быть ситуация со временем улучшится. Но как говорится, "блажен кто верует".


Да надо на Yi глянуть, когда последний раз смотрел, он был не очень.
Re[9]: OCaml или LISP ?
От: Mr.Cat  
Дата: 17.02.09 08:25
Оценка:
Здравствуйте, lomeo, Вы писали:
L>Но, в общем, Вы правы, его действительно можно сделать синглтоном.

А надо ли? Этож для каждой функции тип вводить?
Re[10]: OCaml или LISP ?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 17.02.09 09:02
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

L>>Но, в общем, Вы правы, его действительно можно сделать синглтоном.

MC>А надо ли? Этож для каждой функции тип вводить?

Ну, для Set это не имеет значения, но для некоторых типов (функторов) singleton есть функция pure, она же return. А это уже имеет значение, 'a -> f a' есть f-коалгебра (правда, очень специфичная). Значит мы можем использовать её, например, во всяких анаморфизмах.
Re[8]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 17.02.09 10:04
Оценка:
A>>Любопытно смотрится болтовня пикейных жилетов. Да, GHC — достаточно тормозной, но со времен написания поста Джоэла скрость *компиляции* выросла чуть ли не на порядок.

FR>Даже на малюсеньких примерах которые я компилирую хаскель (последняя версия) намного тормозней Ocaml'а


Да.

Окамл справляется с компиляцией практически мгновенно.

Правда, я подозреваю, что у меня какая-то хакнутая версия ocaml. Она, почему-то, выдаёт странное приветствие:

'ocaml' is not recognized as an internal or external command,
operable program or batch file.


Тут что-то не то.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[8]: OCaml или LISP ?
От: thesz Россия http://thesz.livejournal.com
Дата: 17.02.09 10:08
Оценка:
A>>Любопытно смотрится болтовня пикейных жилетов. Да, GHC — достаточно тормозной, но со времен написания поста Джоэла скрость *компиляции* выросла чуть ли не на порядок.
FR>Даже на малюсеньких примерах которые я компилирую хаскель (последняя версия) намного тормозней Ocaml'а

Если чуть серьёзней, то я больше рад улучшениям в системе типов и семантике, чем скорости компиляции.

(я не использовал guards, поскольку они не проваливались в другую ветвь сравнения с образцом. в районе введения pattern guards это дело исправили.)

К тому же, улучшение семантики ведёт к увеличению скорости. Косвенно, но ведёт.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.