Страницы

понедельник, 6 апреля 2026 г.

Расширение командного режима

Расширены возможности кода Oberon-команд в трансляторе Восток. Эти возможности являются альтернативой частным и в то же время однообразным разборщикам параметров разных команд и создающих предпосылки для дополнительных языков вместо использования одного исходного, увеличивая совокупную сложность.

  1. Пропуск повторного упоминания имени модуля после его указания в вызове процедуры, например,
    odcey.opt(.SkipEmbeddedView + .SkipOberonComment)
    вместо
    odcey.opt(odcey.SkipEmbeddedView + odcey.SkipOberonComment)
  2. Включая цепочки вызовов процедур одного модуля, например,
    odcey.inputWindows1251.text("legacy.odc","")
    вместо
    odcey.inputWindows1251; odcey.text("legacy.odc","")
    обычная команда в shell, использующей разбор командной строки:
    odcey text -input-windows-1251 legacy.odc
  3. Использование переменных, вводимых присваиванием и указанием в качестве VAR-параметра в вызове процедуры
    a := 111; log.in(a * a)
    l := 0; log.b(Charz.CopyString(dest, l, " строка ")).s(dest).s("len = ").in(l)
  4. Доступны все операторы, а не только вызов процедур
    FOR i := 17 TO 31 DO log.i(i * i).s(" ") END; log.n
    IF OsRand.Open() & OsRand.Set(set) THEN log.setn(set) END

суббота, 21 февраля 2026 г.

odcey 0.4

После краткого перерыва вышла 0.4-я версия утилиты odcey.

  1. Добавлена опция -write-descriptors для вывода вместе с основным текстом также дескрипторов View, содержащихся в документе. Команда встраивания odcey в git использует эту опцию, чтобы сделать git diff более информативным
  2. Добавлена замена разделителей параграфов на переводы строк
  3. При записи в стандартный вывод добавлена гарантия завершения записи переводом строки
  4. Исправлен код с неправильной трактовкой формата .odc, ошибочно приписывавшего нарушение в документах, содержащих некоторые типы View.

вторник, 10 февраля 2026 г.

odcey 0.3.2

Обновлена утилита odcey — преобразователь насыщенного текстового формата BlackBox Component Builder .odc в плоский UTF-8 текст.

  1. Команда text сделана необязательной, если указано имя входного файла
  2. При встраивании в git-репозиторий непосредственное добавление в .git/config заменено на вызовы git config, производящие это более аккуратно
  3. Исправлено преобразование в Unicode некоторых литер, специфичных для однобайтовой кодировки Blackbox
  4. Исправлена ошибка невозможности редактирования .git/info/attributes, проявлявшейся только в JavaScript версии утилиты
  5. Исправлена ошибка, приводящая к избыточному выделению памяти
  6. Исправлено большое количество мелких недостатков, связанных с возможностью работы с неправильными входными файлами

понедельник, 20 октября 2025 г.

Архив блога

Создал репозиторий с содержимым этого блога — .
Также, добавил его в ipfs, где он напрямую доступен в виде сайта —
.
Содержимое основного сайта тоже доступно в ipfs —
.

вторник, 25 марта 2025 г.

odcey 0.2

Обновление утилиты odcey — преобразователя насыщенного текстового формата BlackBox Component Builder .odc в плоский UTF-8 текст.

  1. Добавлена опция «-input-windows1251» для возможности указания в качестве входной кодировки Windows-1251(кириллица) вместо Latin-1, что может быть полезно при работе со старыми руссифицированными сборками BlackBox
  2. Добавлена команда «mc» для встраивания в конфигурацию Midnight Commander

среда, 19 марта 2025 г.

Транслятор 0.0.11

Выпущено обновление с поправками и усилением транслятора в версии 0.0.11 и исправлением и расширением библиотеки по умолчанию в версии 0.0.10. Помимо deb-пакета, snap и homebrew доступна также установка через npm версии, работающей через JavaScript.

воскресенье, 8 декабря 2024 г.

Подход для безопасности по памяти в системном ЯВУ

На примере языка Oberon представлен общий подход[0], позволяющий на основе высокоуровневых средств создать безопасную по памяти программную среду, защищённую от нарушений изнутри её же средствами. Так как основная часть языка Oberon сама по себе защищена от нарушений границ, то основу предложения составляет ограничение псевдомодулей для работы с переменными с возможными нарушениями типизации, что может быть нужно в системных задачах. Ограничение позволяет сохранить общую целостность. Даже обычный интерфейс псевдомодуля SYSTEM позволяет применять схожий подход[1], но в силу несоответствия воплощения исходной простой задумке, это приводит к ограниченности применения и бо́льшим накладным расходам.


[0] github/vostok-space/безопасно-по-памяти.md
[1] проверяемые адреса при работе с SYSTEM

четверг, 29 февраля 2024 г.

Обработка отказов и ошибок

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

Возникающие при работе кода отказы по своему происхождению можно разделить на:

  1. отказы ввода и вывода
  2. ошибки самого кода
  3. ошибки исполнителя кода

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

суббота, 24 февраля 2024 г.

Чтение каталога через Java

Добавлен модуль JavaDir, позволяющий читать каталог при генерации кода через Java.

Рекомендуемым способом чтения каталога является обращение через модуль Dir, который объединяет в себе работу и с другими платформо-специфичными модулями для чтения каталога.

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

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

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

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

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

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

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

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

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

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

Накладные расходы проверок на RISC-V, ARM, Эльбрус, AMD64

Получил в использование одноплатный компьютер StarFive VisionFive c 2-ядерным процессором на архитектуре RISC-V. На поставляемом с платой дистрибутиве Fedora провёл тестирование транслятора Восток и, в частности, проверку времени исполнения сгенерированного кода с проверками корректности и без.

суббота, 13 августа 2022 г.

Транслятор 0.0.10 и Web-среда 0.2

Выпущено обновление транслятора 0.0.10, библиотеки по умолчанию 0.0.9 и веб-среды для взаимодействия с транслятором 0.2.

суббота, 23 июля 2022 г.

Web-среда 0.1 для транслятора Web-sandbox 0.1 for the translator

Доработана и обозначена как версия 0.1 написанная на Go и JavaScript web-среда(песочница) для взаимодействия с транслятором Восток. Среда позволяет редактировать модули на Обероне, запускать экспортированные процедуры, преобразовывать модули на другие языки программирования. Модули, доступные по умолчанию из окружения транслятора, ограничены в доступе к возможностям сервера.

The web-sandbox written in Go and JavaScript for interacting with the Vostok translator has been fixed as version 0.1. The sandbox allows you to edit modules on Oberon, run exported procedures, convert modules to other programming languages. Modules available from the default translator's environment have restricted access to server's resources.

среда, 23 февраля 2022 г.

Версия 0.0.9

Выпущено обновление транслятора, библиотеки и сборщика Android приложений. Как и прежде, доступна установка и автоматическое обновление из Snap Store, deb-репозитория и Homebrew. Также доступна Web-песочница.

Расширение командного режима

Расширены возможности кода Oberon-команд в трансляторе Восток. Эти возможности являются альтернативой частным и в то же время однообразным р...