Страницы

среда, 6 декабря 2023 г.

Проверка пересечений ссылочных параметров в Oberon

В языке Oberon можно передавать переменные через ссылочные параметры процедур — параметры-значения[0] и параметры-переменные. Это удобно, потому что позволяет передавать ссылки на данные без обязательного размещения их в динамической памяти. Если же данные всё равно динамические, существует гарантия неутекания значений указателей с возможным побочным доступом к данным уже после вызова процедуры.

Но иногда возникает потребность в проверке того, не являются ли однотипные параметры на самом деле одним и тем же элементом, что может вызвать затруднение, так как в отличии от указателей сравнения параметров-ссылок в Oberon не предусмотрено. А это может быть важно, если как минимум один параметр — переменный(VAR), и его изменение может привести к нежелательному изменению другого параметра.

четверг, 16 ноября 2023 г.

Простейшее воплощение параметрического модуля

Если нужно использовать модули, параметризированные по ряду объявлений (generics, шаблоны), то в оригинальном Oberon, как и в Modula-2, это всегда было достижимо в некотором виде за счёт самой модульности. В минимальном варианте для этого достаточно простых средств даже без поддержки со стороны основных инструментов. Этот способ не идеален и позволяет сделать не всё, но и совсем плохим его не назовёшь — в нём не используется никаких опасных и сомнительных средств. Конечно, при очень плотном использовании обобщённых типов лучше внести соответствующие изменения в язык, а ещё лучше перепроектировать его с ноля[0], но если шаблоны нужны как вспомогательный механизм, то этот подход может оказаться даже лучше других.

Здесь представлен схематичный пример. Дополнительные детали воплощения для достижения нужных качеств представить несложно.

воскресенье, 5 ноября 2023 г.

Проверяемые адреса при работе с SYSTEM

Добавлено свойство проверяемости при работе с низкоуровневыми адресами в процедурах из SYSTEM — ADR, BIT, GET, PUT, COPY.

  • Проверка выхода за границы адресуемого объекта.
  • Проверка обращения к локальным объектам после выхода из содержащих их процедуры.
  • Проверка разрешённости записи в соответствии с правилами языка.
  • Запрет получения адреса от переменной, содержащей указатели.

Подход показывает возможность отказа от принципа «всё или ничего» в отношении безопасности указателей. В таком воплощении низкоуровневая адресация позволяет обойти типизацию в тех случаях, когда это может быть необходимо, но не предоставляет произвольный грубый доступ ко всей памяти, не позволяя также нарушить многие гарантии исходного языка, и помогая избежать ряда уязвимостей[0]. Правильный код, написанный под такое воплощение SYSTEM будет правилен и для бесконтрольного обращения к памяти. Обратное, естественно, верно не всегда.

понедельник, 18 сентября 2023 г.

HTML версия определения Оберона

На основе текста со страниц и сделал HTML-версию сообщения о языке программирования Оберон, более дружественной к малым экранам и внешний вид которой приближен к оригинальному определению в PDF. Страница содержит как английский текст, так и его русский перевод. По умолчанию выводится английский, но если доступен JavaScript, то язык выбирается на основе предпочтений в браузере. Есть возможность одновременно просматривать оригинал и перевод в выровненном виде. На мой взгляд, русский перевод на ресурсе online.oberon.org потерял в качестве в сравнении с оригиналом, поэтому я подверг его редактированию.

воскресенье, 9 апреля 2023 г.

Процедура верхнего уровня

По задумке автора Оберон лишён понятия главного модуля с главной процедурой, характерных для архитектурно устаревших операционных систем. «Точкой входа» является любая экспортированная процедура модуля без параметров, что позволяет ещё на уровне языка минимальным количеством понятий организовать более гибкое взаимодействие.

суббота, 1 апреля 2023 г.

Экспериментальная версия лексики

В качестве эксперимента попробовал взглянуть на Оберон с совершенно другой лексикой.

Из особенностей можно отметить

  • С одной стороны большая направленность на кириллицу и набор из кириллических раскладок.
  • С другой стороны уклон в интернационализацию с помощью значков и уменьшения зависимости от естественной лексики.
  • И даже использование юникод-символов с целью приближения к математическим символам.
  • Но с возможностью обойтись легкодоступными символами в альтернативном варианте.
  • Увеличение ясности ряда элементов.

ПРЕДУПРЕЖДЕНИЕ: при наличии высокой чувствительности и лёгкой травмируемости лучше избежать дальнейшего просмотра.

четверг, 10 ноября 2022 г.

Внедрение параллельности в однопоточный язык, не нарушающее совместимости

Если типичный императивный язык программирования был в начальной задумке однопоточным, то наивное добавление в него многопоточности не может быть осуществлено без слома совместимости, так как нарушает фундаментальное свойство, гарантирующее неизменность доступных переменных при отсутствии их изменений со стороны самого потока. Приёмы работы с данными, которые были совершенно приемлемы в однопоточности, могут оказаться неадекватными в многопоточном. Такой слом в языке не является чем-то совсем недопустимым, если сама платформа зарождалась в такой среде и накопление кода всегда происходило с учётом этой особенности. Но даже в этом случае достижение правильности кода избыточно перекладывается на плечи программиста с сопутствующими результатами. Такой подход неприемлем для языков, создаваемых не только для того, чтобы не мешать, но и для того, чтобы помогать. Что можно предложить для них?

Проверка пересечений ссылочных параметров в Oberon

В языке Oberon можно передавать переменные через ссылочные параметры процедур — параметры-значения [0] и параметры-переменные. Это удобно...