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 (не говоря уже о куче батареек, причем рабочих). Функционален. Макры прекрасны. Стандарт - компактен и причесан.

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

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

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

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

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

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

Популярные, грамотно спроектированные языки и без моего скромного мнения останутся

Если Java хотя бы проектировали специально для надрессированных обезьянок, то C++ и PHP сляпали из спичек и желудей, вообще не включая мозг.

anonymous
()
Ответ на: комментарий от 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

юзание жабовских библиотек на кложуре

Если у либы есть обертка - прекрасно, если самому писать без обертки - все уродливее и уродливее (разные прослойки, фу, мерзость).

rikardoac
()

из этого ничего не перспективно, не мейнстрим же

для себя что угодно, но я бы рекомендовал из этого плотнее с CL и TCL 8.6 познакомиться

Deleted
()

Посмотрел на ребол - какой-то изувеченный лисп. Зачем он может быть нужен-то вообще?

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

Он очень маленький. Исторически его хотели впихать мобилки.

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

Зачем плодить прослойки, если можно ипользовать классы ява напрямую? Так и в Programming Clojure написано: лучше использовать напрямую.

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

Однако, C++ и PHP будут жить и процветать еще много десятилетий после того, как твою никому не нужную дохлую тушку зароют на помойке.

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

Пусть процветают, кто-то же должен всю эту срань поддерживать. Обезьянки-то никуда не денутся.

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

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

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

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

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

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

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

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

И тащить за собой убогую JVM? А зачем?

За тем, что она уже готова. Это и вся причина. Например, библиотеки из жабьего мира (если это не узкозаточенные научные либо) не представляют вообще никакого интереса.

alienclaster ★★★
()

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

Для себя - CL и racket, мейнстримом становится clojure.

alienclaster ★★★
()
Последнее исправление: alienclaster (всего исправлений: 1)
Ответ на: комментарий от silver-bullet-bfg

При поддержке Google - не удивительно

Google не развил ни одного проекта, кроме изначально убогого поиска. Остальное купил и изуродовал, в основном. Язык ему не пропихнуть. Корпорации не умеют делать ничего душевного :)

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

а что интересного обещают в Tcl 9.0 ?

Ну я думаю главную линию - замедление выполнения, развивать будут. Это однозначно. А что еще - тоже интересно.

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

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

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

alienclaster ★★★
()

По сабжу - я выбрал Tcl. Очень приятный и легкий синтаксис. Только не забывай комментировать что набыдлокдил - через неделю не разберешься уже что к чему.

Suntechnic ★★★★★
()

Не дай бог, если Common Lisp (CL) когда-нибудь станет мейнстримом. Нафиг такое счастье. Мейнстрим не значит «хорошо». Сложные и функционально богатые языки, вообще, никогда не станут мейнстримом на мой взгляд. Это и к Haskell относится. И я поэтому рад за оба языка.

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

ЯП пишут, а не читают. ;)

;) А как же принцип code reuse?

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

Не дай бог, если Common Lisp (CL) когда-нибудь станет мейнстримом.

(incf *)

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

Не дай бог, если Common Lisp (CL) когда-нибудь станет мейнстримом.

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

anonymous
()
Ответ на: комментарий от 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
()

для использования - Tcl/Tk
остальное - just for fun

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 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.