LINUX.ORG.RU
ФорумTalks

LISP RIP?


0

0

Сбж. Постепенно уйдет, или все-же станет более распространенным? Пугает http://www.tiobe.com/tpci.htm (выберите LISP и увидете спад). Хотя почему? Язык функциональный, динамически типизованный, сейчас такие вещи в моде...

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

> это не отмазка

бу. го. га.

"он большой" - это отмазка, причем очень тупая

>показать простенький dsl и его лисп реализацию не осиливаем?

тебе уже 3 раза показали: финны, 2том.

ниасилишь - покажу апстенку.

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

>Что значит "красивый с математической точки зрения"?

Может, не совсем корректный термин, но смысл такой: Scheme придумана не левой пяткой; за ней стоит достаточно изящная модель вычислений. В итоге получился мощный мультипарадигменный язык, построенный на минимальном наборе базовых понятий. Чем и красив.

Для примера, чтобы было ясней: элементарная структура данных (пара) может быть введена в язык как производное (через замыкания), а не базовое понятие. На базе пары оказывается возможным построить сколь угодно сложные структуры данных (списки, ассоциативные списки, деревья, графы...)

Пытаемся проделать что-то похожее в С и осознаем всю его убогость :)

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

> "он большой" - это отмазка, причем очень тупая

ты довольно глупое существо, как видно. я прошу ПРОСТЕНЬКИЙ dls -- маленький, влезающий на максимум 2-3 страницы. неужели так сложно? или это не сложно, а невозможно? :)

m57
()

Программирую на Fortran сейчас я. Самый лучше это язык считаю я, а Lisp не самый лучший потому, что он не такой.

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

>На базе пары оказывается возможным построить сколь угодно сложные структуры данных (списки, ассоциативные списки, деревья, графы...)

В с++ есть классы, которые могут вводить любое понятие, а не только списки и деревья.

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

>то Гномеры его бы использовали вместо GObject

Гномики под предводительством мигелюшки-проститутки перепишут скоро всё на моно. Они идиоты.

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

>В с++ есть классы, которые могут вводить А в Scheme можно ввести сами классы. Легко. Без всяких лишних сущностей в "ядре" языка. Иди читай SICP.

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

http://www.gigamonkeys.com/book/practical-parsing-binary-files.html

http://www.bookshelf.jp/texi/onlisp/onlisp_25.html


А вот например я в универе на 3 курсе слабал за несколько часов,
DSL для лексического анализатора:


(def-matchers 
  (regex    (nil "\\s+" :ending ""))
  (simple   (:comparation ("==" "!="  ">=" "<=" "<" ">"))
            (:minus "-")
	    (:plus "+")
	    (:binary-operation-p-1 ("*" "/"))
	    (:right-bracket ")")
	    (:left-bracket "(")
	    (:set "=")
	    (:comma ",")
	    (:dot ".")
	    (:semicolon ";")
	    (:end-block "}")
	    (:begin-block "{"))
  (keyword  (:define "define")
	    (:to "to")
	    (:funcall "funcall")
	    (:for "for")
	    (:while "while")
	    (:else "else")
	    (:if "if")
	    (:return "return")
	    (:default "default")
	    (:case "case")
	    (:print "print")
	    (:switch "switch"))
  (regex    (:integer-const "\\d+" :ending "\\b")
	    (:identifier "[a-zA-Z]\\w*")))

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

>>В с++ есть классы, которые могут вводить

>А в Scheme можно ввести сами классы. Легко. Без всяких лишних сущностей в "ядре" языка. Иди читай SICP.

Правильно! Дадим каждому прогеру возможность создать собственный ООП-язык на базе схемы! Свободу попугаям!

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

> Вот все вопят про эти DSL-и и про то, что на лиспе их как два пальца об асфальт реализовать. И никто никогда не приводил ни одного примера. Покажите, короче, пример :)

Ты маленькое грязное лживое верещливое чудовище. Выдави себе все твои оставшиеся глаза, ты ими всё равно не пользуешся. Только глазницы глубоко не ковыряй, дабы бескрайние просторы бесконечной пустоты, которые откроются там, могут с лёгкостью поглотить всё сущее.

> Using Lisp to Generate .NET Business Applications

> Building the Booklet Manager

> 400 lines of DSL -> 25,000 lines of C#

> It runs, so ready for user feedback

