Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram

История создания yabasic

Кратко о том, как был создан очередной вариант BASIC

История разработки, новости релизов и документация
Аватара пользователя
admin
Site Admin
Сообщения: 59
Зарегистрирован: Чт фев 08, 2024 7:03 pm

Крайне интересная тема История создания yabasic

Сообщение admin »

История создания yabasic
История создания yabasic
*взята с сайта автора https://2484.de/yabasic/history.html

В начале 1995 года Марк-Оливер Ихм (Marc-Oliver Ihm) наткнулся на книгу "Compilerbau" (ISBN 3-519-32338-9) Никлауса Вирта. Чтение этой замечательной книги оставило у него впечатление, что написать компилятор или интерпретатор было бы проще простого ;-). Итак, он начал писать свой собственный интерпретатор; и поскольку basic был единственным интерпретируемым языком, с которым у него был опыт, то он начал писать интерпретатор basic.

Первая версия yabasic была завершена примерно в мае 1995 года, в ней по-прежнему отсутствовали многие функции (ни массивов, ни циклов, только goto); тем не менее он выпустил ее как версию 1.0. После публикации yabasic для широкой публики пользователи yabasic присылали ему отчеты об ошибках и запросы функций, что стимулировало дальнейшую разработку.

Следующее крупное улучшение произошло летом 1996 года, когда Марк Ихм получил свой компьютер с Windows95: портирование yabasic на платформу Win32 заняло две недели, а написание программы установки - месяц. Это была версия 2.0.

После переноса yabasic на Windows поток сообщений об ошибках и запросов функций начал увеличиваться. Через два с половиной года это достигло уровня, с которым Марк не мог справиться приемлемым образом. И он решил поделиться своей работой. Поскольку код yabasic несколько запутан, он не мог ожидать, что кто-нибудь исправит многочисленные ошибки в yabasic. Поэтому Марк предпочёл, чтобы пользователи заботились о новых функциях самостоятельно. И поскольку пользователям yabasic в основном нравилось программировать на yabasic, новые функции пришлось добавлять с помощью yabasic (а не C). Летом 1999 года были добавлены подпрограммы и библиотеки в yabasic, выпустив версию 2.57. Идея заключается в том, что теперь пользователи могут реализовывать новые функции в виде набора подпрограмм в отдельной библиотеке и могут делиться ими с другими. В долгосрочной перспективе у нас должна получиться стандартная библиотека для yabasic, и, конечно же: любая помощь приветствуется!

В период с 2006 по 2013 год Марк Ихм почти не работал над yabasic, потому что его профессиональные и домашние обязанности требовали все больше и больше моего времени. В декабре 2013 года он заметил, что, yabasic больше не компилируется на современных дистрибутивах GNU\Linux! К счастью, в январе 2014 года Марк сменил работу и у него появилось несколько недель свободного времени, что позволило исправить некоторые ошибки и обновить набор инструментов, так что yabasic теперь снова можно использовать в современных системах.

В будущем Марк Ихм намерен поддерживать yabasic в актуальном состоянии, добавлять некоторые функции, исправлять ошибки и отвечать на любые вопросы пользователей.

Flex и Bison

Возможно, вы заметили из вышесказанного, что yabasic начал довольно быстро; в основном это связано с flex и bison, основными инструментами, используемыми для внедрения yabasic (см. "lex & yacc" Джона Р. Левина, Тони Мейсона и Дуга Брауна, ISBN 1-56592-000-7).

Bison и flex берут грамматику в форме Бэкуса-Наура и создают две C-программы, которые сами по себе могут анализировать входную программу на новом языке и проверять ее на грамматическую корректность. Единственное, что остается программисту, - это облечь этот скелет в плоть, чтобы проанализированная и проверенная программа ввода действительно что-то делала.

Этот процесс удивительно эффективен: 32 Кбайт инструкций flex и bison генерируют 184 Кбайт C-кода, что необходимо сравнить со 199 Кбайт C-кода, который я написал сам. Вместе они реализуют функциональность yabasic. Итак, на самом деле половина кода была сгенерирована flex и bison!

Выполнение программы

Хотя yabasic ведет себя в основном как интерпретатор, это скорее компилятор: Если вы даете ему какой-либо базовый код для выполнения, код компилируется, выдавая инструкции для странной и простой стековой машины. Затем эти инструкции интерпретируются немедленно, так что вы никогда не свяжетесь со stack-машиной. Но вы можете узнать время, необходимое для различных этапов этого процесса, если вызовете yabasic с infolevel, установленным в note.