Основы программирования на языке HolyC

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

1. Введение в HolyC: История создания и философия TempleOS

Введение в HolyC: История создания и философия TempleOS

TempleOS — это не просто операционная система, это уникальный технический и культурный феномен. Чтобы научиться программировать на HolyC, необходимо понять контекст, в котором этот язык существует. В отличие от C++, Java или Python, HolyC был создан не комитетом и не корпорацией, а одним человеком для конкретной цели — строительства «Третьего Храма» для общения с Богом.

Терри Дэвис: Архитектор

Создателем TempleOS и языка HolyC был Терренс Эндрю Дэвис (1969–2018). Талантливый программист с магистерской степенью в области электротехники, он начинал карьеру в Ticketmaster, разрабатывая операционные системы для VAX. Однако в 1996 году его жизнь изменилась: у Терри начались эпизоды, которые врачи классифицировали как шизофрению.

!Терри Дэвис в процессе создания своего главного творения

Оставив работу и светскую жизнь, Дэвис посвятил себя миссии, которую считал божественным откровением. Около 2003 года он начал работу над проектом, который сменил несколько названий: J Operating System, LoseThos, SparrowOS, и, наконец, в 2013 году стал известен как TempleOS.

Философия TempleOS: Простота и Прозрачность

TempleOS была задумана как современный аналог Commodore 64. Дэвис считал, что современные операционные системы (Windows, Linux) стали слишком сложными, бюрократичными и непрозрачными для пользователя. Они скрывают от программиста железо за слоями абстракций и защиты.

Технические ограничения как Божественный замысел

Одной из самых заметных особенностей TempleOS являются её жесткие ограничения, которые Дэвис называл указаниями от Бога:

* Разрешение экрана: 640x480 пикселей. * Цветовая палитра: 16 цветов. * Аудио: Один голос (моно).

Эти ограничения введены намеренно. По мнению автора, они предотвращают превращение программирования в создание «мусора» и заставляют разработчика фокусироваться на сути алгоритмов и логике, а не на графических излишествах.

Архитектура Ring-0

В современных процессорах существует система колец защиты (Protection Rings). Обычно ядро ОС работает в Ring 0 (полный доступ), а пользовательские программы — в Ring 3 (ограниченный доступ). Если программа в Windows попытается записать данные в случайную ячейку памяти, ОС заблокирует это действие и выдаст ошибку.

