LINUX.ORG.RU

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

> Да. В переводе на руский язык это означает

Дык и лисповый прототип выборки из бд и перестановки без этого обошлись прекрасно. Хотя там тоже можно было (loop for ...) зделать.

> Лишняя одна буква .c. не катастофа.

Конешно нет. Дело то не фбукве а в том, что нужно лишние ссущности привлекать. Если погуглиш, увидиш что на достаточно больших проектах разница в обёме кода может быть вдесятеро в пользу лиспа.

> Типа customer.addr.street

непонял? адвансед питон сам узнает с какой табличкой как и по какому условию джоинить?

> очко

Очко это хорошё. Только вот факт, что и либа доступа к бд и само наречие постоянно мутирует, никак на продакшне положительно не сказывается. Прикинь, через пару лет закащик изволит юзать бд версии 10.1.1 вместо 0.1.9, на которой вы прогу делали/отлаживали. Её поддерживает вышедшая к тому времени либа алхеми 185.6.3, а 0.17 не поддерживает и не будет никогда. В версии либы 185.6.3 всё немного подругому, а в проге полтыщщи модулей по полтыщщи функций по полтыщщи строк по полтыщщи символов в каждой. Арихметика...

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

Да, с defun'ом где-то прокосячил...

Вот пример, который точно работвет (или точней не работает)

(defmacro test () `(list ,*test*)) (defvar *test* 2) (let ((*test* 3)) (test))

В cmu cl = (2), в clisp = (3)

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

>Как тут уже упоминали, и не один раз, покажите где какая-нибудь >супер-нужная и полезная программа на лиспе/хаскеле и т.д.?
axiom, mathematica

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

>> Типа customer.addr.street

> непонял? адвансед питон сам узнает с какой табличкой как и по какому условию джоинить?

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

> Очко это хорошё. Только вот факт, что и либа доступа к бд и само наречие постоянно мутирует, никак на продакшне положительно не сказывается. Прикинь, через пару лет закащик изволит юзать бд версии 10.1.1 вместо 0.1.9, на которой вы прогу делали/отлаживали. Её поддерживает вышедшая к тому времени либа алхеми 185.6.3, а 0.17 не поддерживает и не будет никогда. В версии либы 185.6.3 всё немного подругому, а в проге полтыщщи модулей по полтыщщи функций по полтыщщи строк по полтыщщи символов в каждой. Арихметика...

Это просто бред. По пунутам:

1. Если заказчик изволить юзать БД, версия которой не укзазана в ТЗ/ТУ и т.д. то это его личные сексуальные трудности.

2. sqlalchemy работает через DB-API это что-то типа ODBC для питона. Поэтому достаточно будет проапгрейдить все соостветствующие модули, "драйверы" соответствующих БД.

А что в лиспе волшебным образом есть либы для работы со всеми будущеми версиями всех БД?

3. То что питон быстро меняется это преимущество. Читал Грэма? (это риторический вопрос, ты его 100 пудов читал :-)

Good design is redesign. Рулят вещи, которые развиваются эволюционным путём, а не те что сразу сделаны совершенными (точнее их попытались сделать совершенными, но ясно дело облажались).

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

Грэм, да и ты тоже, наверное, считает что питон ассимптотически приближается к лиспу и рано или поздно все языки а процессе развития станут лиспами. Имхо, он не прав, на основании того что мейнстрим языки приближаются к лиспу нельзя сделать такой вывод.

Язык программирования это точка в многомерном пространстве и питон, например может двигаться в точку идеального языка (ИЯ), пока сближаясь с лиспом (хотя, имхо, он уже отдаляется) а потом будет отдалятся.

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

Кстати, а ты на чём на работе пишешь? На лиспе? Я лично пишу на своём любимом языке (на питоне, если кто не догадался), и очень по этому поводу рад.

Ладно, не буду больше флеймить, что-то новое про лисп я узнал, а спорить с лисперами бесполезно.

Bugmaker, ты фонате^Wbiased

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

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

> (defmacro test (b) `(list ,b))

> А функцию определять так:

> (defun test2 (a) (setq c (- a 10)) (test (* c c)))

А можно ли как-нибудь использовать в макросе глобальную переменную?

В принципе, работает (defmacro test () `(list *test*))

Но иногда хочется подставить именно значение переменной на момент вызова (dynamic scope). Например, сделать что то вроде

(defvar *op*) (defmacro do-op (a b) `(,*op* a b))

