Сейчас все привыкли к мысли, что JavaScript может творить удивительные вещи, но Turbo Pascal в браузере стоит поискать всем, кто помнит его первоначальную реализацию. Он включает виртуальную машину с p-кодом, которая двоично совместима с компиляторами UCSD.
Turbo Pascal был одним из прорывов 1980-х годов. Это была реализация на ПК стандартного языка Паскаль, который в то время широко использовался для обучения информатике. Паскаль был одним из первых современных языков, доступных на ПК. Позже он превратился в объектно-ориентированную версию, которая все еще пользуется успехом, как Delphi.
Реализация JavaScript, которая находится на GitHub, не является полной реализацией Turbo Pascal 5.5, но если вы посмотрите на демонстрации, она впечатляет и включает большую часть языка и большую часть графического модуля. Автор, Лоуренс Кестелут, реализовал язык и стандартную библиотеку в объеме, достаточном для запуска пяти оригинальных программ, написанных еще в 1989 году — программисты делают сложные вещи по целому ряду безумных причин!
Компилятор рекурсивного спуска с ручным кодированием, Pascal — это язык с блочной структурой, занимает около 6000 строк JavaScript. Первоначальный Turbo Pascal полностью компилировался в машинный код, отсюда и слово «Turbo» в его названии. В более ранних реализациях Паскаля использовалась виртуальная машина, на которой выполнялся p-код. Сегодня виртуальные машины — очень популярный способ реализации языка, но тогда технология была не так хороша, и поэтому «p-code» был синонимом «медленного».
В отличие от собственно Turbo Pascal, компилятор JavaScript выводит p-код. Конечно, это означает, что проекту нужна была виртуальная машина с p-кодом, и это то, что вы найдете в репозитории GitHub — и это около 600 строк прокомментированного JavaScript. Утверждается, что он двоично совместим с исходным компилятором UCSD Pascal, что подразумевает, что его можно использовать для запуска устаревших программ UCSD Pascal, Fortran и Basic. Другими словами, виртуальная машина с p-кодом может быть полезна сама по себе.
У компилятора есть пользовательский интерфейс, имитирующий исходный командный интерфейс Turbo Pascal — позже он получил графический интерфейс. Если вы попробуете это здесь, обратите внимание, что не все команды были реализованы. Чтобы запустить один из примеров программ, используйте команду D, чтобы вывести каталог, а затем используйте команду W, чтобы загрузить файл, а затем R, чтобы запустить его. Используйте Ctrl-C, чтобы остановить это.