Пока просматривал уже нафлуженное, задался двумя вопросами. 1) Поймал себя на неточности. Написал, что большие Perl/Python программы написаны практически на C++. Но, ведь, все большие программы на C++, которые я видел, написаны практически на C! А все C++ фичи либо носят чисто декоративный характер, либо нужны для интерфейса с визуальными "объектами". (В этом смысле Python, как и Java, более ОО, чем C++). Что же такого заложено в C, что делает его, по сути, единственным языком написания сложных программ? Ведь даже коллеги на полном серьезе обсуждают внедрение C-элементов в Forth. 2) Почему мое утверждение об ориентированности Forth на решение сложных, а не простых, задач вызвало такое возмущение коллег? Начну со второго вопроса. Ответ прост. Программисты не любят больших задач! Причины понятны, Дейкстра их сформулировал еще 40 лет назад. Быть гениальным творцом чего-то внешне очень заумного, но внутренне очень простого, гораздо почетнее, чем числиться автором чего-то, что еще пяток лет придется доводить до ума. Конечно, есть много начинающих, которые мечтают чем-то большом и светлом (обычно, новой игре), но большинство из них с этой мечтой и остаются. Успешные программисты - жертвы цехового метода обучения, начинавшие с того, что писали свои утилитки и подпрограммки, глядя, как это делает гуру. (Например, по Python я, вообще, не видел серьезных книг). А супер-успешные программисты вообще как начинали с чего-то очень простого и прикладного (например, с FoxBase, позднее - с FoxPro), так с ним и остаются на всю жизнь, обрастая учениками, и втюхивая где-попало свои студенческие наработки на страх окружающим. С популярностью языка C ситуация схожая. Вернемся к C++, точнее к книге Страуструпа. Тот, обдумывая применение C++ для сложных проектов, как заядлый фортер рассуждал о написании над C++ (на C++) языков, описывающих проблемную область задачи. Но он лукавил. На C++ (а, тем более, на C) невозможно написание чего бы то ни было, отличающегося от них. Синтаксис и логика языка вынужденно остаются теми же. Т.о. наш вывод о нелюбви к сложным задачам усиливается. Программисты еще и не любит создавать (и использовать) новые языки. Даже попадая в новую языковую среду они продолжают пытаться использовать старые парадигмы. Посмотрите, например, как питонисты извращаются, чтобы остаться в рамках, усвоенных при C-программировании. Исключения лишь подтверждают правило, и в каждом "новом" языке от awk до PHP мы видим стремление сохранить С-синтаксис. Возвращаясь ко второй части флуда, напомню, что программисту свойственно рассуждать о задаче с точки зрения пользователя, а не машины, и поэтому он обычно способен создать язык для рисования окошек, но не покрытия плоскости некоторыми видами мозаик (хотя, это - одно и то же). Поэтому новые языки переполнены атавизмами. Чемпион - Perl, как сборище устаревших решений (хотя и языки ООП не сильно отстают, со своими фантиками, завернутыми в другие фантики, обрезаемыми при компиляции). К таким атавизмам в Forth можно отнести попытки вставить в него элементы C, классы, иероглифы, "стандартные" структуры данных... Итак, Forth предназначен для работы со сложными задачами путем создания новых языков, но... 1) ... программисты не любят сложных задач; 2) ... программисты боятся новых языков; 3) ... программисты стремятся рассуждать о способе решения (разбиения) задач в терминах пользователя, а не Forth.
|