Комментарии 60
Это хорошее начинание, пригодится в жизни в дальнейшем 100%. Развивай тему. Писать компилятор в 16 лет - это действительно круто.
Меня в 16 лет хватало сил сначала на свой GUI в DOS, а потом писал свой .COM и .EXE упаковщики на смеси паскаля и ассемблера. Прекрасно понимаю, как это увлекает, когда узнаёшь что-то новое, ставишь себе цели и видишь реальный результат.
Это сейчас у вас ещё время находится свободное. Пользуйтесь моментом. Удачи в начинаниях!
Спасибо большое, отличные были проекты!
Пока нет ипотеки и семьи, надо вкалывать в самообразование. Потом это окупится сторицей
Я писал упаковщики и графику на смеси Паскаля и ассемблера тоже в таком возрасте, а сейчас вижу без работы. Не пригодилось!
Есть подозрения, что практика в 16 лет не является минимально необходимым условием для того, чтобы котироваться на рынке труда.
Я тоже в 15-16 лет писал графику на смеси ассемблера и Паскаля. А сейчас, спустя две дюжины лет, я фронтендер (ts+rust) с хорошим багажом экспертизы, которого у меня совершенно точно не было в 16 лет.
Автору статьи: это хорошее начинание, продолжайте. Но надо помнить, что самообучение в школе - это не исключение, много увлечённых людей так делают, поэтому:
А здесь, знаешь ли, приходится бежать со всех ног, чтобы только остаться на том же месте! Если же хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее!
Это Льюис Керролл, "Алиса в Зазеркалье".
Привет. Моему сыну 11 лет с чего ему начать чтолы были вот такими умными как вы. Как е программы обучала и я должна ему скачать какие предметы и так далее. У него математический ум и он учавствовал в Олимпиаде но я не понимаю как мне его развивать так как я вобще ничего не смыслю в этом
Я в 11 начал с PHP)) но не думаю, что это самый правильный подход. Ребёнку надо давать то, что ему нравится. Если ему нравится делать роботов - надо идти в робототехнику, если нравится делать игры - в unity или java (мне совершенно случайно попался чрезвычайно интересный курс по java именно в геймдеве, причём для desktop). А может ему тоже понравится веб. Думаю, не важно, с чего начинать. Главное, чтобы было интересно, и очень важно получать обратную связь от ребёнка. И если он вдруг решит сменить направление - это совершенно нормально, и это даже стоит поощрить, т.к. не у каждого найдутся силы изучать что-то неизвестное, когда уже столько опыта в другой сфере
Желаю удачи вашему сыну!
Дайте ему решить самому. Это должно идти изнутри.
Меня родители посылали в компьютерную школу при гос. университете, и там я обучался азам компьютерной грамотности. Однако оно просто не шло. Совершенно. Я получал минимальные баллы, сидел на задней парте и рисовал в тетради. В школе тоже была тройка и этот бэйсик никак не давался. Мы просто рубились в принца Персии.
Однако за одно лето (я тогда учился в 7 классе) во мне что-то щёлкнуло и было уже не остановить. Это совпало с покупкой собственного компьютера. Спасибо родителям.
Сначала переустановка винды (тогда ещё 3.1), дос, синие окна нортона.
Книжка Фаронова по Турбо Паскалю 7. Начал интересоваться ассемблером. Системным программированием, драйверами, устройством операционной системы, загрузчиков и вообще всем. Никакого интернета тогда не было, поэтому очень жадно проглатывал любые доступные знания по интересующим темам. Читал спецификации. Так подтянул английский. А в компьютерной школе переместился на первые строчки рейтинга и участвовал в олимпиадах.
Дальше уже стал гиком. Накопил себе на модем, на апгрейды компьютера и продолжал изучать. Да что там, до сих пор продолжаю. Но теперь времени свободного и мотивации гораздо меньше, чем тогда.
Так что пусть сын сам спросит, что бы он хотел. И даже если он будет играть в игрушки, не лишайте его этого. Детям надо наиграться. Потом будет куча всего, чего они смогут позволить себе сами. Кроме желания отдуши поиграть.
И лучше пусть сам выбирает направление в жизни, что его самого заинтересует.
И всё получится!
Хорошее упражнение для головы, продолжайте. В реальности, конечно, компиляторы пишутся по-другому – через теорию формальных грамматик – но чтобы почувствовать, зачем это нужно, вам нужно сначала реализовать свой способ и понять его проблемы. Так что, конечно, будет полезно довести дело до рабочей кодогенерации.
Кажется, синтаксис примерно полностью взят как подмножество rust’а.
Можно пока забить на развитие самого языка и потренировать ci&cd (сборка всех бинарей и публикацию релизов в гитхаб), а также автогенерацию документации языка.
Я действительно опирался на Rust, причем хочу взять от него ещё и систему владения.
Думаю, вы правы насчёт сборок, но, кажется, доки пока рано делать, потому что и механики, и синтаксис ещё плавают
Возможно, я выгорел, не знаю. Но мне обидно, что написав ещё пару строк в коде stage1 я тут же понимаю, что не могу писать дальше и выключаю комп.
Ещё чем-нибудь занимаетесь помимо программирования? В плане увлечений. Может нужно отвлечься?
Да вот ничем. Я 4 года занимаюсь программированием, но больше увлечений нет. Отвлечься действительно не помешает
Сходи в кино с красивой девочкой, получи заряд эндорфинов. Это очень мотивирует к свершениям
но больше увлечений нет.
Если нет никакой физкультуры, то имеет смысл добавить какой-либо вид ОФП. Это поможет и повысить работоспособность сейчас, и сохранит эту самую работоспособность на долгие годы вперед. Лет через 30 организм только спасибо скажет за привитые в молодости привычки к физическим упражнениям. А эти самые 30 лет, увы, пролетят очень и очень быстро.
Физкультура есть, не переживайте, у меня довольно хорошая форма)
База. Сидячая работа убивает спину быстрее, чем кажется
Очень много "я". Но для 16 лет, наверное, это нормально )
А вы не пробовали придумать, что-то новое, а не просто сделать похоже на rust. Например контексты (или нити) Обычный компилятор читает текст линейно. Но можно же расположить текст фрагментами вперемешку что бы можно было дополнять.Аналог partial но для всего. Или processing instruction в xml < ? pi _name … ? > как например < ? php … ? >
ctx1:
block1
ctx2:
block2
ctx1:
продолжаем block1
ctx3:
Или вместо скобок использовать имена скоупов, что бы модно было закрывать сразу все вложенные вмето {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} => {:name{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ }:name
Или запросы по кодовой базе на основе селекторов аля css. Для последующих преобразований.
Да и если в целом для больших кодовых баз гораздо важнее структурирование кода и поддержание гарантий интерфейсов для сохранения совместимости при эволюции кодовой базы, чем удобство отдельных конструкций.
Я просто привык к c/c++/rust и основываюсь на них. К тому же цель не сделать уникальный язык, а просто создать рабочий аналог, потому что мне это интересно. У меня уже были идеи попробовать сделать не просто язык, похожий на c++/rust, а что-то более интересное. Но пока что открыт Veo, поэтому я буду работать с ним
Повторить именно то, что тебе удобно и нравится - это правильный подход для начала. А потом со временем конечно можно будет совершенствовать.
https://habr.com/ru/articles/986218/#comment_29399200
с января 2026 - без перемен.
В реальности, конечно, компиляторы пишутся по-другому – через теорию формальных грамматик – но...
Чел прав.
Мой фанат?)
“Подписчик”. Жду когда сдуешься и или займёшься реальным делом, или удёшь в Яндекс-доставку разносить пиццу. Если хочешь мою оценку твоему коду (а я его качал и смотрел что тогда, что теперь) - мусорница. Плюс только в том, что пытаешься писать ЯП-ы, минусы, что как правильно отметили выше - не имея для этого теоретической базы, на “современном” С++ к тому же.
Через теорию формальных грамматик пишут формльные грамматики для ЯП.
Сам же ЯП и компилятор к нему столь же далёк от "формальой грамматики" как реальный самолёт, от платоновского "духа полёта".
Лексер и парсер - исчезающе малая часть компилятора.
Стандартные средства (Antlr, Bison, Yacc) - настолько плохо справляются даже с этой задачей, что в эту сторону лучше даже не смотреть.
Хорошо что Вы сказали, “в какую сторону не смотреть”, но плохо, что не сказали - в какую “смотреть”. Да и вообще глазеть по сторонам, скажу я вам, - персквернейшее занятие. Скажите прямо: “пользуйся вот этим и этим, оно работает, отвечаю своей честью”.
Не сказали в какую сторону смотреть.
В 2026 году вопрос "лексинга и парсинга" грамматики ЯП не является актуальным (выглядит так, что человеку наверху очень хотелось "зацепить" автора, ну оттоптался он на 16-летнем парне который молодец, но повторять за ним зачем?)
Если этот вопрос каким-то чудом попал на повестку дня, то средства в таком порядке от "типового парсера для PoC" до продукта выглядят примерно так:
Парсинг грамматики "из коробки": Antlr, Bison, Yacc (огромный класс на выбор). Возможно что-то есть под вашу конкретную задачу.
Библиотеки парсер-комбинаторов (почти всегда мой выбор, хвалить могу долго совмещают и плюсы и минусы "1" и "3"). Главный минус - новичок может словить экспоненциальную сложность - но в парсинге ЯП это почти исключено.
Самописные библиотеки под конкретный ЯП - если нужны содержательные сообщения об ошибках и хороший Error Recovery и Ad Hoc прокидывания состояний из парсера в лексер.
Любая реальная программа для компьютера является ни более ни менее, чем некоторой порождающей грамматикой. В случае компилятора это обстоятельство имеет большое практическое значение, так как представляет собой удобную для размышлений и позволяющую выполнять корректные действия абстракцию.
Преобразовывать грамматику в код компилятора теми или иными средствами или вовсе в уме – дело вкуса. Но без формальной грамматики вы просто запутаетесь в неоднозначных конструкциях, в лучшем случае – как Керниган и Ритчи в K&R C (а они были не самые глупые люди и не новички в программировании).
Когда же вы отрицаете формальные грамматики как явление – вы либо отрицаете всё программирование, как таковое, либо не вполне понимаете предмет (что в случае с ТФГ не позорно).
Ну а что касается автора, то он, вероятно, стал запутываться в своих вложенных if-ах, отчего и утратил вкус к модификации программы, но, к счастью, это в данном случае является просто следствием избранного им "наивного" подхода, так что не всё на самом деле в жизни так беспросветно.
Вопрос error recovery вряд ли имеет смысл поднимать для учебного проекта.
А ещё я разрабатываю его потому что мне интересны комплияторы и потому что мне нечего делать.
Если интересны компиляторы сами по себе, то невозможна ситуация, когда
Но в последнее время очень тяжело что-либо делать.
Значит, не сами компиляторы. Тогда разработка компилятора - не лучший выбор, а упорствование в нём - форменное безумие. Если нечего делать при наличии минимум десятка превосходных компиляторов, то от добавления ещё одного чего делать не появится.
То, что я им делюсь с вами, значит, что я просто хочу небольшого признания и критики (объективной и конструктивной).
Вы не в том положении, чтобы претендовать на право выделять объективное и отличать конструктивное.
мне 16
Ваш мозг ещё не закончил развитие, через 5 лет Вы можете оказаться совсем другим человеком. Если Вас всё ещё будет интересовать программирование - значит просто повезло. Иначе, вспоминаем якобы турецкую поговорку
Не важно как далеко ты ушёл по неверной дороге - возвращайся назад.
Найти область которая увлечёт и затянет - это естественное стремление, в случае успеха жизнь станет лучше а думать впредь можно будет меньше. В случае неудачи, главное - не упорствовать.
Есть мнение, что когда человек делает то, что ему нужно, то ему помогает вся Вселенная (или Бог или боги или...), а когда то, что не нужно - тогда, соответственно, всё то же самое мешает. Есть другое мнение - трудности даются человеку для того, чтобы он их преодалевал. Каким мнением руководствоваться в каждом конкретном случае - становится понятно само собой годам к 60-ти.
Отложите ваш компилятор на месяц, если нужно - запретите себе о нём думать. Через месяц многое прояснится, я Вам это гарантирую.
системный язык программирования
только оно "системного программирования", а не "системный язык".
Но в последнее время очень тяжело что-либо делать.
как-то так языки и пишут лет по 10-15 до первого стабильного релиза. Чего уж за сольные проекты говорить.
признания и критики
ассоциативность тернарников в языке крайне подозрительные судя по коду тестов. Преложил бы добавить ещё тесты с множественными тернарниками подряд. Ну и проверять вычесленные значения, а не только AST.
Возвращаясь к тяжкости написания компилятора - не вижу никаких примеров интероперабельности с другими языками. Прикрутил бы C ABI и недостающий функционал прилинковывал из тех же плюсов.
Поддержка вызова функций из си уже есть, причем давно. Иначе бы не работал кодогенератор на базе того же LLVM (в stage1 версии). Примеров действительно нет. Возможно забыл их добавить, обязательно в скором времени добавлю. Спасибо за комментарий!
только оно "системного программирования", а не "системный язык".
Словосочетание "systems programming language" вполне устоявшееся и означает ровно "язык [для] системного программирования", в русском языке, полагаю, допустимо сказать "системный язык программирования".
Я в 16 лет радовался, когда у меня калькулятор на дельфи компилировался без ошибок, а тут целый язык) Мое увожение!
классная у вас идея.
я хочу подмножество Forth from scratch вытащить в С синтаксис сохраняя подгрузку слов в форт и ответные функции
тоесть база Forth <-> даёт С и добавляем слова в форт, добавляем функцию в С, получается следующий язык С как выходец из Форта, но возможно так нельзя сделать )
Так бывает, когда изначально занимаешься какой то ерундой
Дам советы себе 16-летнему:
Все свои потребности решай программированием своего велосипеда или доработкой open-source.
Очередной язык изучай по “reference Х”, а НЕ курсы, Ютуб и т.д.
Простой CrackMe действительно меняет подход к программированию.
Стиль Паскаля: сначала объявляем все переменные, а потом используем = это основная оптимизация кода для помощи компилятору ;) (выделение памяти)
Но в последнее время очень тяжело что-либо делать. Буквально нет желания чем-либо заниматься. Возможно, я выгорел, не знаю.
Потому что вы выполнили свою - разобрались с вопросом. Дальше нет смысла его развивать. В вашем ЯП нет смысла, потому что нет идеи и нет опыта, который он мог бы воплотить. Таких языков, сделанных чисто ради потакания своему эго - миллион на каждую букву алфавита.
ЯП - это же всё-таки инструмент. Какую задачу вы решаете? Убийца с++? Операционная система реального времени в 64КБ? Промышленная автоматизация? Офисные задачи? Игры? Музыка? DSP? Что он может того, чего не может никто другой?
Круто! Продолжай в том же духе!
Шутка.
Ждём топик "линкер с первым размером груди".
Классно, очень!
А про выгорание - как уже говорили, нужно не класть все в одну корзину, стараться заниматься очень разными вещами и, если есть ощущение, с которым ты столкнулся - сделать паузу хотя бы на пару недель с полным переключением, удачи)!!

Компилятор в 16 лет