(defmacro with-op (op &body body) `(let ((*op* ,op)) ,@body))

(with-op '+ ...(do-op ...) ... (with-op '- ... (do-op ...) ...))

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

> Кстати, каким, по-твоему, должен быть идеальный ЯП?

Примерно как Lisp, только REPL будет несколько другой: read from mosk-eval-put back to mosk loop. :D

ero-sennin ★★
()
Ответ на: комментарий от redvasily

> Это просто бред.

Да-да-да, это именно то, что хочется сказать по поводу вашего письма ;)

> Рулят вещи, которые развиваются эволюционным путём, а не те что сразу сделаны совершенными (точнее их попытались сделать совершенными, но ясно дело облажались).

Сразу совершенными? Это ты о чём? Ты историю лиспа смотрел? Да пиши ты на чём хочешь, но такое твоё _невежество_ убивает всякое желание конструктивно с тобой дискутировать. (еле удержался от ругани и мата ;)

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

То, что приближаются - факт, ты сам этого не отрицаешь (это хоть что-то тебе говорит о лиспе?). Все станут лиспами - где ты такое нашёл? Между строк? url, если только это не твои полуночные фантазии.

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

Твоя "картина мира", мягко говоря, отдаёт дилетантством и плоскостью мысли. Ну да я в учителя не набивался... :(

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

"Это просто бред." - я про идеальные языки, кто куда двигается. А фанатичностью больше всего отдаёт именно твой пост.

> Я лично пишу на своём любимом языке (на питоне, если кто не догадался), и очень по этому поводу рад.

Так какого хера ты здесь делаешь? Пришёл человек, спросил что-то про лисп - какого рожна вас, "не фанатиков", сюда столько припёрло, требуя доказательств что лисп не дерьмо и зачем вам им пользоваться? Не нужен он вам - идите от сюда куда подальше и пишите на своих любимых языках! Ну ладно бы просто кинул свой пример, сказал бы "смотрите, как круто, а вам слабо?". Зыть, злюсь... :)

> Ладно, не буду больше флеймить, что-то новое про лисп я узнал, а спорить с лисперами бесполезно.

(дикий рогот в зале) Что? Что ты узнал? Что ты мог узнать из _флейма_? Блин, vsl-я на тебя нет... (не к ночи будь помянут... ;)

> Bugmaker, ты фонате^Wbiased

А ты, redvasily, "тёзка" произведения Достоевского (догадаешься какого?)

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

> Но иногда хочется подставить именно значение переменной на момент вызова (dynamic scope).

Так вот именно `(list *test*) и есть правильная форма в таком случае, ибо макры "разворачиваются" на этапе компиляции, а не исполнения (в таком виде обя языка выдают (3)).

Разница в первом варианте в том, что sbcl (не уверен) сначала компилирует все формы, а потом выполняет. defvar выполняется на этапе компиляции, "развёртка" let - тоже на этапе компиляции, а присвоение внутри let - на этапе выполнения. Вот поэтому получаются разные результаты.

yyk ★★★★★
()
Ответ на: комментарий от ero-sennin

> > Кстати, каким, по-твоему, должен быть идеальный ЯП?

> Примерно как Lisp, только REPL будет несколько другой: read from mosk-eval-put back to mosk loop. :D

скорее read from mosk-eval-put back to ass loop :-Е

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

>Вот пример, который точно работвет (или точней не работает)
>(defmacro test () `(list ,*test*)) (defvar *test* 2) (let ((*test* 3)) (test))
>В cmu cl = (2), в clisp = (3) 

Это особенность CMU/SBCL vs. CLISP:

>The problem stems from a peculiar quirk of SBCL's design: it is a 
compiler-only implementation. It has no interpreter at all. 
Expressions entered at the REPL are wrapped in a lambda which is then 
compiled before execution.

>In normal Lisp implementations, macros get expanded at compile time 
or execution time. Macros in interpreted code are (usually) 
reevaluated each time that code is run. But in SBCL, compile time is 
the same as as read time. So, effectively, macros get expanded at read
 time.

Выход -- это заставить макрос еще раз вычислиться:

REPL> (let ((*test* 3)) (eval (macroexpand `(test))))
(3)

Это весьма полезно, когда макросы тестируешь, чтобы посомтреть, во что
он превратился. Однако можно увидеть, что после вычисление
предыдущего выражения:

