Напишу немного теме, которая иногда меня волнует, а именно о жизненной позиции (читай, философии) Icon.
Известно, что Icon создавался как язык для продвинутой обработки текстовых данных и нечисловых (т.е. типа символьных?) вычислений, что естественно наложило отпечаток на язык, в котором впервые была представлена семантика сверхвысокого уровня. Именно из-за этого во многих описаниях Icon, а также в описаниях инструментов для работы с ним стоит следующая знаковая фраза — «Is a very high level programming language» (Язык очень высокого уровня, если дословно), которая во многом характеризует философию кода на Icon: краткие и четкие команды с максимально полезным эффектом.
Но, собственно говоря, это еще лишь часть позиции Icon. Icon проектировался как язык программирования, в котором практически все выражения являются генераторами (и к чему надо привыкнуть), т.е. выражениями, которые могут генерировать любое количество (!) результатов. При этом многие генераторы являются контекстно-зависимыми, т.е. генерируют разное количество результатов в зависимости от контекста, реализуя тем самым еще один принцип философии Icon, традиционно описываемый фразой «Generate and Test» (Сделай и проверь).
Таким образом, программа по сути дела генерирует некоторое количество решений, которые затем подвергаются контекстуальному отбору. И второй принцип позволяет использовать контекстуальное программирование со значительно большей отдачей, нежели традиционное.
Вспомню и еще одну идею, возведенную в Icon в ранг принципа. В Icon каждое выражение может быть либо успешным (т.е. вернуть какое-либо значение или несколько значений), либо неуспешным (т.е. вернуть специальное значение fail). С помощью такого подхода в Icon реализовано целенаправленное выполнение, заключающееся в том, что успех и неуспех используются как логические состояния в управляющих структурах — и в результате, программа будет работать до достижения некоторой цели, связанной с одним из таких состояний. Отсюда следует еще один из постулатов Icon, выражающийся фразой «Цель должна быть достигнута» .
В целом, философия Icon довольно примитивная и широкоизвестная, однако до Грисволда никто не пробовал воплотить это в языке программирования, используя такие необычные и даже новаторские идеи.
На этой немного ностальгической нотке я заканчиваю сегодняшний пост о философии Icon, а продолжение обещается в одном из будущих постов.