http://www.international-lisp-conference.org/2005/media/peake-slides.pdf

> There has been a lot of buzz generated from Martin Fowler's recent DSL article, "Language Workbenches: The Killer-App for Domain Specific Languages?". Actually, in contrast with his other articles, this one is actually interesting.

> The lisp advocates were quick to respond, including creating this video blog(from Rainer Joswig) that provides a lisp specific approach to Martin Fowler's example DSL.

http://www.newspiritcompany.com/lisp_dsls.html

А когда выучишь алфавит, приходи снова и мы пошлём тебя фгугль!

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

> Вот, человек умеет читать :) Спасибо :)

не надо завидовать.

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

> Все адепты лиспа такие неадекватные клоуны? :)

Да ты чо, бугмакер уникален! Особенно когда пьян и свиреп :)

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

>Дадим каждому прогеру возможность создать собственный ООП-язык на базе схемы!

Реализаций объектных систем на Схеме и так навалом :)

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

>А в Scheme можно ввести сами классы

>Без всяких лишних сущностей в "ядре" языка

Т.е. там нету ни втроенных шаблонов, ни перегрузки, ни даже классов. Соответственно нету и встроенной проверки компилятора пригодности нововведений, код становится запутанным, с разным синтаксисом у каждого "автора", не понятным окружающим и т.д.. Я правильно понял перл про классы без лишних сущностей в ядре языка? На любом языке можно легко написать непонятно, но на этом поделии сделать обратное оказывается на порядок сложнее, это и есть повод для гордости?

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

>И это является достоинством Схемы?

Смотря с какой позиции оценивать. С точки зрения практического применения -- вряд ли.

tche
()

> Хотя почему?

Просто у меня руки до него никак не дойдут. Вот выйду на пенсию...

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

> С++ - самый лучший и универсальный язык, он лучше быстрее и надёжнее жавы, выразительнее обычного с, безопаснее и удобнее пыха, руби и питона, а lisp - rip. Разве что с++ для скриптов не подойдет.

Дадад! С++ -- это прогрессивно, надежно и глобально!

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

> Вот все вопят про эти DSL-и и про то, что на лиспе их как два пальца об асфальт реализовать. И никто никогда не приводил ни одного примера. Покажите, короче, пример :)

http://www.linux.org.ru/view-message.jsp?msgid=1587106

Как говорится, хоть попой кушай...

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

> А, скажем, BASIC и Си на Форте есть вообще полноценные.

У мну есть книжка, как на Форте сделать полноценные Форт и Пролог.

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

> 42 страницы флуда? :D Не, мне OnLisp-а хватит..

Звыняйте, повторяться нет ни времени ни желания.

Если вкратце, то на тех 42 страницах примеры реализации cl-sql (встраивание SQL прямо в код Лиспа), простой язык управляющего протокола, язык построения узкоспециализированных парсеров (нечто вроде мета-lex/yacc). Ну и еще дофига всего.

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

> Максима? да? угадал?

Ну тогда уж и Редьюс в эту же кошелку :-)

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

>Если вкратце, то на тех 42 страницах

а вот интересно узнать "продолжение". удалось ли внедрить лисп? или он не подошел? Вобщем, как дальнейшие отношения с лиспом сложились?

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

> Читаю.. Пока стандартное лисперское писькомерство :o)

Там да, первый десяток страниц и в самом деле общие разговоры. А писькомерство вообще до конца темы будет :-).

В принципе, можно начинать где-то в районе этого:

http://www.linux.org.ru/jump-message.jsp?msgid=1587106&cid=1623715

http://www.linux.org.ru/jump-message.jsp?msgid=1587106&cid=1618155

и потом вот тут:

http://www.linux.org.ru/jump-message.jsp?msgid=1587106&cid=1630186

По ходу, там была еще задача на использование ORM, я, похоже, не отметился, но в clsql используется именно подход интеграции SQL в Lisp, rак DSL.

Блин, все никак не соберусь вынести это в одно место...

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

> а вот интересно узнать "продолжение". удалось ли внедрить лисп? или он не подошел? Вобщем, как дальнейшие отношения с лиспом сложились?

А вот дальше в самом деле получилась небольшая фигня. А именно, в clex оказалось, что отсутствуют состояния. Сходу я их добавить не смог, связался с автором. Он сказал, что доделать несложно, но ему некогда.

