ML vs. Lisp
Haskell forever (ты уверен, что здесь есть кто-то знакомый непонаслышке со всем перечисленным?)
Ты знаком с Хаскеллом?
Можешь прокомментировать?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Вам замечание (+). Флуд в тематическом разделе.
я с остальным не знаком, о чём собственно и писал выше
Вам замечание (+). Флуд в тематическом разделе.
Можно ли добиться скорости менее, чем на порядок ниже чем на Фортране или Си? Менее, чем вдвое?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Попробуй Ocaml.
Пробовать и так придётся, а сократить область перебора не вредно.
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
если "на порядок" == "вдвое", то имхо нет , в привычном понимании порядка - можно...
У Ocaml компилер честный (в native code) и поддерживает раздельную сборку модулей.
Сравнение с C где-то в форуме уже было для задачи поиска простых чисел. Был с ним на равных.
А на сколько сам оцениваешь увеличение времени работы?
Втрое? Впятеро? На порядок?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Реализация OCaml одна, нативный компилятор считается хорошим. Динамическая генерация кода противоречит идее строгой типизации, поэтому в лучшем случае будут неудобства, типа вызывания компилятора, генерирования и подгрузки DLL.
Компиляторы scheme и sml скорее всего менее эффективны.
А что у него с действительными числами?
Там ведь не разгонишься логику оптимизировать.
То, что у него компилятор в маш.код, это очень хорошо.
Глупый такой вопрос, а persistency на языке сложно организовывать?
Вроде того, гоняюсь я по кругу, сохраняю время от времени своё состояние...
Бац! Свет вырубили.
Свет включили --- сделал переход и вперёд, с последнего сохранения.
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
верю, что таких циферь можно в большинстве задач добиться...
мне кажется, для целочисленных задач должно быть и вовсе пофигу
Не запомнил, они в свободном доступе есть?
Дело в том, что с Лиспом я знаком лучше, чем со всеми остальными, и выучить КЛ для меня проще, нежели МЛ и пр.
А в чём засада в Схеме?
Какое отличие мешает иметь сравнимую производительность с КЛ?
Или просто нет таких компиляторов?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
не найдёшь - спрашивай там же, ответят 100пудово и гораздо лучше, чем здесь
нароешь что-нибудь про это persistency - обязательно здесь покажи, очень интересно
я вижу два подхода
1. реализовать сохранение/восстановление состояния как фичу рантайма данного языка. не слышал, чтобы это где-то было реализовано.
2. автоматически преобразовывать "обычную" программу (в том числе и в функциональном стиле, с распространённого языка либо с придуманного для этой цели) в такую, которая будет уметь сохранять и восстанавливать состояние. соответственно нужен будет транслятор и целевой автомат для выполнения результата трансляции (библиотека какая-нибудь, скорее всего)
Проще будет установить orthogonally persistant OS.
Но это другой разговор.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek
Есть такие. Native, считаются на FPU.
Ещё есть оптимизированные массивы для хранения чисел (наподобие сишных).
низкоуровневые хаки я не рассматривал, их можно и ещё придумать
SML и OCaml (Caml, вроде, уже давно не поддерживается и на него можно забить) отличаются, как С и С++. В OCaml много дополнительных полезных и не очень фишек, он вроде как быстрее и мне больше нравится.
OCaml компилируется в native код, поэтому скорость у него большая. SML - не помню.
Сёдня весь день это втыкал гыгы
Оказалось, простые вещи сложными словами написаны.
Кста, кто-нить знает, где можно 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" решён в пользу последнего, из-за скорости.
А по поводу сравнения с Лиспами ничего не можешь сказать?
Или ещё какие ФЯ есть разумные?
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.
Если это не слишком нескромно, то почему ты хочешь писать на ФЯ? Из любви к исскуству?
Особенно, если это делается проще.
Не хочу всякий раз переизобретать функции высших порядков.
---
Ибо нефиг.
а) почему-то он является стандартом минобороны Штатов, причём для СРВ;
б) я знаю, как устроено (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.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 и проч. против всех вышеупомянутых.
В том же духе.
---
"...Надо учиться --- не напрягаясь!.." Акад. А.А.Бучаченко.