ML vs. Lisp
Haskell forever (ты уверен, что здесь есть кто-то знакомый непонаслышке со всем перечисленным?)
Я не уверен.
Ты знаком с Хаскеллом?
Можешь прокомментировать?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Ты знаком с Хаскеллом?
Можешь прокомментировать?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Слово знакомое увидел?
Вам замечание (+). Флуд в тематическом разделе.
Вам замечание (+). Флуд в тематическом разделе.
я с остальным не знаком, о чём собственно и писал выше 

лол. ты смешной.
Вам замечание (+). Флуд в тематическом разделе.
Вам замечание (+). Флуд в тематическом разделе.
Сможешь обсудить возможности Хаскелла в области численных расчётов?
Можно ли добиться скорости менее, чем на порядок ниже чем на Фортране или Си? Менее, чем вдвое?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Можно ли добиться скорости менее, чем на порядок ниже чем на Фортране или Си? Менее, чем вдвое?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
На Haskell'е вряд ли.
Попробуй Ocaml.
Попробуй Ocaml.
Мне нужны ответы не "попробуй", а сравнения или отзывы.
Пробовать и так придётся, а сократить область перебора не вредно.
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Пробовать и так придётся, а сократить область перебора не вредно.
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
если "на порядок" == "вдвое", то имхо нет
, в привычном понимании порядка - можно...
, в привычном понимании порядка - можно...Откуда я могу знать, как оно поведёт себя в _твоей_конкретной_задаче_ ?
У Ocaml компилер честный (в native code) и поддерживает раздельную сборку модулей.
Сравнение с C где-то в форуме уже было для задачи поиска простых чисел. Был с ним на равных.
У Ocaml компилер честный (в native code) и поддерживает раздельную сборку модулей.
Сравнение с C где-то в форуме уже было для задачи поиска простых чисел. Был с ним на равных.
Тогда, боюсь, на Хаскелл придётся пока забить.
А на сколько сам оцениваешь увеличение времени работы?
Втрое? Впятеро? На порядок?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
А на сколько сам оцениваешь увеличение времени работы?
Втрое? Впятеро? На порядок?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Некоторые компиляторы CL считаются хорошими для численных расчётов, какие именно, я не запомнил. С динамической генерацией кода всё хорошо, естественно.
Реализация OCaml одна, нативный компилятор считается хорошим. Динамическая генерация кода противоречит идее строгой типизации, поэтому в лучшем случае будут неудобства, типа вызывания компилятора, генерирования и подгрузки DLL.
Компиляторы scheme и sml скорее всего менее эффективны.
Реализация OCaml одна, нативный компилятор считается хорошим. Динамическая генерация кода противоречит идее строгой типизации, поэтому в лучшем случае будут неудобства, типа вызывания компилятора, генерирования и подгрузки DLL.
Компиляторы scheme и sml скорее всего менее эффективны.
Так ведь, и я не знаю, как он поведёт себя на моей задаче.
А что у него с действительными числами?
Там ведь не разгонишься логику оптимизировать.
То, что у него компилятор в маш.код, это очень хорошо.
Глупый такой вопрос, а persistency на языке сложно организовывать?
Вроде того, гоняюсь я по кругу, сохраняю время от времени своё состояние...
Бац! Свет вырубили.
Свет включили --- сделал переход и вперёд, с последнего сохранения.
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
А что у него с действительными числами?
Там ведь не разгонишься логику оптимизировать.
То, что у него компилятор в маш.код, это очень хорошо.
Глупый такой вопрос, а persistency на языке сложно организовывать?
Вроде того, гоняюсь я по кругу, сохраняю время от времени своё состояние...
Бац! Свет вырубили.
Свет включили --- сделал переход и вперёд, с последнего сохранения.
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
поиск собственных векторов у меня получился где-то в 4 медленнее С-ного, соответственно это примерно в 8 раз медленнее фортрана....
верю, что таких циферь можно в большинстве задач добиться...
мне кажется, для целочисленных задач должно быть и вовсе пофигу
верю, что таких циферь можно в большинстве задач добиться...
мне кажется, для целочисленных задач должно быть и вовсе пофигу
А нигде у тебя не записано?
Не запомнил, они в свободном доступе есть?
Дело в том, что с Лиспом я знаком лучше, чем со всеми остальными, и выучить КЛ для меня проще, нежели МЛ и пр.
А в чём засада в Схеме?
Какое отличие мешает иметь сравнимую производительность с КЛ?
Или просто нет таких компиляторов?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Не запомнил, они в свободном доступе есть?
Дело в том, что с Лиспом я знаком лучше, чем со всеми остальными, и выучить КЛ для меня проще, нежели МЛ и пр.
А в чём засада в Схеме?
Какое отличие мешает иметь сравнимую производительность с КЛ?
Или просто нет таких компиляторов?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
поищи в архивах comp.lang.functional
не найдёшь - спрашивай там же, ответят 100пудово и гораздо лучше, чем здесь
нароешь что-нибудь про это persistency - обязательно здесь покажи, очень интересно
я вижу два подхода
1. реализовать сохранение/восстановление состояния как фичу рантайма данного языка. не слышал, чтобы это где-то было реализовано.
2. автоматически преобразовывать "обычную" программу (в том числе и в функциональном стиле, с распространённого языка либо с придуманного для этой цели) в такую, которая будет уметь сохранять и восстанавливать состояние. соответственно нужен будет транслятор и целевой автомат для выполнения результата трансляции (библиотека какая-нибудь, скорее всего)
не найдёшь - спрашивай там же, ответят 100пудово и гораздо лучше, чем здесь
нароешь что-нибудь про это persistency - обязательно здесь покажи, очень интересно
я вижу два подхода
1. реализовать сохранение/восстановление состояния как фичу рантайма данного языка. не слышал, чтобы это где-то было реализовано.
2. автоматически преобразовывать "обычную" программу (в том числе и в функциональном стиле, с распространённого языка либо с придуманного для этой цели) в такую, которая будет уметь сохранять и восстанавливать состояние. соответственно нужен будет транслятор и целевой автомат для выполнения результата трансляции (библиотека какая-нибудь, скорее всего)
> 1. реализовать сохранение/восстановление состояния как фичу рантайма
Проще будет установить orthogonally persistant OS.
Но это другой разговор.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
Проще будет установить orthogonally persistant OS.
Но это другой разговор.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
> А что у него с действительными числами?
Есть такие. Native, считаются на FPU.
Ещё есть оптимизированные массивы для хранения чисел (наподобие сишных).
Есть такие. Native, считаются на FPU.
Ещё есть оптимизированные массивы для хранения чисел (наподобие сишных).
низкоуровневые хаки я не рассматривал, их можно и ещё придумать
Ни в коем случае не Хаскель, хоть он и шедевр. Но увы по скорости Call-by-name языки в жопе, по сравнению c call-by-value. Чистая функциональность так просто не дается. Кроме того, в Хаскеле IO связано с монадами - концепцией достаточно сложной для понимания.
SML и OCaml (Caml, вроде, уже давно не поддерживается и на него можно забить) отличаются, как С и С++. В OCaml много дополнительных полезных и не очень фишек, он вроде как быстрее и мне больше нравится.
OCaml компилируется в native код, поэтому скорость у него большая. SML - не помню.
SML и OCaml (Caml, вроде, уже давно не поддерживается и на него можно забить) отличаются, как С и С++. В OCaml много дополнительных полезных и не очень фишек, он вроде как быстрее и мне больше нравится.
OCaml компилируется в native код, поэтому скорость у него большая. SML - не помню.
> в Хаскеле IO связано с монадами - концепцией достаточно сложной для понимания.
Сёдня весь день это втыкал гыгы
Оказалось, простые вещи сложными словами написаны.
Кста, кто-нить знает, где можно http://research.microsoft.com/~adg/Publications/fpio.html найти?
Functional Programming and Input/Output. Andrew D. Gordon. - дисер мужика, который это придумал.
Сёдня весь день это втыкал гыгы

