Сабж.
И какая из бесплатных систем самая развитая?
Субъективно. Мне схема ближе существенно большей регулярностью. Лисп в этом отношении слишком эклектичный, ближе к естественным языкам — такой же запутанный время от времени вносимыми новшествами, плохо (на мой взгляд) совместимыми с тем, что было раньше.
Реализации — у лиспа собственно CLisp и есть, у схемы я предпочитаю PLT Scheme. Она не совсем соответствует R5RS, но на мой взгляд даже лучше, причем поддерживать стандарт при желании тоже умеет. R6RS тоже вроде держит, но не пробовал.
А для каких задач?
Для совершенно разных.
А почему именно функциональные языки?
После того, как я сидел под Хаскелем, Схема и Лисп не выглядят функциональными вовсе 8) Императивщина ведь.
На лиспе тоже можно писать функционально, как-никак никакой императивщины в лиспе изначально вообще не было. Это уже зависит от того, кто и как лисп использует. А вообще чисто функциональные языки существуют только в теории. Без ввода-вывода тяжело обходиться, знаете ли.
Установил DrScheme (интересные у них нейминг конвеншнс: устанавливал PLT Scheme, установился DrScheme :) ), изучаю.
PLT scheme состоит из трех частей: mzscheme (интерпретатор без графических возможностей, mred (интерпретатор с графическими возможностями) и drscheme (IDE для них).
Примеры не хотят запускаться.
Я, может, не тот язык выбрал?
Верхний фрейм (квадратные скобки выделены красным):
Цитировать(define deck
(let loop ([n DECK-COUNT])
Нижний:
ЦитироватьWelcome to DrScheme, version 4.1.5 [3m].
Language: R5RS; memory limit: 128 megabytes.
. read: illegal use of open square bracket
В схеме разве есть квадратные скобки?
Да чёрт его знает.
У документа расширение называется ничего не говоряще PLT Scheme Document.
И каким языком его открывать — без понятия.
По синтаксису — Схема :-\
О, режим Pretty Big уже не выдаёт ошибок.
Только всё равно не запускается :D
ЦитироватьInteractions disabled: setup/infotab does not support a REPL (no #%top-interaction)
это если запустить info.ss, ибо checkers.ss вообще не выдаёт ни привета, ни ответа.
Цитата: Алексей Гринь от мая 27, 2009, 04:10
Сабж.
И какая из бесплатных систем самая развитая?
CL. Во-первых, неплохой стандарт; во-вторых, есть хорошие реализации и коммерческие и свободные.
У Схемы компиляторы в машинный код есть?
Да, что у её реализаций с Уникодом?
Цитата: myst от мая 27, 2009, 18:03
-первых, неплохой стандарт; во
Там фигово с хвостовыми рекурсиями, я читал, а, стало быть, не дадут вволю функциональшиной побаловаться — тормоза и глюки.
Цитата: myst от мая 27, 2009, 18:05
У Схемы компиляторы в машинный код есть?
Chicken
Цитата: Алексей Гринь от мая 27, 2009, 18:07
Там фигово с хвостовыми рекурсиями, я читал, а, стало быть, не дадут вволю функциональшиной побаловаться — тормоза и глюки.
Просто в стандарте это требование не зафиксировано, а в хороших реализациях оптимизация есть.
Реализации Схемы тормознее.
Цитата: Алексей Гринь от мая 27, 2009, 18:07
Chicken
Цитата: http://en.wikipedia.org/wiki/Chicken_(Scheme_implementation)
Chicken is a compiler and interpreter for the Scheme programming language that compiles Scheme code to standard C.
:smoke:
Я знаю, что C можно скомпилировать. :)
Вот тебе сравнение с SBCL:
(http://shootout.alioth.debian.org/gp4/chartvs.php?r=eNo9j8kRREEIQlPCXaIw%2F2yG%2FocpD13iE2kc%2FtUJYC6RM3UFJySaRblEjtnlNjlXk1mtLmxT5MJLZK4LQQX4yOEnRpTEplEkuHtlPa51hmkvub1xjSIkjhf9yv2z9omQp3mGQrCNQkqhcLE5q5wBtDxhNpq9tM86af3%2Fl5PvjufYN%2FrOkS1LK6tQ2rTxa%2B%2FSE%2FLlEycNP4U9QBw%3D&m=eNrLzUxRMDIwsFBILzBRyAMAHeID3g%3D%3D&w=eNpLzshMzk7N8y9OSs4BAB8bBMk%3D)
(http://shootout.alioth.debian.org/gp4/chartvs.php?r=eNodUNkRRDEIaklF0FRh%2F90sb8cPE5EjYUN41y%2B16cYhL%2F6lmHl1rSzQUNfWcRCca24Hrlc7HqaGe6xI4MN8OCWqrawArbw7pgulag%2B9n8fItQMj1liv5eAb3K3plc9d9Q0LmTwyav%2Fu40jMROtLlrnXjSdjS1sc4froUQhrtqneBJ6zCOLnwGljVI7DA36b6aF5J0d7JvDt%2BzQr5JUOhX8CGtjvlec%2FQIpGag%3D%3D&m=eNrLzUxRMDIwsFBILzBRyAMAHeID3g%3D%3D&w=eNrLrSpOzkjNTfUvTkrOAQAl9QVQ)
(http://shootout.alioth.debian.org/gp4/chartvs.php?r=eNo9j9mNRTEIQ1uCsNlV0H83Y670JvlACT422Nr%2FrYFNbxkCvkmOx9ajuXpuBDbR0ZIUnl41RHJznMUtSlHC6R8ur942HQFPfwKsiVDPa%2BpKxGftT3iIlMTD%2BAQYWiVHRp9njHoKGuXlkzKpKRQEjPFc%2BnCb6SsRM7%2B9qvpyIglNC8LlzJibyNvT5CXL9y1rtyUy%2BgI86g%2FLTEBz&m=eNrLzUxRMDIwsFBILzBRyAMAHeID3g%3D%3D&w=eNrLzE4sKi32L05KzgEAG0kEgw%3D%3D)
Цитата: myst от мая 27, 2009, 18:13
:smoke:
Я знаю, что C можно скомпилировать. :)
Я как-то его юзал, он мне компилировал сразу в натив. Была ли там интеграция с GCC, или он какбэ сам по себе уже стандалоне (с частями кода, очевидно, спёртыми у ГЦЦ) — я не помню.
Но там точно есть возможность транслировать и в Си, и в натив.
В любом случае ГЦЦу скармливал результат без жалоб.
Мне у Схемы нравится обозначение предикатов знаком вопроса на конце.
Цитата: Алексей Гринь от мая 27, 2009, 18:22
Я как-то его юзал, он мне компилировал сразу в натив.
Он на лету в машинный код компилирует? Можно отдельную функцию взять и скомпилировать?
Цитата: myst от мая 27, 2009, 18:29
Он на лету в машинный код компилирует? Можно отдельную функцию взять и скомпилировать?
Нет, это те не форт. Как ты себе это представляешь? Там вроде и интерактивной консольки нету :(
Компиляторы Схемы в С есть, а вот в машинный код, да штоб динамически...
Цитата: Алексей Гринь от мая 27, 2009, 18:32
Нет, это те не форт. Как ты себе это представляешь? Там вроде и интерактивной консольки нету :(
А у реализаций CL мона. И интерактивный режим есть, и отладчик, и профилёр, и все дела. :)
Цитата: myst от мая 27, 2009, 18:32
Компиляторы Схемы в С есть, а вот в машинный код, да штоб динамически...
Такое, по-моему, возможно только в стековых машинах.
На Коммон Лиспе есть чтоль такое?
Вобщем, я так и не смог ьзапустить ни примера :D Хорошая типа среда.
ЦитироватьА у реализаций CL мона. И интерактивный режим есть, и отладчик, и все дела. :)
Так я про один единственный Чикен говорю. При чм здесь бесчисленные реализации КЛ? У Схемы тоже полно реализаций, в которой есть и интерактивный режим, и отладчик, ПЛТ Схеме тот же, который у меня не хочет примеры кушать, правда.
Попробуй http://trac.clozure.com/ccl . Я сам не пробовал, но на ЛОР'е отзывались очень положительно.
Цитата: Алексей Гринь от мая 27, 2009, 18:35
У Схемы тоже полно реализаций, в которой есть и интерактивный режим, и отладчик, ПЛТ Схеме тот же, который у меня не хочет примеры кушать, правда.
Но с компилятором в машинный код я ещё не встречал. Я просто года 3 назад выбирал между реализациями Схемы и CL. В итоге остановился на CLISP'е. Для зубочисток самое то. :)
В общем, я тебе рекомендую сравнить возможности разных реализаций того и другого и выбрать наиболее подходящее. :)
Я слышал, у Схемы с переносимостью кода хуже дела. Но это было несколько лет назад.
Цитата: Алексей Гринь от мая 27, 2009, 17:51
(define deck
(let loop ([n DECK-COUNT])
А что это за фрагмент? Он неработоспособен на любом языке. :) Хинт -- разное количество открывающих и закрывающих скобок.
Pretty Big должен работать, вроде — вообще я их IDE не пользуюсь, но смотреть смотрел, и у меня остался сохраненным именно этот вариант.
Что касается переносимости, то тут есть зерно истины. Но зависит, куда требуется переносимость. Одна и та же реализация обычно переносима между разными платформами, а PLT есть и под винды и под линух, и у меня работает даже на таблетке n810. Вот если требуется переносимость куда-нибудь, где нет PLT, тогда стоит более тщательно сформулировать цель.
Цитата: oort от мая 27, 2009, 18:48
Что касается переносимости, то тут есть зерно истины. Но зависит, куда требуется переносимость.
Я неточно выразился. Я имел в виду переносимость кода между разными реализациями.
Цитата: oort от мая 27, 2009, 18:44
А что это за фрагмент? Он неработоспособен на любом языке. :) Хинт -- разное количество открывающих и закрывающих скобок.
Не, я кусок только привёл, там далее всё нормально закрывается.
В режиме Pretty Big стал «работать», т.е. ошибок перестал выдавать. Но ничего не происходит, если запускать интуитивно логичное checkers.ss :) А если запускать файл info (второй из двух файлов с расширением программ), то выдаёт ошибку, которую я привёл выше
ЦитироватьInteractions disabled: setup/infotab does not support a REPL (no #%top-interaction)
Но это он выдаёт в ИДЕ. Т.е. запускаю через ИДЕ. Может через что-то ещё надо? Непонятно.
Цитата: Алексей Гринь от мая 27, 2009, 18:52
Но это он выдаёт в ИДЕ. Т.е. запускаю через ИДЕ.
Запусти в командной строке. А лучше забей на Схему и попробуй Clozure CL. Всё сам хочу попробовать, да трафика жаль. Драндулет, говорят, очень хороший. :)
Инфо -- это совсем не то. Чекерс попробовал запустить, но обломился — у меня не установлена GL.
Можно действительно запускать руками -- mred <file>. ИДЕ я совсем не знаю.
Цитата: oort от мая 27, 2009, 19:03
Можно действительно запускать руками -- mred <file>.
Под виндой муторно это всё так...
Цитата: Алексей Гринь от мая 27, 2009, 19:10
Под виндой муторно это всё так...
Use cygwin or coLinux, Luke! ;)
Второе кошернее.
Ну, свои программы вполне можно запускать и из ИДЕ, ибо о своих все известно. А примеры — к ним сначала надо доки почитать, чтобы понять, как именно их запускать.
Посмотрел — соседний с чекерсом блэкджек запускается так:
- загрузить
- кнопка run
- в диалоговом окне:
-- (require 'blackjack)
-- (invoke-unit game@)
Предполагаю, что чекерс запускается так же (с точностью до имени пакета).
Цитата: Алексей Гринь от мая 27, 2009, 18:35
На Коммон Лиспе есть чтоль такое?
Цитата: myst от мая 27, 2009, 18:38
Но с компилятором в машинный код я ещё не встречал
CMU CL
Цитата: addewyd от мая 27, 2009, 19:28
Цитата: Алексей Гринь от мая 27, 2009, 18:35
На Коммон Лиспе есть чтоль такое?
Цитата: myst от мая 27, 2009, 18:38
Но с компилятором в машинный код я ещё не встречал
CMU CL
Я про Схему говорил. У CL есть и не одна.
Как-то мне кажется, что для лиспообразных языков компиляция в машинный код нужна только для галочки, что, мол, мы крутые, у нас она есть. В реальности лисповская идеология с современными процессорами плохо совместима. А при наличии хардверной лисп-машины вопрос о реализации обычно не стоит. :)
Всё ж коммон лисп более пригоден для серьёзных задач, чем схема.
Я так думаю. А цму круче всех.
Цитата: oort от мая 27, 2009, 19:34
реальности лисповская идеология с современными процессорами плохо совместима
Современным компляторам пофиг идеология. Скомпилируют, оптимизируют...
Возможно. Я лишь высказал свое мнение. А цму зело академична. На ней учат думать, но для реальной работы все же желательны немного другие подходы. Мне лично желательны, по крайней мере.
Я нисколько не против цму. Но десятистрочный скрипт, выполняющийся путем загрузки дампа в интерпретатор, вызывает у меня когнитивный диссонанс.
Цитата: addewyd от мая 27, 2009, 19:38
Современным компляторам пофиг идеология. Скомпилируют, оптимизируют...
Скомпилировать-то скомпилируют. А вот смогут ли соптимизировать — вопрос. Ибо во многих случаях необходимые для оптимизации детали проявляются только на этапе выполнения.
В конце концов, у PLT тоже есть компилятор в исполнимый модуль. А что реально он содержит в себе тот же интерпретатор, интерпретирующий включенную в тот же экзешник программу, дело десятое.
Цитата: oort от мая 27, 2009, 19:42
А что реально он содержит в себе тот же интерпретатор, интерпретирующий включенную в тот же экзешник программу, дело десятое.
Обычно мне такой подход больше нравится, ибо легче дебуггить если ошибка вдруг произошла на уже скомпиленной работающий проге (лишь бы ещё трансляция в джит была!..)
Джит есть.
Цитата: oort от мая 27, 2009, 19:34
Как-то мне кажется, что для лиспообразных языков компиляция в машинный код нужна только для галочки, что, мол, мы крутые, у нас она есть. В реальности лисповская идеология с современными процессорами плохо совместима.
Я бы так не сказал. Компилирующие реализации заметно быстрее байткодовых.
Цитата: Алексей Гринь от мая 27, 2009, 19:45
Обычно мне такой подход больше нравится, ибо легче дебуггить если ошибка вдруг произошла на уже скомпиленной работающий проге
Ну не знаю, разведением слонопотамов заниматься... :)
А clisp всё-таки игрушка. Хорошая, да. И ещё хорошо, что с одни из разработчиков можно по-русски общаться)
А вообще рекомендую хаскель. как раз для лингвистов)
Цитата: addewyd от мая 27, 2009, 20:19
А clisp всё-таки игрушка. Хорошая, да.
Для зубочисток — милое дело. А для взрослых вещей можно взять взрослую реализацию, благо они есть.
Цитата: addewyd от мая 27, 2009, 20:20
А вообще рекомендую хаскель. как раз для лингвистов)
Для лингвистов есть специализированный софт. Зачем им травмировать мозг программированием?
Цитата: addewyd от мая 27, 2009, 20:20
А вообще рекомендую хаскель. как раз для лингвистов)
А что можно по хаскелю в инете найти (на русском или английском), чтобы понять, что это такое, и хочу ли я его?
Цитата: myst от мая 27, 2009, 20:25
Для лингвистов есть специализированный софт
Я имею ввиду язык как объект, не средство)
Цитата: oort от мая 27, 2009, 20:26
А что можно по хаскелю в инете найти (на русском или английском), чтобы понять, что это такое, и хочу ли я его?
Конечно. haskell.org
Цитата: oort от мая 27, 2009, 20:26
А что можно по хаскелю в инете найти (на русском или английском), чтобы понять, что это такое, и хочу ли я его?
Когда я последний раз интересовался, была спецификация для создателей трансляторов. Об неё-то я сломал мозг и надежду понять, что такое Haskell. :)
Цитата: myst от мая 27, 2009, 21:10
неё-то я сломал мозг и надежду понять, что такое Haskell
Видимо, вы ненастоящий лингвист :)
Цитироватьчтобы понять, что это такое, и хочу ли я его?
Хаскель нужен для трёх вещей, чтобы
1) иметь возможность сказать друзьям: "я крут, я пишу на хаскеле"
2) сдать преподу лабу
3) потренировать мозги всякими безделушными проектами типа хелловорлд через монады
Всё.
Цитата: addewyd от мая 27, 2009, 21:17
Видимо, вы ненастоящий лингвист :)
Хуже. Я не. :)
Цитата: Алексей Гринь от мая 27, 2009, 21:20
потренировать мозги
завсегда полезно.
Цитата: Алексей Гринь от мая 27, 2009, 21:20
безделушными проектами
Не скажите. Так можно и всю математику перечерекнуть.
Язык программирования — это в первую очередь инструмент. Он должен быть полезен практически.
Хм. Формальные определения — это, конечно, очень хорошо, а более человекообразного описания нигде нет? Чтобы не учить язык в совершенстве (это, возможно, понадобится потом), а составить предварительное мнение о том, хочу ли я его учить. А то он далеко не один в очереди...
Цитата: Алексей Гринь от мая 27, 2009, 21:20
Цитироватьчтобы понять, что это такое, и хочу ли я его?
Хаскель нужен для трёх вещей, чтобы
1) иметь возможность сказать друзьям: "я крут, я пишу на хаскеле"
2) сдать преподу лабу
3) потренировать мозги всякими безделушными проектами типа хелловорлд через монады
Всё.
Такие мнения я тоже слышал. Вот потому и хочу составить собственное. Но, видимо, не настолько сильно хочу, чтобы читать низкоуровневое руководство. :)
Цитата: oort от мая 27, 2009, 21:27
Но, видимо, не настолько сильно хочу, чтобы читать низкоуровневое руководство. :)
То есть за последние 6—8 лет ничего не изменилось? :)
Цитата: myst от мая 27, 2009, 21:30
То есть за последние 6—8 лет ничего не изменилось?
Э... В где?
Цитата: oort от мая 27, 2009, 21:32
Э... В где?
В документации на Haskell.
Цитата: myst от мая 27, 2009, 21:34
В документации на Haskell.
На первый взгляд, видимо, если и изменилось, то немного.
Радует, что PLT Scheme умеет создавать stand-alone distribution archives.
Только приходиться платить ценою в мегабайты.
Написал простенькую гуишку:
#lang scheme
(require scheme/gui/base)
(define action-frame%
(class frame%
(super-new (label "Actions Window") (width 300) (height 300))
(define top-menu-bar
(new menu-bar% (parent this)))
(define actions-menu
(new menu% (label "Actions") (parent top-menu-bar)))
(define close-menu-item
(new menu-item%
(label "Close")
(parent actions-menu)
(callback (lambda (self e)
(send this show #f)))))))
(send (new action-frame%) show #t)
В итоге он мне родил zip-архив размером 3.66 мб, который по разархивации имеет размер все 9.21 мб :o
Интересные файлы он содержит:
window_test.exe
iconv.dll
libmred3m_6mqxfs.dll
libmzsch3m_6mqxfs.dll
UnicoWS.dll
Всё.
И вот мне что интересно — он тупо интерпретирует вшитый в эксешник байткод (если не целиком s-выражения) или там действительно идёт компиляция в натив? Могу ли я расчитывать на скорость?
Цитата: Алексей Гринь от мая 29, 2009, 04:01
Только приходиться платить ценою в мегабайты.
Ну дык, я ж не зря намекал на слонопотамов. :)
Цитата: Алексей Гринь от мая 29, 2009, 04:01
Могу ли я расчитывать на скорость?
Хочешь скорости — возьми взрослую реализацию CL. :smoke:
Цитата: Алексей Гринь от мая 29, 2009, 04:01
И вот мне что интересно — он тупо интерпретирует вшитый в эксешник байткод (если не целиком s-выражения) или там действительно идёт компиляция в натив? Могу ли я расчитывать на скорость?
http://docs.plt-scheme.org/guide/performance.html