Как описать язык, который игнорирует имплиментацию и описывает только поведение - PullRequest
1 голос
/ 17 августа 2011

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

Is "декларативный "правильный термин?"Может быть "преднамеренным"?«Ориентированный на цель» - это термин, который, похоже, тоже имеет аналогичное значение.Может быть, что-то еще.Мне интересно, потому что проект, который я создаю, называется Лима, подходит под это описание (http://www.btetrud.com/Lima/Lima-Documentation.html).Я знаю, что Stack Overflow нравятся вещи, на которые есть ответы, поэтому ответ пойдет на человека с самыми проницательными комментариями.

Мне также интересно, насколько близкие люди думают, что эта идея является идеей Пола Грэма о столетииязык: http://www.paulgraham.com/hundred.html.Мне нравится, что то, что он предлагает делать со строками как списками символов и избавляться от массивов в пользу более общей «хэш-таблицы» (то есть ассоциативного массива), - это то, что я делал в Лиме, ​​когда впервые задумал об этом.

Основные идеи, лежащие в основе lima:

  1. Программирование на основе значений - избавление от любой логики, которая заботится о том, какой "тип" является значением.В Лиме нет типов, а значения - это просто значения.Типы все еще существуют в языке, но только для ограничения того, какие значения может принимать переменная - они не могут изменять, какой метод вызывать, и не определяют объем памяти в значении.

  2. Описательное программирование - то, что я описал выше о языке программирования, который исключает необходимость (и даже возможность) оптимизировать ваш код в самом коде (скорее, оптимизация будет выполняться с помощью автоматических оптимизаторов)

  3. Полная расширяемость языка - возможность писать любые конструкции в языке на самом языке (например, возможность не только переписать функцию 'sin', но и переписать оператор 'if', циклоператоры и создавать собственные DSL, которые можно использовать на языке и в других DSL.

1 Ответ

1 голос
/ 17 августа 2011

Я бы назвал это спецификацией. Так что, я думаю, я бы отнес это к определенному языку.

Некоторое время назад мне пришлось разработать несколько программ на Prolog . В Прологе вы просто указываете, что должна решать функция, а движок генерирует код для вас. Я ненавидел это все же.

...