Оказалось, простые вещи сложными словами написаны.
Кста, кто-нить знает, где можно http://research.microsoft.com/~adg/Publications/fpio.html найти?
Functional Programming and Input/Output. Andrew D. Gordon. - дисер мужика, который это придумал.
Сравнение OCAML vs Others, закончившееся сокрушительной победой первого над всеми остальными, кроме, конечно, С, можно найти у них на сайте. Задачи там были как раз численные.
Это можно найти в Categories, Triples and Theories. M. Barr, C. Wells. Я пока дочитал до монад охренел и поэтому монады так и не понял 

Ясно.
Пока, вопрос "SML vs. OCaml" решён в пользу последнего, из-за скорости.
А по поводу сравнения с Лиспами ничего не можешь сказать?
Или ещё какие ФЯ есть разумные?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Пока, вопрос "SML vs. OCaml" решён в пользу последнего, из-за скорости.
А по поводу сравнения с Лиспами ничего не можешь сказать?
Или ещё какие ФЯ есть разумные?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Чего не знаю, того не знаю. Но для численных рассчетов, мне кажется, Lisp мало подходит. Ведь не для этого его придумывали.
Если это не слишком нескромно, то почему ты хочешь писать на ФЯ? Из любви к исскуству?
Если это не слишком нескромно, то почему ты хочешь писать на ФЯ? Из любви к исскуству?
Просто я не знаю и не слышал ничего хорошего о новых императивных языках, а писать на Си некоторые вещи меня _задолбало_.
Особенно, если это делается проще.
Не хочу всякий раз переизобретать функции высших порядков.
---
Ибо нефиг.
Особенно, если это делается проще.
Не хочу всякий раз переизобретать функции высших порядков.
---
Ибо нефиг.
Лисп, я знаю, не для расчётов придумывали, но с другой стороны:
а) почему-то он является стандартом минобороны Штатов, причём для СРВ;
б) я знаю, как устроено (lambda ...);
в) я могу менять это (lambda ...) не отрываясь от работы, а прога от этого не пострадает, потому что расчитана не на столько-то параметров у функции F,
а на то, что есть у F есть своё (lambda ... у которого я могу взять cadr.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
а) почему-то он является стандартом минобороны Штатов, причём для СРВ;
б) я знаю, как устроено (lambda ...);
в) я могу менять это (lambda ...) не отрываясь от работы, а прога от этого не пострадает, потому что расчитана не на столько-то параметров у функции F,
а на то, что есть у F есть своё (lambda ... у которого я могу взять cadr.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
Да уж. Функциональность можно оценить только попробовав, что это такое.
Хм. Как интересна-а...
http://www.smlnj.org//doc/FAQ/usage.html#saveImage
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
How do I save an SML image?
To save a heap-image of the SML/NJ interactive system, use the function
exportML: string -> bool
which is defined in the SMLofNJ structure. A call such as
exportML "image"
causes a heap image to be saved as image.arch-opsys where arch-opsys designates the architecture and operating system (e.g. image.sparc-solaris). The original call of exportML returns false.
How do I run a saved SML image?
Having created a heap image file, say image.arch-opsys with the exportML function, you can run the image, resuming the interactive loop from the point where exportML was called by executing
sml @SMLload=image.arch-opsys
(where arch-opsys will be a particular architecture, operating system combination like "sparc-solaris" or just
sml @SMLload=image
since sml can figure out the right arch-opsys suffix. Execution will resume at the point where exportML returned, with the return value being true to indicate that we are in the resumed image.
How do I create a stand-alone SML application?
To create a stand-alone application, use the function
exportFn: (string * string * string list) -> OS.Process.status -> unit
which is defined in the SMLofNJ structure. This function also produces a heap image file that must be passed as an @SMLload parameter to sml to be run. If you want to create a simple executable image, see the following question.
How do I create an executable image for an SML/NJ application?
It is possible to combine a heap image with the SML/NJ runtime to create a normal executable file by using Lorenz Huelsbergen's heap2exec utility.
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
http://www.smlnj.org//doc/FAQ/usage.html#saveImage
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
How do I save an SML image?
To save a heap-image of the SML/NJ interactive system, use the function
exportML: string -> bool
which is defined in the SMLofNJ structure. A call such as
exportML "image"
causes a heap image to be saved as image.arch-opsys where arch-opsys designates the architecture and operating system (e.g. image.sparc-solaris). The original call of exportML returns false.
How do I run a saved SML image?
Having created a heap image file, say image.arch-opsys with the exportML function, you can run the image, resuming the interactive loop from the point where exportML was called by executing
sml @SMLload=image.arch-opsys
(where arch-opsys will be a particular architecture, operating system combination like "sparc-solaris" or just
sml @SMLload=image
since sml can figure out the right arch-opsys suffix. Execution will resume at the point where exportML returned, with the return value being true to indicate that we are in the resumed image.
How do I create a stand-alone SML application?
To create a stand-alone application, use the function
exportFn: (string * string * string list) -> OS.Process.status -> unit
which is defined in the SMLofNJ structure. This function also produces a heap image file that must be passed as an @SMLload parameter to sml to be run. If you want to create a simple executable image, see the following question.
How do I create an executable image for an SML/NJ application?
It is possible to combine a heap image with the SML/NJ runtime to create a normal executable file by using Lorenz Huelsbergen's heap2exec utility.
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
тоже в целом низкоуровневый хак, увы
А вот в Poly/ML сохраняемость встроена:
http://www.polyml.org/docs/Intro1.html#Intro1
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
1.6 Persistence
Persistence means that values created in one Poly/ML session may be accessed in subsequent Poly/ML sessions without the need to explicitly reload them and without the need for recompilation.
When Poly/ML values are initially created, they are transient (non-persistent). Transient values are stored in the local heap and vanish at the end of the Poly/ML session which created them. By contrast, persistent values are stored in a disk file called a database and are accessible by all future Poly/ML sessions. When a persistent value is used during a Poly/ML session, it is paged into memory using the Unix demand paging mechanism. The function PolyML.commit causes transient values to become persistent, by copying them from the local heap to the database.
If a Poly/ML session attempts to modify a persistent object, the database is not updated directly. Instead, a copy of the modified object is made in the local heap. This means that the modification itself is transient - the current Poly/ML session will use the modified value, but subsequent sessions will see the old value, unless the database is updated using PolyML. commit. Once a modification has been committed, it is permanent; there is no way to revert to the earlier state of the database.
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
http://www.polyml.org/docs/Intro1.html#Intro1
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
1.6 Persistence
Persistence means that values created in one Poly/ML session may be accessed in subsequent Poly/ML sessions without the need to explicitly reload them and without the need for recompilation.
When Poly/ML values are initially created, they are transient (non-persistent). Transient values are stored in the local heap and vanish at the end of the Poly/ML session which created them. By contrast, persistent values are stored in a disk file called a database and are accessible by all future Poly/ML sessions. When a persistent value is used during a Poly/ML session, it is paged into memory using the Unix demand paging mechanism. The function PolyML.commit causes transient values to become persistent, by copying them from the local heap to the database.
If a Poly/ML session attempts to modify a persistent object, the database is not updated directly. Instead, a copy of the modified object is made in the local heap. This means that the modification itself is transient - the current Poly/ML session will use the modified value, but subsequent sessions will see the old value, unless the database is updated using PolyML. commit. Once a modification has been committed, it is permanent; there is no way to revert to the earlier state of the database.
/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
Оставить комментарий
Ivan8209
Постановка задачи.1. Удобство программирования.
Си и проч. диалекты отметаем.
2. Скорость.
Предполагаются численные расчёты.
3. Изменчивость.
Лучше, если возможна пересборка (частей) на лету.
Всвязи с этим, хочу узнать мнения на примере вышеупомянутых семейств языков.
1. Scheme vs. Common Lisp.
Являются ли в Схеме функции лямбда-выражениями (то есть, списками) или как?
Или функции получаются из лямбд путём (eval (lambda ...?
Я подозреваю второе. Я прав?
2. SML vs. (O)Caml.
Чем они различаются? Все трое.
Имеются ли в наличии хорощие компиляторы SML? Caml?
Какие?
3. Scheme vs. SML.
Скорость против изменчивости?
Насколько неудобно будет пересобирать SML на лету.
4. Common Lisp vs. Scheme.
Скорость? В т.ч. среди существующих свободно доступных реализаций.
5. П. 2 в отношении скорости работы собранных программ.
Вообще, кто-либо здесь есть из функциональщиков?
Дополнительный вопрос: Haskell и проч. против всех вышеупомянутых.
В том же духе.
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.