Здравствуйте, Дарней, Вы писали:
ГВ>>Поверь на слово: макросы Lisp не менее опасная вещь, чем шаблоны C++. Если не более.
Д>Опасности тоже разные бывают. Ассемблер очень опасен, и Лисп тоже опасен. Но опасны по разному Д>У одного опасность происходит от слишком близкого приближения к "железу", у другого — от слишком большого удаления.
Не, не в этом дело. Вопрос в понятности кода. А завернуть непонятную программу можно на чём угодно — хоть на макросах, хоть на бейсике. А что такое "понятность"... э... это уже индивидуально.
Д>Истина должна быть где-то между ними
Я думаю, что истина где-то вне этих определений.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Не, не в этом дело. Вопрос в понятности кода. А завернуть непонятную программу можно на чём угодно — хоть на макросах, хоть на бейсике. А что такое "понятность"... э... это уже индивидуально.
Макросы — это конечно очень мощный инструмент. Для обфускации исходников
Но некоторые и без них прекрасно справляются...
В любом случае — по сравнению с С-макросами, метапрограммирование ничего не сможет добавить в этом отношении
Здравствуйте, Дарней, Вы писали:
Д>В любом случае — по сравнению с С-макросами, метапрограммирование ничего не сможет добавить в этом отношении
Вы думаете?
Когда наш гипотетический Блаб-программист смотрит вниз на континуум мощности языков, он знает, что смотрит вниз. Менее мощные, чем Блаб, языки явно менее мощны, так как в них нет некой особенности, к которой привык программист. Но когда он смотрит в другом направлении, вверх, он не осознает, что смотрит вверх. То, что он видит, — это просто "странные" языки. Возможно, он считает их одинаковыми с Блабом по мощности, но со всяческими сложными штучками. Блаба для нашего программиста вполне достаточно, так как он думает на Блабе.
Где-то не так чтобы очень давно, но и не совсем уж вчера, я уже нечто подобное слышал (см. выделенные фрагменты)...
Что-то подобное: VD>1. Необходимость многопроходного метапрограммирования. Оно не так и нужно, так как основная его задача преобразование простой модели в сложную.
И вот такое: VD>2. Если надо, оно достаточно элементарно реализуется.
Нечто похожее: VD>В любом случае, адептом Лиспа я точно не стану, так как меня блевать тянет от программирования в АСТ напичканом скобками. Так что прийдется развивать идею на базе наиболее близкого и пригодного, по моему мнению, продукта из досупных на сегодня.
Очень похожее: VD>В любом случае на сегодня народ Лисп не очень то принял.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Дарней, Вы писали:
Д>Макросы — это конечно очень мощный инструмент. Для обфускации исходников Д>Но некоторые и без них прекрасно справляются... Д>В любом случае — по сравнению с С-макросами, метапрограммирование ничего не сможет добавить в этом отношении
Это не касается макросов, синтаксис которых идентичен/близок синтаксису обычных конструкций в языке. Вы можете усложнять макросы в Си++ и даже довести до каких-то абсурдных высот вроде OpenC++, но все это будет походить на огромный древесный гриб, т.е. на чужеродный нарост. Именно такие макросы и наводят тумана в исходниках.
В идеале мета-язык должен быть очень близок или даже идентичен основному языку. Есть ли такие языки?
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Он говорит о нововведении, появляющемся по отношению привычному Блаб-континууму конкретного Блаб-программиста. C#, а равно и Java, никаких серьёзных нововведений по отношению к C++ не предлагают
Ага для Блаб-программиста, так тот думает на Блабе.
ГВ>Если на С++ можно программировать "как на C", то на Lisp этого не получится по определению.
Ну, это мягко гворя преувеличение. Лисп довольно разнообразен. На нем мнжно и импиритившинку забацать. Хот к делу это не относится.
ГВ>
ГВ>Также мы были спокойны, если требовались разработчики на C++ или Java.
ГВ>Напомню, что в 95 шаблоны только-только появлялись и представляли собой не меньшую, если не большую terra incognita, чем макросы Lisp.
Вот только и сегодня шаблоном плюсов до макросов Лиспа как до Пекина раком.
ГВ> Они и сейчас не слишком-то э... популярны.
Гы-гы.
ГВ> Достаточно вспомнить, как упорно ты и другие (не будем показывать пальцем) пару лет назад уверяли, что шаблоны — это suxx и нагромождение треугольных скобок.
Я никогда никого не уверял что шаблоны это что-там ницензурное. Не ври уж так открыто. Я говорил, что у них есть проблемы, и что их используют мягко говоря не всегда по назначению. А отсюда появляется излишняя сложность.
VD>>Он говорит, о том, что считает Лисп более мощьным (или высокоуровневым языком). Причем делает он это на основании того, что в лиспе имеется мощьнейшая система метапрограммирования. Тут с ним тяжело не согласиться. Метапрограммирование действительно мощьнейший механизм. Вот только он есть не только в Лиспе. На сегодня есть так же OpenC++ и R#
.
ГВ>Влад, ты действительно сравнивал макросы Lisp и шаблоны С++? Напоминаю на всякий случай — с точки зрения Lisp-машины программа является и программой и данными одновременно. Поверь на слово: макросы Lisp не менее опасная вещь, чем шаблоны C++. Если не более.
Опасность тут не причем. Я вообще не считаю Лисп идеалом. Но отрицать очевидное не стоит. С точки зрения метапрограммирования Лисп очень интересен. Ты просто как всегда прочел мои слова и выделил в них свой потоенный смысл, который я в них не вкладывал.
VD>>Однако он совершенно прав, в том, что костность мышления очень сильна. И большинство людей не в силах разглядеть действительно мощьное решение потому как мыслить понятиями "Блабла". ГВ>В точку.
Но это конечно не про тебя.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>Не, не в этом дело. Вопрос в понятности кода. А завернуть непонятную программу можно на чём угодно — хоть на макросах, хоть на бейсике. А что такое "понятность"... э... это уже индивидуально.
Д>Макросы — это конечно очень мощный инструмент.
Макросы Лиспа названы макросами по недоразумению. На самом деле это метапрограммы, т.е. код который модифицирует другой код или сам себя.
Д> Для обфускации исходников
Будешь смеяться, но в Лиспе "макросы" используются для компиляции лисп-кода в машинный.
Д>В любом случае — по сравнению с С-макросами, метапрограммирование ничего не сможет добавить в этом отношении
Чушь. С-макросы — это просто одна большая задница. Они очень не многое могут и при этом приносят очень много вреда.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Cron Tab, Вы писали:
CT>Это не касается макросов, синтаксис которых идентичен/близок синтаксису обычных конструкций в языке. Вы можете усложнять макросы в Си++ и даже довести до каких-то абсурдных высот вроде OpenC++, но все это будет походить на огромный древесный гриб, т.е. на чужеродный нарост. Именно такие макросы и наводят тумана в исходниках.
Ты бы разобрался сначала что такое ОпенС++, а потом про грибы рассуждал бы.
CT>В идеале мета-язык должен быть очень близок или даже идентичен основному языку. Есть ли такие языки?
Никому он ничего не должен. Решения могут быть самыми разными. И лучшее будет то кторое окажется удобнее и безопаснее других.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Чушь. С-макросы — это просто одна большая задница. Они очень не многое могут и при этом приносят очень много вреда.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Кажись, это мы еще не обсуждали: Пол Грэм. Краткость — сила.
Все-таки ключевое слово для Лиспа не "краткость", а "расширяемость".
А вот K — язык, где краткость положена в основу всего.
Здравствуйте, Трурль, Вы писали:
Т>А вот K — язык, где краткость положена в основу всего.
Попробую развить эту мысль. Философия K проста: поскольку большие программы очень сложно писать и отлаживать, не надо их писать вообще. Программы должны быть маленькими. Как говорит Артур Уитни, "если это нельзя сделать на одном экране, то это нельзя сделать вообще".
В жертву принесено буквально все (удобочитаемость, инкапсуляция,...). Зато достигается поразительная краткость. Например, СУБД kdb — 50k "байт-кода" и по слухам 20-30 экранов кода на K. А может она немало, например восьмерки вокруг Oracle и MSSQL описывать, пока они соревнуются по скорости.
I think there are five reasons people like object-oriented programming, and three and a half of them are bad:
...
3. Object-oriented programming generates a lot of what looks like work. Back in the days of fanfold, there was a type of programmer who would only put five or ten lines of code on a page, preceded by twenty lines of elaborately formatted comments. Object-oriented programming is like crack for these people: it lets you incorporate all this scaffolding right into your source code. Something that a Lisp hacker might handle by pushing a symbol onto a list becomes a whole file of classes and methods. So it is a good tool if you want to convince yourself, or someone else, that you are doing a lot of work.
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, Зверёк Харьковский, Вы писали:
Т>Еще один сабж.
Т>
I think there are five reasons people like object-oriented programming, and three and a half of them are bad:
Т>...
Т>3. Object-oriented programming generates a lot of what looks like work. Back in the days of fanfold, there was a type of programmer who would only put five or ten lines of code on a page, preceded by twenty lines of elaborately formatted comments. Object-oriented programming is like crack for these people: it lets you incorporate all this scaffolding right into your source code. Something that a Lisp hacker might handle by pushing a symbol onto a list becomes a whole file of classes and methods. So it is a good tool if you want to convince yourself, or someone else, that you are doing a lot of work.
Совершенно верно. Действительно, ООП позволяет в некотором смысле вносить комментарии в исходники. Но то же самое можно сказать и о процедурном программировании! Там, где асм-программер обошелся бы call [eax], а то и джампом, C-программер пишет какие-то десятки строк хидеров (которые вообще никакого кода не производят!).
Все современные высокоуровневые языки можно трактовать ровно как возможность писать комментарии в исходниках. Я надеюсь, что в будущем вместо натужных описаний типа "Это класс XFactory. Реализует паттерн factory для класса X." мы сможем записывать этот факт в исходнике. И это будет намного круче, потому что этот комментарий будет читать компилятор, и он проверит его как минимум на полноту и непротиворечивость.
Фрагмент звучит так, как будто Грэм считает комментирование "лишней" работой. Если это так, то он врёт. Лисп-хакер, который одной строкой может положить символ на стек и поставить в тупик еще пятерых лисп-хакеров, потому что он не удосужился написать двадцать строк тщательно отформатированного комментария, может идти далеко.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
И без правой части можно мозг сломать, выясняя по коду, что же мы такое инкрементируем.
В С уже можно таких комментов не писать, ибо они выражены в коде. В С++ можно писать меньше комментов, чем в С. Потому что кое-что выражается в виде кода.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.