LINUX.ORG.RU

Tcl 8.6 VS Tcl 9.0 VS Rebol3 VS Lisp

 , , , rebol3,


1

5

Пятничный тред, давайте поговорим о трех упоротых по синтаксису, но очень мощных языках - Tcl (версии 8.6, и разрабатываемая сейчас 9.0), Rebol3 (Saphirion) и Lisp (Common Lisp, Racket). Собственно вопрос - что более жизнеспособно и перспективно сегодня?

Tcl - мощный язык с кучей библиотек, который развивается уже долгое время, имеет прекрасные возможности взаимодействия с Си, мощные системы ООП и меттапрограммирования, постепенно обрастает функциональщиной. Версия 8.6 внесла очень много хорошего в язык. Версия 9.0 обещает сделать из него чуть ли не «серебрянную пулю». Синтаксис - чем больше вбирает сахара и возможностей, тем более упоротым становится. Но вот в чем цимес - чем больше пишешь на Tcl, тем более убогим кажутся другие языки с их жестким синтаксисом. А синтаксис тикля - понимается с первого взгляда.

Rebol3 - полумертвый проект, но по перспективности...это просто нечто. Язык - прямое развитие идей Lisp и Tcl. Все есть данные. Даже переменные носят абсолютно уникальные типа. На Rebol3 можно писать максимально портабельные приложения, скорость приемлема. Очень мощное метапрограммирование. DSL пишутся с пол пинка...По сути весь Rebol3 Core - это язык для написания DSL для всего остального. Разработчик языка от него отказался...и сделал проект открытым (сейчас Карл изредка делает маленькие патчи, очень редко). Зато появились два мощнейших проекта - Bazaar Rebol3 (открытое сообщество) и Saphirion Rebol3 (вместе с GUI, коммерческая реализация). Последний - инструмент разработки компании Saphirion. Мейнтейнят под себя. Скоро будет версия для Android.

Common Lisp - промышленный стандарт лиспа. Куча скобок, куча полурабочих батареек. И сложность over9000, если писать с использованием всех возможностей языка и правильно. Не гигиенические макры, ФП почти никакое. ООП - спорное, CLOS своеобразен. Очень. Коммерческие реализации работают прекрасно, а свободные - АдЪ с библиотеками.

Racket - Scheme на стероидах. Прекрасная замена всему, что можно придумать. Мощный язык, даже со своей подсистемой GUI (не говоря уже о куче батареек, причем рабочих). Функционален. Макры прекрасны. Стандарт - компактен и причесан.

Встает вопрос - что перспективнее из представленного? Что стоит учить «для себя» и для использования в домашних проектах? Что может стать мейнстримом индустрии и может ли вообще?

Ответ на: комментарий от antares0

Так а зачем ходить далеко? Ну ладно - не все есть объект в CL. Опять же - полная реализация ООП возможна только когда все есть объект

silver-bullet-bfg ★★
() автор топика
Ответ на: комментарий от silver-bullet-bfg

Это все макросы. Все макросы

> (class-of #'loop)
#<BUILT-IN-CLASS FUNCTION>

Вобще в стандарте CL так и написано, что все есть объект. Как это не удивительно.

antares0 ★★★★
()
Ответ на: комментарий от silver-bullet-bfg

defmacro?

> (class-of #'defvar)
#<BUILT-IN-CLASS FUNCTION>
WEB-P> (class-of #'defmacro)
#<BUILT-IN-CLASS FUNCTION>

Вобще любой макрос/функция экземпляр класса function т.е функция

antares0 ★★★★
()
Ответ на: комментарий от silver-bullet-bfg

Так а зачем ходить далеко? Ну ладно - не все есть объект в CL. Опять же - полная реализация ООП возможна только когда все есть объект

В CLOS всё - объект. Базовые общелисповские типы, определённые вне CLOS, были в CLOS доопределены.

НедоООП - это как в C++.

mv ★★★★★
()
Ответ на: комментарий от basp

а в от Fixnum, например, в common lisp можно определить класс-потомок?

Нет, в плане базовых типов CLOS плохо в систему интегрирована. Фактически, CLOS - это библиотека. Почему сделали так? Потому что CL - хороший инженерный язык, коммити не стало жертвовать эффективностью базового языка в угоду ООП.

mv ★★★★★
()
Ответ на: комментарий от antares0

Вобще любой макрос/функция экземпляр класса function т.е функция

Ну, это же неправда - макрос нельзя использовать везде, где применима функция.

alienclaster ★★★
()
Ответ на: комментарий от anonymous

Макрос это макрос. С ним *связана* lisp ф-ция, которая вызывается когда надо его раскрыть.

? (macro-function 'defvar) #<Compiled-function DEFVAR Macroexpander #x1008B167F>

Clozure CL: ? (class-of #'defvar)

Error: Undefined function: DEFVAR

? (class-of #'defmacro)

Error: Undefined function: DEFMACRO

Lispworks:

(class-of #'defvar)

Error: DEFVAR names a macro — bad arg for FUNCTION.

seg-fault
()
Ответ на: комментарий от seg-fault

Вообще замечаю, что ребятишки из sbcl лабают некий свой lisp ;)

seg-fault
()
Ответ на: комментарий от seg-fault

Макрос это макрос.

Х - это Х, очевидно.

С ним *связана* lisp ф-ция

Ты путаешь макрос (обычную функцию) и символ, в макрослоте которого лежит макрос (обычная функция).

anonymous
()
Ответ на: комментарий от alienclaster

Ну, это же неправда - макрос нельзя использовать везде, где применима функция.

Я говоили поро объекты и классы, а не про их исползование. Увидь разницу.

antares0 ★★★★
()
Ответ на: комментарий от seg-fault

Да все так делают, и никаких проблем не возникает.

anonymous
()
Ответ на: комментарий от seg-fault

(class-of #'defmacro)

Портабельно будет (class-of (macro-function 'defmacro)). #' это сахар для специальной операции function:

It is an error to use function on a function name that does not denote a function in the lexical environment in which the function form appears. Specifically, it is an error to use function on a symbol that denotes a macro or special form. An implementation may choose not to signal this error for performance reasons, but implementations are forbidden from defining the failure to signal an error as a useful behavior.

Так что тут нужна функция (и аксессор) macro-function.

А всего там только три смысла — http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/glo_m.html#..., то есть форма, имя или функция (от двух аргументов) выполняющая раскрытие.

quasimoto ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.