
Продолжение статьи о разработке стекового процессора с оригинальной архитектурой.
Здесь мы занимаемся инфраструктурой - ассемблером, компилятором С и эмулятором процессора.

Продолжение статьи о разработке стекового процессора с оригинальной архитектурой.
Здесь мы занимаемся инфраструктурой - ассемблером, компилятором С и эмулятором процессора.
${habrauser}, Привет!
При разработке игрового фреймворка Oriol Engine (которая, к слову, до сих пор ведётся) мы столкнулись с проблемой написания шейдеров для Cross-API рендеринга. В RHI-слой данного фреймворка было запланировано добавить поддержку таких графических API, как DX11/DX12, OpenGL и Vulkan.
И вот тут возникает вопрос: как же писать шейдеры на одном языке и обеспечить их поддержку на других графических API?
Я — школьный учитель информатики с многолетним стажем. За эти годы я наблюдал за эволюцией технологий: Pascal сменился Python, веб-разработка вытеснила десктопные приложения, а сейчас в фокусе — машинное обучение. Казалось бы, после такого опыта я могу уверенно отличить перспективную технологию от архаичной. Однако недавно, просматривая рейтинг TIOBE, я с удивлением обнаружил Fortran в топ-20. Более того, он поднялся из третьего десятка почти в топ-10, обогнав Swift и Ruby. Это заставило меня пересмотреть стереотипы: язык, который многие считают музейным экспонатом, явно не собирается уходить в историю.
Когда я впервые вернулся к старому коду на Pascal, меня поразило, насколько спокойным и уверенным был этот язык. Без магии, без догадок, без самоуверенности динамической типизации. Pascal не прощал халтуру — и именно поэтому программы на нём жили десятилетиями. Эта статья — не ностальгия, а попытка разобраться, почему мы потеряли культуру типобезопасности и почему сейчас снова к ней возвращаемся.
При работе с C или C++ необходимо в какой-то степени разбираться в неопределённом поведении (UB): что это такое, каковы его эффекты, и как о него не споткнуться. Для простоты картины я буду в этой статье рассказывать только о C, но всё изложенное здесь также применимо и к C++, если явно не указано иное.
Общеизвестно, что на С программировать сложнее, чем на таких языках, как Python.
В определённых отношениях дело в том, что язык C низкоуровневый, близкий к ассемблеру. Он просто выдаёт вам практически то же самое, что выдаёт машина, на которой выполняется код.
Всем привет, сегодня мы с вами напишем компилятор на Python. Мало чего он будет уметь, но для начала сойдёт.
Всего 4 этапа:
Лексер со своими токенами
Парсер со своим AST
Сам компилятор со своими байткодом
И напоследок виртуальная машина
Лексер токенизирует часть строки (к примеру a = 5)
Парсер делает АСД а поток токенов создает он сам
Компилятор превращает АСД в байт код (PUSH 5 STORE a HALT)
А виртуальная машина выполняет байткод.
Не так давно МЦСТ опубликовали кросскомпилятор для Эльбрусов. Это действительно важное событие в развитии платформы. Теперь для разработки под e2k не нужен ни свой Эльбрус, ни даже доступ к серверу на нем.
Для справки, кросскомпиляция — компиляция, при которой компилятор создает код для платформы, отличной от хостовой. Это удобно, так как процесс компиляции можно проводить на любом компьютере, а не только на устройстве с целевой архитектурой. В плане Эльбруса это позволяет проверять компилируемость вашего кода под e2k, добавлять сборку в свои ci/cd пайплайны, публиковать артефакты и релизы, не покупая свой сервер.

Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.
Задачи разработки компиляторов и интерпретаторов Читать полностью »