REPL> (macroexpand `(test))
(LIST 2)
T

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

> Ага, сплю и вижу "фонатегов" на кольях - целыми лесами :)

"Снится мировая революция, победа технофашизма, мегатонны метана от расставленных по всей стране биореакторов..." (C) Чую, близится второе пришествие Профессора! :D

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

> "Снится мировая революция, победа технофашизма, мегатонны метана от расставленных по всей стране биореакторов..." (C) Чую, близится второе пришествие Профессора! :D

LOL! :) "Улыбнуло". IMHO, его "эха" в истории отечетсвенных конференций прошла: его лично "воспитание" уже "не заводит", да и условия стали везде жёще - мат (хотя он и без мата неплохо обходился;) очень мало где "проходит", а второй кандидатуры пока не предвидется - у него было уникальное сочетание человеческих качеств в одном лице :)

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

> Так вот именно `(list *test*) и есть правильная форма в таком случае

Просто иногда хочется генерировать код на основании глобальной (или локальной) переменной.

Пример: есть некий HTML-генератор, позволяющий делать что-то вида

(html (:html (:body (:p "Text1" (mymacro) "Text2"))))

Где mymacro = макрос, возвращающий кусок дерева такой же структуры.

Функция вместо макроса не работает.

Мне надо сделать что-то вида

(defun make-html (title) (html (:html (:body (:p (mymacro title)))))

Что мне загнать в mymacro, чтобы результат был эквивалентен (html (:html (:body (:p "Значение title"))))

По сути, нужен аналог eval, но макросом.

В clisp внутрь macro можно пихнуть свободные переменные с динамической областью видимости, а в cmucl не работает (кстати, это undefined behavior по стандарту или где-то косяк реализации?).

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

> REPL> (let ((*test* 3)) (eval (macroexpand `(test))))

Спасибо за идею. Вот только (eval ...) это уже функция :-( Тогда можно сообще без макросов.

А если, например, хочу сделать что-то вроде (defmacro myloop () `(loop ... *op* ....))

то мне надо, чтобы macroexpand уже возвращал только значение, а не '(eval ....) которое при вычислении даст это самое значение.

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

> Не _на_ макросах, а с их использованием. Точно так-же макры могут использовать классы. Они там не "одно над/под другим", а "рядом, взаимодополняя друг друга".

Мне всегда казалось, что CLOS таки реализован _на_ макросах, в том смысле, что сама по себе "пустая" лисп-машина (без стандартной библиотеки) про макросы знает (ибо ей же как-то надо отличать compile-time от run-time), а про "объекты" - нет. И даже про MOP - тоже не знает.

Поэтому можно смело сказать, что ОО-система - более "высокоуровневая" вещь, чем макры, ибо она призвана оперировать абстракциями предметной области, а макры - кодом.

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

> Проблем от быстрого развития питона нет, люди которые его делают не идиоты, при изменении чего-либо ты сперва получишь deprecation warning и у тебя бужет пара лет прежде чем обратная совместимость поломается.

мне кажется очевидным, что довольно быстрые изменения свидетельствуют о касяках, которые нужно исправлять. И как следствие, что нет гарантии что после "исправления" будет существенно лучше.

> процессе развития станут лиспами. Имхо, он не прав

ИМХО тоже. Есть чёткая тенденция примитивить (именно, а не упрощать) язык, а как можно большую часть функционала переностить в библиотеки. ИМХО это достаточно порочная практика, потому что сплош и рядом встречяюцо ситуации когда приходицо делать большие объёмы кода и библиотеки нифига не помогают. В этих случяях грамотный дизайн языка намного важнее чем большое количество наворотов.

> и питон, например может двигаться в точку идеального языка

ево, как и многих других наречий, языковые конструкции слишком негибки и "в отрыве" от остальных. Т.е. как и в случае с другими наречиями, вместо языка стараются подсунуть набор готовых фраз. Конечно, это намного проще чем дизайнить хороший язык. И достаточно "крньюктурно" потому что _на_простых_ примерах разница минимальна, а если не знать куды смотреть, вообще незаметна. А потом ужо поздно.

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

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

> Кстати, а ты на чём на работе пишешь? На лиспе?

по большей чясти на сях. Давно уже, задолго жо того что бывает лисп.

> Bugmaker, ты фонате^Wbiased

нифига. Я просто пытался обяснить чё есть _принципиальная_ разницо меж языками высоково и низково уровня, и если из асма использовать многочисленные библиотеки, от этого им не проще будет выразить _свою_ мысль. Но на простых примерах очень сложно понять разницы, а количество строк одинаковое :D

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

>то мне надо, чтобы macroexpand уже возвращал только значение, а не 
'(eval ....) которое при вычислении даст это самое значение.

REPL> (defmacro test () `(list ,*test*))
TEST

REPL> (defvar *test* 4)
*TEST*

REPL> (let ((*test* 5)) (macroexpand `(test)))
(LIST 5) ;
T

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

> Пример: есть некий HTML-генератор, позволяющий делать что-то вида

> (html (:html (:body (:p "Text1" (mymacro) "Text2"))))

Я так понимаю, что html - тоже макро? Тогда "засада": без eval и/или macroexpand - никак.

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

Опять немножко не то. Предположим есть такая макра: (defmacro taketest (x) (list 'quote (macroexpand x)))

* (let ((*test* 3)) (taketest (test))) (LIST 2)

* (let ((*test* 3)) (taketest (macroexpand '(test)))) (MACROEXPAND '(TEST))

Что бы написать в defmacro test (или где-нибудь ещё), чтобы из

* (let ((*test* 3)) (taketest ...)) получить (LIST 3)

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

> Мне всегда казалось, что CLOS таки реализован _на_ макросах, в том смысле, что сама по себе "пустая" лисп-машина (без стандартной библиотеки) про макросы знает (ибо ей же как-то надо отличать compile-time от run-time), а про "объекты" - нет. И даже про MOP - тоже не знает.

Зависит от реализации. В cLisp/sbcl CLOS "вшит" намертво и является неотъемлемой частью (зависит ли от него реализация макр - не знаю).

> Поэтому можно смело сказать, что ОО-система - более "высокоуровневая" вещь, чем макры, ибо она призвана оперировать абстракциями предметной области, а макры - кодом.

Ну а макры могут оперировать кодом, оперирующим абстракциями любого уровня и любой предметной области.

Ну не сравнивайте тёплое с магким!!!

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

> Я так понимаю, что html - тоже макро? Тогда "засада": без eval и/или macroexpand - никак.

Макро. Мне с чем угодно. Я только исходник макроса html не могу править.

Упрощенный пример смотри в предыдущем сообщении (где taketest)

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

> to yyk...

> Афтар выпий иаду!!!

...и я тебя люблю ;)

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

> Макро. Мне с чем угодно. Я только исходник макроса html не могу править.

А библиотека другой интерфейс не предоставляет? Править не надо - посмотреть что делает и реализовать функциональный интерфейс. Ну или (eval (macroexpand `(html (:html (:body (:p "Text1" ,title "Text2"))))))

Что за библиотека?

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

> А ты, redvasily, "тёзка" произведения Достоевского (догадаешься какого?)

Тут один товарищ рядом почитал этот флейм и сказал: "И какой идиот сказал что язык программирования это точка в идеальном пространстве!" :-)

Так что мне помогли ;)

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

http://lml2.b9.com/

Функциональный интерфейс там очень неудобно делать...

За (eval (macroexpand (...)) большое спасибо. Что-то я не подумал ,что можно не изнутри пытаться вылезти, а снаружи обертку добавить.

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

>Что бы написать в defmacro test (или где-нибудь ещё), чтобы из
>* (let ((*test* 3)) (taketest ...)) получить (LIST 3)

Ну так у тебя макра находится вне зоны let ((*test*)). Либо передавай 
параметры в taketest, либо глобально (SBCL):

* (defmacro test () `(list ,*test*))
TEST

* (defvar *test* 2)
*TEST*

* (taketest (test))  
(LIST 2)

* (setq *test* 3)
3

* (taketest (test))
(LIST 3)

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

> http://lml2.b9.com/

> Функциональный интерфейс там очень неудобно делать...

:))

А в исходники посмотреть?

(defmacro html (&rest forms &environment env) (post-process-html-forms (process-html-forms forms env)))

И post-process-html-forms и process-html-forms - функции.

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

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

Чтобы сильно не мучиться с макрами, их можно в slime раскрывать. Там все для людей сделано. Наводишь курсорчик на первую скобочку, где макра вызывается и жмешь C-c RET. Открывается буферок, а там macroexpand-1 готовый.

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

>> Ладно, не буду больше флеймить, что-то новое про лисп я узнал, а спорить с лисперами бесполезно.

> (дикий рогот в зале) Что? Что ты узнал? Что ты мог узнать из _флейма_?

Флейм начался относитнльно недавно. До этого был довольно информативный разговор (и, по меркам LOR, вполне корректный). Я тоже узнал про Лисп кое-что новое.

>> Я лично пишу на своём любимом языке (на питоне, если кто не догадался), и очень по этому поводу рад.

>Так какого хера ты здесь делаешь? Пришёл человек, спросил что-то про лисп - какого рожна вас, "не фанатиков", сюда столько припёрло, требуя доказательств что лисп не дерьмо и зачем вам им пользоваться?

Никто не _требовал_ доказательств что Лисп - _не дерьмо_. Спрашивали (в корректной форме), чем он хорош - почуствуй разницу. Лисперы (как всегда, увы) в _основном_ выдавали эффектные, но не очень понятные фразы в духе "Лисп - это язык высокого уровня, а всё осталное - низкоуровневые язычки".

> не нужен он вам - идите от сюда куда подальше

"Не говорите нам, куда нам идти - и мы не будем говорить вам, что делать" -- (С) Почти народное.

> и пишите на своих любимых языках!

Мы пишем. Кстати, хотел спросить - кто-нибудь из участвующих в этой дискуссии лисперов использует Лисп в реальной работе (не для инструментов "только для себя"). А то у меня впечатление, что народ поставил себе Common Lisp, и роется в нем ради удовольствия и самообразования, отсюда и уровень ответов.

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

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

Говорить такое, не имея значительного опыта работы на Питон - это всего лишь глубокомысленный треп.

> Для этого нужно было изначально дизайнить.

Ох да, Лисп _изначально_ сдизайнили, аха, щасс. Сколько (несовместимых между собой!) диалектов Лиспа было за 50 лет? Десятки или сотни? Лисп (как и _любая_ программная система) развивался методм проб и ошибок. Учите историю, она рулез.

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

1. Я не тебе отвечал.

> Я тоже узнал про Лисп кое-что новое.

2. Единственное, что здесь можно было "узнать" - ссылки на ресурсы. "Читайте первоисточники". А узнавать / составлять мнение о языке по флейму - вы меня простите... Заинтересоваться из флейма - да, можно.

> Спрашивали (в корректной форме), чем он хорош - почуствуй разницу.

Вам в корректной форме давали ссылки.

> Лисперы (как всегда, увы) в _основном_ выдавали эффектные, но не очень понятные фразы в духе "Лисп - это язык высокого уровня, а всё осталное - низкоуровневые язычки".

И это всё, что ты прочитал? А что же ты тогда новое узнал? Лукавишь... :) Ладно-ладно, вижу: "в _основном_". Ну так это, как правило, были ответы на совершенный бред "с обратной стороны" :)

Ладно, ещё раз без эмоций. Спрашивали - что есть хорошего. Ответили? Ответили. Но отдельные личности начали настаивать на _доказательстве_ того, что это "хрошее" действительно хорошо, что оно лучше, чем "хорошее" в других языках, типа "покажи на пальцах". Вот с этого момента всё - туфта. Вам ссылки дали? Идите, изучайте, сравнивайте, делайте выводы. Если что непонятно - спрашивайте. А учить вас здесь, "разжёвывать материал" никто не обязан.

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

> Ну не лиспе, но говорят в потрохах там что-то подобное.

В общем, да, Математика - почти Лисп, только она основана на M-выражениях. Но при этом для многих вещей есть удобный синтаксис, в том числе и для инфиксных операторов. То есть, например, выражение a + b * c + d имеет внутреннее представление Plus[a, Times[b, c], d]. По-моему, очень удачно всё сделано: с одной стороны, это ближе к стандартной математической записи, чем S-выражения, а с другой стороны, возможности метапрограммирования такие же, как в Лиспе. Разве что всякие извраты с переопределением read там не предусмотрены. :)

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

> Надеюсь не закомплексовался от этого и дальше флеймить будеш? ато до верху ещё 66 постов осталось.

Да нет. Я не обижаюсь если меня обзывают идиотом. Что такого, ну назвали и назвали. Дело житейское.

Ты прав флеймить надо.

А сколько потов было в РФВС? А то я это время не зацепил... :-( И Луговского не застал, жаль...

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

> Надеюсь не закомплексовался от этого и дальше флеймить будеш? ато до верху ещё 66 постов осталось.

Да нет. Я не обижаюсь если меня обзывают идиотом. Что такого, ну назвали и назвали. Дело житейское.

Ты прав флеймить надо.

А сколько постов было в РФВС? А то я это время не зацепил... :-( И Луговского не застал, жаль...

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

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

> Говорить такое, не имея значительного опыта работы на Питон - это всего лишь глубокомысленный треп.

Значительного нет. Кое-какой - есть. Речь о том, что в питоне нет (и не предвидется) _встроенных_ полноценных макр и средств изменения синтаксиса. Не обсуждая - надо это или нет и на сколько это хорошо/плохо - это ограничение. Т.е. только по этим параметрам питону не догнать лисп _никогда_.

> Ох да, Лисп _изначально_ сдизайнили, аха, щасс. Сколько (несовместимых между собой!) диалектов Лиспа было за 50 лет? Десятки или сотни? Лисп (как и _любая_ программная система) развивался методм проб и ошибок. Учите историю, она рулез.

Смотря какой "лисп" вы имеете в виду. Если CL - это одно. А если набор (T NIL CONS CAR CDR QUOTE), благодяря которому за прошедшие десятилетия в лисп добавили почти всё, что придумали (в том числе и макры, и CLOS) - это совсем другое. И CL - это стандарт. А конкретные реализации продолжают развиваться.

Да, многообразие приводит к распылению сил. В результате на сегодняшний день питон очень трудно догнать "по батарейкам в одном флаконе".

yyk ★★★★★
()
Ответ на: комментарий от ero-sennin

> То есть, например, выражение a + b * c + d имеет внутреннее представление Plus[a, Times[b, c], d]. По-моему, очень удачно всё сделано: с одной стороны, это ближе к стандартной математической записи, чем S-выражения, а с другой стороны, возможности метапрограммирования такие же, как в Лиспе.

Честно признаюсь - лень прямо сейчас смотреть. Если "не в лом" - пример (не для критики - для ознакомления) метапрограммирования в таком синтаксисе (не просто подстановка, а консруирование кода).

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

> И Луговского не застал, жаль...

:) А как мне жаль, что ты его не застал... ;)))

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

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

