Создание ООП языка программирования от "Атомов" - PullRequest
3 голосов
/ 01 февраля 2011

В супервизирующих отношениях есть какая-то красота . Рассмотрим следующие примеры:

  1. Атомы состоят из субатомных частиц, молекулы состоят из атомов, клетки состоят из молекул, органы состоят из клеток, люди состоят из органов, общества состоят из людей.
  2. Сложные стратегии игры в Го основаны на необходимости создавать структуры с «двумя глазами», чтобы они выжили, однако в правилах никогда не говорится о «двух глазах» , но само по себе является эмерджентным свойством очень простых правил Go.
  3. Полнота Тьюринга Conway's_Game_of_Life может быть доказана с помощью планеров , орудий и космических кораблей , которые находятся в включить на основе концепции включения и выключения и очень простой набор правил .

Во всех случаях минимальный набор объектов и минимальный набор правил в конечном итоге приводят к очень сложной структуре.

Мой первый вопрос: Можно ли наметить небольшой и минималистичный набор программных "объектов" и "правил", которые можно использовать для построения языка ООП?

Теперь умный ученый , вероятно, укажет на полноту Тьюринга правила 110 и скажет, что это все, что вам нужно! Но это не совсем то, что я ищу. Скорее, рискуя поставить плохо определенные вопросы, какие самые простые, понятные человеку концепции могут быть встроены в объектно-ориентированный язык программирования?

Для плохого и неполного примера, который намекает на то, что я хочу, определите три концептуальных объекта: ссылка , функция и держатель информации . Затем (уровень 2?) Определите структуру , которая будет обладателем информации, которая содержит другую информацию посредством ссылок на другие информационные папки. Элементарный класс (уровень 3?) Будет дополнять структуры ссылками на функции, но необходимо будет создать дополнительную структуру для обработки концепций частных и публичных функций. В конечном итоге мы должны прийти к полнофункциональному языку ООП, который был построен исключительно на фундаментальных принципах, и нигде мы не сделали обман путем жесткого кодирования оптимизаций или синтаксической соли с машинным кодом. И в идеале конечный результат все равно будет привлекательным и читабельным кодом.

Мой второй вопрос: Существуют ли языки ООП, которые уже подходят к этому?

Ответы [ 4 ]

1 голос
/ 02 февраля 2011

Прототипы

Справочник по языку IO дает хороший совет - простейшим подходом к ООП является программирование на основе прототипов . Все, что вам нужно, это в основном ассоциативные массивы и первоклассные функции .

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

1 голос
/ 01 февраля 2011

io , вероятно, самый близкий язык к тому, что вы ищете.

0 голосов
/ 02 февраля 2011

Smalltalk построен на очень ограниченном наборе примитивов, но идеалы ОО там атомарны.Теоретически, вы можете построить произвольный сложный язык поверх базовой, просто как логика SK или лямбда-исчисление.ОО-функции ничем не отличаются, их можно сократить до более примитивного набора.Хорошим примером может служить любая OO-система поверх примитивных макросов Lisp.

Обновление : и посмотрите на Term Rewriting Systems в целом, это мощныйТехника для определения сложной семантики поверх простых вещей.

Я также рекомендовал бы прочитать книгу http://www.cambridge.org/gb/knowledge/isbn/item1132720/?site_locale=en_GB

0 голосов
/ 01 февраля 2011

Интересный вопрос, но я не совсем уверен, что это разумно.

Считайте, что 1 и 0 - это наши атомы в информатике.Они строго неделимы.И различные их комбинации дают начало программам со всевозможными удивительными свойствами.Но не стоит писать в 1 и 0, так как уровень абстракции слишком низок.

Я думаю, что та же проблема возникнет у вашего языка.Если бы он был достаточно гибким, чтобы можно было что-то построить, он был бы непригоден для использования, а если бы не был, он бы не отвечал вашим требованиям.

...