А потом тема вообще слегка замерзла. Тем более, что у меня уже был большой объем кода на Эйфеле, и просто жаба задушила его выбрасывать. Хотя на самом деле на Лиспе бы получилось намного лучше -- в нем можно было бы описывать конфигурации форматтера в лоб (до этого предполагалось использовать некий вариант XML), прямо кодом.

В общем, я уже сказал -- вот выйду на пенсию... :-)

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

> В с++ есть классы, которые могут вводить любое понятие, а не только списки и деревья.

В CL классы реализованы, как частный случай списков и деревьев, что тоже позволяет выводить любое понятие, но в реальной жизни CLOS практически не нужно использовать. Достаточно списков и деревьев.

Кстати, в C++ есть мультиметоды?

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

ага, спасибо. что причины указал - отдельное спасибо. :)

grinn ★★
()

Кстати, вопрос лисповодам.

Как сделать, чтобы в лиспе (Common Lisp и/или Scheme) интерпретатор не ругался на неизвестные (необъявленные функции), а молча их игнорировал или вызывал какую-нибудь дефолтную функцию, не прекращая работы программы?

Зачем нужно. Просто пришла в голову идея приспособить лисп для прямой работы с rtf.

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

> Т.е. там нету ни втроенных шаблонов, ни перегрузки, ни даже классов.

Да там ничего нет :) Но это ничего нечто, а не ничто. По сути лисп - это чистое абстрактное синтаксическое дерево с минимумом особых форм, вроде cond. Чем и силён, потому что позволяет реализовать, как я понял, ВСЁ.

Если честно, я жалею что раньше в институте и школе не изучал лисп. Сейчас мне это сделать сложнее и основная проблема - это не знание языка, а умение пользоваться сложными математическими абстракциями.

Почитай sicp, там с первых же страниц идут примеры, заставляющие восхититься изящностью языка, вроде:

Упражнение 1.4

a + abs(b)

(define (a-plus-abs-b a b)

((if (> b 0) + -) a b)

- всего-лишь маленький пример приема, который на C++ нельзя применить или надо очень много накрутить.

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

b > 0 ? a + b : a - b

действительно много..

Ещё как вариант, считая, что функции plus и minus описаны

(b > 0 ? plus : minus)(a, b)

практически один в один.

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

> b > 0 ? a + b : a - b

> действительно много..

Смысл же не в вычислении a + abs(b), а в способе. Здесь сишный пример не катит.

> (b > 0 ? plus : minus)(a, b)

Это уже более похоже на лисповский пример, но чувствуешь в чём отличие?

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

> Смысл же не в вычислении a + abs(b), а в способе. Здесь сишный пример не катит.

Не буду спорить, я SICP всё никак не прочитаю, но в реальной жизни я подобные примеры нахожу редко. Вот чего мне не хватает - МУЛЬТИМЕТОДЫ. Я лисп бы использовал только за это :) На каждом шагу двойная диспетчеризация нужна, и приходится либо архитектуру переделывать, либо городить визитор. Почему её никто не чешется реализовать, это же киллер-фича.

> Это уже более похоже на лисповский пример, но чувствуешь в чём отличие?

В том, что этот код неестественен для C? Возможно.

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

> интерпретатор не ругался на неизвестные (необъявленные функции), а молча их игнорировал или вызывал какую-нибудь дефолтную функцию, не прекращая работы программы?

перед вызовом таковых поюзать boundp и functionp?

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

> В том, что этот код неестественен для C? Возможно.

Не только. Во первых, повезло что в Си есть тернарный оператор :), во вторых синтаксис всё-равно получился неестественный, а главное смысл: в лиспе (схеме) оператор + или - вычисляется как результат функции, а в Си в обоих случаях, в сущности, просто ветвление.

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

> перед вызовом таковых поюзать boundp и functionp?

Так я же зараннее не знаю известна функция или нет? Честно говоря, я еще не очень освоил подобные манипуляции, но смысл у меня был в том, чтобы после минимальной синтаксической переделки сделать из RTF файла программу на лиспе, каковую и исполнить.

По стандарту RTF неизвестные RTF-операторы должны игнорироваться.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от Sun-ch

> Даже сейчас существуют реализации, оптимизированные для параллельных расчетов на мультипроцессорных архитектурах.

А можно поподробнее? Ссылок хотя бы. =)

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