> Говорить такое, не имея значительного опыта работы на Питон - это всего лишь глубокомысленный треп.

бугога. а учебникоф значит не читаем, и написатому там неверим? Всё только на своём опыте. Нуну...

>> Для этого нужно было изначально дизайнить.

> Ох да, Лисп _изначально_ сдизайнили, аха, щасс. Сколько (несовместимых между собой!) диалектов Лиспа было за 50 лет? Десятки или сотни? Лисп (как и _любая_ программная система) развивался методм проб и ошибок. Учите историю, она рулез.

ну и чем они в сущности различяются? Да только между уайтспейсом и его родственником питоном меньше различий чем между всеми когда-либо существовавшими диалектами лиспа, потому что у тех принцип один

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

> Спрашивали (в корректной форме), чем он хорош - почуствуй разницу. Лисперы (как всегда, увы) в _основном_ выдавали эффектные, но не очень понятные фразы в духе "Лисп - это язык высокого уровня, а всё осталное - низкоуровневые язычки".

ну да, непонятные. Как объяснить слепому от рождения, чем отличяецо свет от тьмы?

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

> идиотом

почему идиётом? Я думал там "преступление и наказание" было. Потому что за двацатькопеекпитон старушку-лисп топором по йайтсам :E

> А сколько потов было в РФВС? А то я это время не зацепил... :-(

А фих ево знаит. Много. Поищи пойском. Только там модераторы порезвились изрядно :(

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

> мне кажется очевидным, что довольно быстрые изменения свидетельствуют о касяках, которые нужно исправлять. И как следствие, что нет гарантии что после "исправления" будет существенно лучше.

Т.е. быстрые изменения свидетельствуют о том что проект плохой. Медленные свидетельствуют о том что проект загнулся.

Что же свидетельствует о том что проект успешно развивается?

> питон уже упустил свой шанс. Возможно, он станет неплохим средством разработки для шаблонных случяев, как жаба сейчас, но как именно язык а не набор готовых фраз и предложений, небудет. Для этого нужно было изначально дизайнить.

Питон дизайнился. Большое отличие Питона от других языков, то что это уже второй язык у папы Питона и помимо дизайна он эволюционирует. Но очень аккуратно, что попало в Питон не тащат, в отличие от многих других распространённых языков :-)

А что ты думаешь по поводу такой цитаты из Грэма? (LISP-FAQ)

Q: I like Lisp but my company won't let me use it. What should I do?

A: Try to get them to let you use Python. Often when your employer won't let you use Lisp it's because (whatever the official reason) the guy in charge of your department is afraid of the way Lisp source code looks. Python looks like an ordinary dumb language, but semantically it has a lot in common with Lisp, and has been getting closer to Lisp over time.

They might even let you use Ruby, which is even more Lisp-like.

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