Страницы

"Восток". Поддержка работы в WINE

Сообщения о трансляторе переехали в отдельный блог.

Обеспечена работа транслятора в WINE(в Windows проверяю редко). В проект добавлен сценарий build.cmd, который с помощью Tiny CC собирает транслятор из предварительно сгенерированного C-кода, а затем тот собирает сам себя. Как и в GNU/Linux есть возможность сборки и исполнения модулей без промежуточных файлов, когда транслятор все необходимые действия производит сам.

В WINE не всё будет работать хорошо из-за того, что имена файлов регистронезависимые. Над этим ещё нужно поработать.

Приклад програми на україномовному Обероні

Наштовхнувся на свій старий експеримент на тему того, як може виглядати код на україномовному варіанті Оберону. З особливостей можна відмітити:

  1. Адаптація граматики під потреби мови, а не лише переклад ключових слів та стандартних імен.
  2. Заміна прямокутних скобок на круглі [] -> () для зменшення потреби у переключенні розкладки клавіатури.
  3. Використання однослівних коментарів, що починаються зі знаку '. Це дозволяє сумістити зміст, важливий для комп'ютера з опціональною можливістю прикрас для людини, потреба в яких виникає через бажання наблизити формальний текст до рідної мови, яка у випадку слов'янських мов потребує відмінювання слів.
  4. Використання наказового способу для визначення дій, що виглядає більш природньо та вимагає менше букв, ніж більш традиційна невизначена форма. Враховуючи, що наказовий спосіб - це імператив, то використання його в імперативнах мовах набуває особливого змісту.

Накладные расходы на структурное программирование

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

"Восток". Накладные расходы проверок.

Сообщения о трансляторе переехали в отдельный блог.

Сделал тест для измерения накладных расходов проверок корректности времени исполнения, которыми транслятор сопровождает основной код. Воплощены проверки: переполнения типа, выхода за границы массива, использования неинициализированных переменных, приведения базовой записи к расширенной, пользовательские ASSERT. Тест представляет собой специальную сборку транслятора, которая несколько раз собирает сама себя. Полагаю, это хороший практический тест. Для сравнения добавлены проверки, доступные в современных компиляторах С: fsanitize=address и fsanitize=undefined.

Для запуска теста используется сценарий benchmark.sh, находящийся в каталоге проекта.

Компилятор: gcc-6.3.0 -O3 -flto.

Размер, байтРазмер, отношениеВремя, секундВремя, отношение
Без проверок 161 776 1 0.27 1
Восток 219 128 1.35 0.34 1.26
asan undefined 1 284 392 7.93 0.42 1.56
asan address 566 520 3.5 0.74 2.74
asan addr+undef 3 006 456 18.58 0.90 3.33
Восток+addr+undef3 637 976 22.49 1.04 3.85

Проверки ещё несовершенны, поэтому можно ожидать некоторого увеличения накладных расходов по мере улучшения транслятора.

"Восток". Скриптовый режим

  1. 19 апреля я добавил в транслятор возможность генерации исполняемого файла и возможность его сразу же запустить
  2. 25 апреля добавил возможность указать команду модуля - экспортированную процедуру без параметров, что приблизило "Восток" к более удобному понятию программы в оригинальном Обероне в противовес традиционному пониманию программы с единой точкой входа.
  3. 5 июля была добавлено скриптовое исполнение, то есть, появилась возможность вызова последовательности экспортированных из разных модулей процедур с параметрами.
  4. 24 июля была добавлена опция командной строки -infr (инфраструктура), позволяющая для простых случаев сократить количество параметров, нужных для запуска кода на Оберон. Можно писать так:
    $VOSTOK/result/o7c run "Out.Int(1234 * 4567 + 89ABH, 0); Out.Ln" -infr $VOSTOK
    Или, подготовив shell соответствующей функцией
    function o7r { $VOSTOK/result/o7c run "$1" -infr $VOSTOK; }
    писать так:
    o7r "Out.Int(1234 * 4567 + 89ABH, 0); Out.Ln"