Вопрос

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

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

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

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

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

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

Мой второй вопрос: Есть ли какие -нибудь языки ООП, которые уже приближаются к этому?

Это было полезно?

Решение

Прототипы

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top