Здравствуйте, Mamut, Вы писали:
M>Для нетерпеливых — вопрос находится в самом конце этой цитаты
Для нетерпеливых — ответ сразу. Это провакационный толчек сознания, а-ля НЛП с закосом под невинный вопрос. В принципе в саомй провакации нет ничего плохого, но вот булшит лично мне не нарвится. У меня стойкое ощущение, что это не вопрос, а гипноз.
Пояснию. При верной посылке (почему в мэйнстриме нет некоторых мощьных возможностей существовавших в Лиспе и Смолтоке десятки лет назад) совершенно протеворечивая и на сквозь лживая аргументация. Причем это даже не аргументация. Текст построен так, что он не доказыает, что-то, и не объясняет, и даже не является вопросом. Хотя внешне на то похоже, но автот этих строк имеет четкую позицию и пытается навязать ее читателю использую "безпроигрышные методы".
Чтобы не быть голословным, поясню на примерах...
M>Глава 18: Lisp in Lisp (Building an interpreter)
...
M> 30: Procedure writing programs
M>Что меня волнует, так это то, что "старые" языки могли выполнять задачи, которые (как мне кажется) сложны или вообще невыполнимы в современных языках. Как так произошло, что все эти Java и C# потеряли все эти возможности, а называются "современными"?
Дествительно
как так произошло, что языки не имевшие каких-то возможнсотей и являющиеся наследниками языков так же никогда в жизни не поддерживающих этих возможнсотей
могли потерять эти возможности?
Другими словами, как можно потерять то о чем даже не знал никогда, не то что не имел?
И главный вопрос. Зачем строить фразу так, как будто факт потери очевиден?
M>Я заметил одну ОЧЕНЬ беспокоящую тенденцию в мире Java...
M>теперь можно написать кучу маленьких файлов XML, которые описывают поведения или что-то похожее...
M>Не забывайте, что XML не компилируется и никак не проверяется, кроме как на правильность структуры, и могущие возникнуть проблемы нельзя никак определить до тех пор, пока вы его не протестируете или не развернете на сайте. В прошлом названия из кода выше были бы классами или экземплярами класса и компилятор мог бы сразу обнаружить ошибку. Теперь они потеряли эту немаловажную возможность.
А теперь вопрос. Что не так в этих рассуждения? Никто не догадался?
Правильно, ни Лисп, ни Смолток не являются компилируемыми языками и самое лучшее на что они могут быть рассчитаны — это JIT-компиляция в момент выполенния. Таким образом проверки корректности в случае "старых языков" будет выполняться точно так же в рантайме или (в лучшем случае, во время развертывания, но это уже при применении супер технлогий вывода типов и т.п.). Так что претензию отсуствия статических проверок можно предъявить те же претензии что и к внешним ХМЛ-файлам.
M>Кажется, что им удалось изобрести новый скриптовый язык поверх Java, который на самом деле имитирует то, что у нас уже было лет десять тому назад в ASP/JSP/VB, но имимтирует намного хуже, потому что XML — это не язык, а структура данных...
Любой язык можно характеризовать как структура данных интерпретируемые человеком и машиной. Так что ХМЛ-языки фрэймворков вроде Spring-а — это такие же языки как и все остальные, только очень специализированные. Другими словами — это DSL-и рассчитанные реализацию конкретных возможнсотей отсуствующих в Яве или C#.
M>Возвращаясь к отправной точке — какие возможности мы потеряли, перейдя с Lisp/Smalltalk на всякие VB/Delphi/C++? а потом на всякие Java/C# и т.д., и какие возможности теперь заново изобретают (в худших формах) в этих новых "язвках"?
Это очередной булшит этой заметки. "
Мы" (Кстати, кто это? Мэйнстрим? Или это прием цель которого создать впечатление, что автор и читатель стоят на одних позициях?)
никогда не теряли Lisp/Smalltalk. Их попросту никогда не было у "нас". Были (да и есть) люди для которых был Lisp. Были и есть те для кого существует Smalltalk. Есть даже откровенные фанаты этих языков. Но все они это капля в море. Ява и C# — это мэйнстрим языки. Они захватывают умы тех кто учился программировать на Паскале, С и С++ (или на самих Яве и C#).
А в этих языках никогда не было тех возможнсотей которые есть в Лиспе.
Так что правильно ставить вопрос так:
Почему умы масс захватили Паскале, С, С++, Ява, VB и C#, а не Lisp или Smalltalk?
Вот тут лично я могу высказать свое мнение. Хотя оно для многи может показаться радикальным.
К такому положению дел, по-моему, привели следующие вещи:
1. Привычки. Лисп и Смолток очень не традиционные языки. Привычки — это опыт который закладывается в каждого человека с детства и остается в сознании практически на уровне рефлексов. Так в начальной школе нас обучали арифметике в которой
есть инфиксная запись выражений и есть
приоритеты. Так вот и Лисп и Смолток
нарушают эти прадиции (и не только эти). Смолток плюет на приоритеты (ради умозрительных приемуществ), а Лисп и вовсе плюет на инфиксную запись. Примитивные арефмитические выражения на этих языках уже выглядят не похоже на то к чему привыкли те самые массы. Уже одно это заставляет
ломать сознание. А вот как раз ломка сознания и
борьба с привычками — это очень болезненные процессы. Большинство людей скорее выбросят нечто не привычное, чем будут пытаться себя перебороть.
2. Традиции. Лисп и Смолток родились в недрах исследовательских лабороторий и очень долго жили только там. Потом из Смолтока долго пытались устроить успешный коммерческий продукт, но добились только того, что интерес к Смолтоку так никогда и не возник. А Лисп вообще долгое время существовал для окружающего мира почти как прикол. Потом пошли ПК на которых оба языка по началу вообще не могли работать. Там счет шел на байты и инструкции, и GC с нитерпретацией смотрелись совсем странно. Алголоподобные же языки напротив поставлялись с массовыми компьютерами и вообще были ближе к народу.
3. Lisp и Smalltalk плохие языки. Понимаю, что этот пунтк вызовет бурю эмоций у их фанатов. Но объективно это так. Надо только понимать, что термин "плохие" для разных людей имеет разное содержание. Вы можете быть фанатом динамически типизированных языков, и вам может быть не важны проверки компилятора и скорость исполнения, или вы можете считать отставание Lisp и Smalltalk не сущесвенным, а проверки в рантайме ничем не хуже сделанных компилятором... но это ваше мнение. А
мнение других людей
другое. Так вот очень многие из особенностей этих языков делали их плохими для программистов. Отсуствие синтаксиса в Лисп является приемуществом для тех кто ценит макросы, но является недостатком для того кто не хочет читать вместо понятных выражений какой-то (по его мнению) эзопов язык (польскую нотацию). И таких примеров в обоих языках море. Главное что объеденят Лисп и Смолток — это то
охренение в которое пребывает программист, привыкшей к Алголоподобным языкам, впервые сталкивающися с Лиспом или Смолтоком.
Ну, а теперь ответ на вопрос.
Лисп и Смолток были не принодны для мэйнстрима по очень большому количеству фаторов. Но многие родившиеся в них идеи поитихоничку переходя или прямо в мэйснтрим-языки или в языки претендующие на мэйнстрим. Скорее, правда, речь можно вести про Лиспе, так как Смолток практически ничего не дал миру кроме ООП которое и без Смолток выше крыши в мэйснтирме.
Скала, Немерле и даже Питон с Руби и являются развитием идей этих старичков. Они потихоничку проникают в массы и рано или поздно проникнут в современных фаворитов (Яву и C#, возможно и в С++, но похоже скорее случится второе пришествие), или гибриды воде Скалы и Немерле вытеснят с рынка сегодняшних фаворитов, как они, в свое время, вытеснили вчерашних.
Есть правда еще один ответ. Основан он на глубокой и чистой вере в человеческую глупост и бездарность. В соотсвествии с ней в мэйнстрим-ЯП вообще нельзя вводить что-то мощьное или сложное, так как по делу это будет использоваться очень редко, но вот во вред его будут использовать часто и с большим удовольствием. Совершенно естественно, что выдаются такие суждения теми, кто о себе подобное никогда в жизни не подумает. Тупые и бездарные это те кто седят за соседними столами. В общем, как в том анекдоте:
------------------
— Глянь какая здоровенная жидяра перед нами идет!
— Ага.
— А, давай ему морду набьем?
— Ты, что? А если он нам?
— А нам то за что?
В общем, это мнение тоже не безосновательно. Но сдается мне, что оправдвать отсуствие нужных многим программистам возможнсотей тем, что ими могут как-то не так воспользоваться тупые индусы. Особенно этот аргумент бессмысленнен в средах типа .net и Явы где можно без проблем использовать два и более языка. А языки типа Nemerle и Scala к тому же еще и имеют неплохие средства защиты от дурака.
M>[1] Я не имею ни малейшего представления, как перевести некоторые из этих терминов, поэтому оставил их, как есть.
Ну, например слово "могущие" нужно переводить как "которые могут", то есть не "могущие возникнуть проблемы", а "проблемы которые могут возникнуть".
В остальном перевод очень неплох.
... << RSDN@Home 1.2.0 alpha rev. 637>>