В процессе обсуждения темы о различных принципах написания кода, я вдруг обнаружил, что на хабре нет ни одного упоминания о таком замечательном проекте как Bitwise.
В 2017 году, Per Vognsen - программист с более чем 15-летним стажем, работавший в таких компаниях как NVIDIA и Oculus берет паузу и в марте 2018 стартует амбициозный обучающий проект Bitwise, в котором он собирается разработать и написать весь программно-аппаратный стек для простого компьютера с нуля и запустить его на FPGA.
Проект должен был включать в себя операционную систему, компилятор, системные библиотеки, а также HDL код для центрального процессора и периферийных контроллеров. Пререквизиты к нему минимальны - свободное владение языком Cи (и немного Python), а также знание некоторых алгоритмов и структур данных из стандартных CS курсов. Все остальное объясняется по ходу написания кода.
Проекты подобные Bitwise можно пересчитать по пальцам (думаю многие еще вспомнят о знаменитом Handmade Hero от Casey Muratori). Автором данного проекта выступает отличный программист, который в формате скринкастов показывает и объясняет каждое решение по ходу написания кода. Этой короткой статьей я бы хотел заполнить пробел и познакомить большее число людей с проектом Bitwise, так как сам извлек из него много нового.
Для общего обзора я постарался условно разбить содержание на 5 логических частей:
1. Проект начинается с написания Си-подобного системного языка программирования Ion, который будет использоваться для дальнейшей разработки. Автор приводит аргументы в пользу того, почему он принял решения писать компилятор для нового языка, а не просто использовать Си. Разработка Ion выполняется на чистом C99, без использования сторонних библиотек. Написанный компилятор на выходе генерирует Си код, который затем компилируется стандартным компилятором языка Си. Вся дальнейшая разработка производится на языке Ion.
2. Во второй части автор приступает к написанию ассемблера и эмулятора процессора на базе архитектуры RISC-V и подробно разбирая документацию и систему команд.
3. В третьей части следует написание одной из версий языка программирования Forth на разработанном прежде ассемблере.
4. В четвертой части он переключается на Python и пишет прототип собственного DSL для разработки аппаратной части.
5. В завершающей (на данный момент) части, автор проектирует различные аппаратные части компьютера начиная с базовых логических элементов.
К сожалению на данный момент проект не активен. В первый раз большая пауза произошла спустя несколько месяцев после запуска, а через некоторое время автор вернулся и обещал продолжать проект. Однако это продлилось недолго, так как по его последнему посту на github, мы узнаем, что он сильно выгорел и пока не хочет давать никаких обещаний насчет продолжения. Но в любом случае, то что уже было сделано, а это более 100 часов видео, я считаю заслуживающим внимания:
Официально проект базировался на платформе handmade network по ссылке
Весь код с историей можно найти по ссылке, а видео доступны на канале https://www.youtube.com/pervognsen
Видео материал разделен на 2 плейлиста (основной и экстра, в котором некоторые моменты рассматриваются более подробно):
Еще есть надежда на возрождение проекта, но в любом случае, уже созданный материал является отличным пособием, из которого, как я считаю, можно почерпнуть информацию программистам самых разных уровней.