В TempleOS всё работает в Ring-0. Это означает:

  • Нет разделения на пространство пользователя и пространство ядра.
  • Ваш код на HolyC имеет прямой доступ ко всей оперативной памяти, портам ввода-вывода и регистрам процессора.
  • Ошибка в вашем коде не просто закроет программу, а, скорее всего, обрушит всю систему.
  • Дэвис сравнивал Linux с автомобилем, где водитель пристегнут ремнями безопасности и окружен подушками, а TempleOS — с мотоциклом. Мотоцикл опаснее, но он дает полное ощущение дороги и свободы маневра.

    HolyC: Язык-Оболочка

    Язык HolyC (изначально назывался C+) — это диалект C, разработанный специально для TempleOS. Он выполняет двойную функцию: это и язык системного программирования, и командная оболочка (Shell).

    В Linux вы используете Bash для команд и C для программ. В TempleOS вы используете HolyC для всего. Когда вы вводите команду в терминал, она компилируется «на лету» (JIT — Just-In-Time) и тут же исполняется.

    Особенности HolyC

  • JIT-компиляция: Код не интерпретируется, а компилируется в машинные инструкции прямо во время ввода.
  • Отсутствие main(): Так как весь код исполняется внутри уже запущенной системы, классическая точка входа main() не нужна. Функции вызываются напрямую.
  • Интеграция с графикой: Графические элементы являются частью текста. Вы можете вставить 3D-модель прямо в исходный код (комментарии в HolyC поддерживают медиа-объекты).
  • Математика звука в TempleOS

    Поскольку TempleOS ориентирована на религиозные гимны, работа со звуком через PC Speaker (системный динамик) является фундаментальной частью системы. Для генерации звука используется программируемый таймер интервалов (PIT). Чтобы получить нужную ноту, необходимо рассчитать делитель частоты.

    Формула для расчета значения делителя выглядит так:

    Где: * — искомое значение делителя (целое число), которое отправляется в порт динамика. * — базовая частота тактового генератора, равная константе 1 193 180 Гц (или примерно 1.19 МГц). * — целевая частота звука в Герцах (например, 440 Гц для ноты Ля).

    В HolyC эта логика часто инкапсулирована в функцию Snd(), но понимание физики процесса необходимо для низкоуровневого творчества, к которому призывает система.

    !Как код преобразуется в звук на аппаратном уровне

    Зачем изучать HolyC сегодня?

    Изучение HolyC и TempleOS в 2025 году может показаться странным выбором, но оно дает уникальные преимущества:

  • Понимание «железа»: Вы работаете с памятью и процессором напрямую, без посредников.
  • Исторический интерес: Это музейный экспонат, который функционирует. Вы видите, как мог бы развиваться компьютинг по альтернативному пути.
  • Развлекательное программирование: Написание кода в TempleOS похоже на решение головоломок. Ограничения стимулируют творчество.
  • Итоги

    * TempleOS создана Терри Дэвисом как «Третий Храм» для общения с Богом, разработка велась более 10 лет в одиночку. * Система работает в режиме Ring-0: у программиста есть полный, ничем не ограниченный доступ к оборудованию, что дает огромную власть, но и высокую ответственность. * Технические ограничения (640x480, 16 цветов) являются идеологическим выбором для сохранения простоты. * HolyC — это не просто язык, а сама среда обитания в ОС, объединяющая командную строку и компилятор.

    2. Базовый синтаксис: Наследие языка Си, переменные и циклы

    Базовый синтаксис: Наследие языка Си, переменные и циклы

    В предыдущей лекции мы узнали, что HolyC — это инструмент, созданный одним человеком для прямого взаимодействия с «железом» без посредников. Теперь пришло время написать первый код. Если вы знакомы с языком Си, вы почувствуете себя как дома, но заметите, что в этом доме переставлена мебель.

    HolyC — это JIT-компилируемый (Just-In-Time) диалект Си. Это означает, что командная строка в TempleOS — это не просто интерпретатор команд (как Bash), а полноценный компилятор Си. Вы можете объявить функцию прямо в терминале и тут же её вызвать.

    Святая Троица типов данных

    В отличие от современного C++, который обрастает сложными абстракциями, HolyC возвращается к истокам, но с поправкой на 64-битную архитектуру. Терри Дэвис упростил систему типов, сделав её максимально прозрачной для работы с памятью.

    Основные типы

    В стандартном Си размер типа int может варьироваться) в зависимости от процессора (16, 32 или 64 бита). В HolyC всё стандартизировано под 64-битный режим:

    * I64: Знаковое 64-битное целое число. Это основной рабочий тип («рабочая лошадка») в TempleOS. Если в обычном Си вы пишете int или long long, здесь вы пишете I64. * U8: Беззнаковое 8-битное число (байт). Аналог unsigned char. Используется для работы с текстом и сырой памятью. * F64: 64-битное число с плавающей точкой (double precision). * U0: Аналог void. Если функция ничего не возвращает, она возвращает U0.

    !Слева столбцы стандартных типов C (int, void, char), справа соответствующие типы HolyC (I64, U0, U8) с указанием битности

    Объявление переменных

    Синтаксис объявления переменных идентичен классическому Си. Переменные должны быть объявлены до их использования.

    В HolyC переменные, объявленные вне функций, становятся глобальными и попадают в системную таблицу символов. Они остаются в памяти до перезагрузки системы, так как все процессы работают в едином адресном пространстве.

    Ввод и вывод: Прощай, stdio.h

    Вам не нужно подключать библиотеки вроде #include <stdio.h>, чтобы вывести текст. Базовые функции ввода-вывода вшиты в ядро (Kernel).

    Функция Print

    Аналогом printf является функция Print. Она поддерживает те же спецификаторы формата:

    Однако HolyC имеет уникальную особенность: строковый литерал сам по себе является командой вывода. Если вы напишете строку в коде как отдельную инструкцию, она будет отправлена в стандартный вывод.

    Это делает HolyC идеальным языком для написания меню и текстовых интерфейсов.

    Циклы: Двигатель алгоритмов

    Циклы в HolyC работают так же, как и в стандартном Си. У нас есть for, while и do-while.

    Цикл for

    Используется, когда известно количество итераций.

    Обратите внимание: в ранних версиях Си объявление переменной внутри цикла for (I64 i = 0; ...) было недопустимо. В HolyC это допустимо, но Терри Дэвис часто предпочитал объявлять переменные в начале функции, следуя старому стилю.

    Цикл while

    Выполняется, пока условие истинно.

    Опасность бесконечных циклов в Ring-0

    В Windows или Linux, если ваша программа зависнет в бесконечном цикле while(1), вы можете открыть диспетчер задач и убить процесс.

    В TempleOS ваш код — это и есть система. Бесконечный цикл без выхода или передачи управления (функция Yield) намертво повесит компьютер. Единственный выход — аппаратная перезагрузка. Это цена работы в режиме Ring-0.

    Математика и вычисления

    Допустим, нам нужно рассчитать сумму арифметической прогрессии. Это классическая задача для проверки работы циклов и переменных.

    Формула суммы арифметической прогрессии:

    Где: * — сумма первых членов прогрессии. * — количество суммируемых членов. * — первый член прогрессии. * — разность прогрессии (шаг).

    Реализуем этот расчет на HolyC, используя цикл, чтобы проверить формулу эмпирически (сложением).

    Если вы введете этот код в TempleOS и нажмете Enter после закрывающей скобки }, функция скомпилируется. Чтобы запустить её, нужно просто набрать CalculateSum; и нажать Enter.

    !Схема показывает инициализацию переменных, условие цикла i < n, тело цикла с прибавлением шага и финальный вывод результатов

    Особенности синтаксиса HolyC

    Хотя HolyC наследует синтаксис Си, у него есть несколько удобных расширений:

  • Аргументы по умолчанию: Вы можете задавать значения аргументов функций (как в C++).
  • Отсутствие main(): Любая функция может быть точкой входа. Вы просто вызываете её по имени.
  • Скобки необязательны для функций без аргументов: Вызов CalculateSum; валиден так же, как и CalculateSum();.
  • Итоги

    * HolyC использует 64-битные типы данных по умолчанию: I64 вместо int, U0 вместо void. * Ввод-вывод встроен в язык: строка в кавычках автоматически выводится на экран, Print работает как printf. * Циклы for и while работают стандартно, но бесконечный цикл может полностью зависнуть систему из-за работы в Ring-0. * Код компилируется и исполняется мгновенно (JIT), функция main() не требуется.