Последнее время я пишу компилятор самодельного языка. Сначала у него был синтаксис, где слова чередовались со знаками, знаки были односимвольные, контекст число левый. Но потом я понял, что не смогу его довести до самокомпиляции малыми шагами, если не сделаю совместимость с Си (через дефайны). Разворачиваться он будет, естественно, на ZX Spectrum.
Постепенно синтаксис сильно приблизился к Си, только все команды начинаются со слова (типа VAR, PROC, FUNC, LET, CALL), а у типизации префикс +. За счёт этого обеспечивается контекст на 1 символ вперёд и нет зарезервированных слов. И не нужны точки с запятой.
Хотелось бы минимальное время самокомпиляции и незначительный объём занимаемой памяти.
Пока не уверен, как строить проект: как в Си (с заголовками и линкером), через include в главном модуле или через проектный файл (тут варианты: компилировать как единый текст или пофайлово, но тогда проблема в линковке констант).
Что плохо в Си, по вашему мнению, и что стоит добавить (малыми силами)? И в какую сторону стоит мутировать после достижения самокомпиляции?
Ещё особенности:
строгая типизация (никаких неявных преобразований), char!=byte, указатель!=массив, есть система модулей, доступ к идентификаторам явно описывает место в дереве (в Си - любое место выше, что медленно).
идеи по синтаксису можно взять из Go для быстрой компиляции.
Да, вижу общее (кстати, call и let я сумел убрать без потери скорости). Но остальное несовместимо с Си. И сишный синтаксис for не может компилироваться быстро - у него два тела, из которых первое может выполняться после второго. Я не стал реализовывать этот оператор.
Проект строится из отдельно компилируемых модулей, каждый в начале описывает используемые внешние символы.
Сейчас мой компилятор уже умеет самокомпилироваться и отлажен таким образом. Но линкера нет, на выходе просто бинарник (склеивает всё ассемблер, так решена и проблема констант). И работает на реале медленнее, чем хотелось бы. Видимо, надо генерить код мимо ассемблера, нужен линкер.
Первый релиз программы на нём (сам язык пока рассылаю только заинтересованным): http://www.pouet.net/prod.php?which=69770
А цель какая? Просто интерес и самовыражение?
Сначала чисто идеи, потом по работе стояла задача, но теперь вроде не стоит. А полноценная нативная среда разработки для Спектрума всегда была нужна.
А игры для ZX на нём будут?
Вполне возможно. У меня есть пара недописанных движков.
Язык доступный к компьютеру, интернету очень нужен для создании и развитии искусственного интеллекта.
Надеюсь, искусственный интеллект когда-нибудь поймёт предыдущий пост.
Пока на нём даже естественный спотыкается.
Кстати, если кто не читает ACNews: NedoLang уже работает на Z80 (самокомпиляция) и на ARM Thumb1 (проверено на довольно большом куске кода, который уже проверен на Z80). Качайте с моего сайта :)
Вот одна дема на этом языке (её исходники есть в комплекте): http://www.pouet.net/prod.php?which=69770
Сейчас Hippiman начал писать игру.
Цитата: Alone Coder от сентября 2, 2017, 21:13
её исходники есть в комплекте
А посмотреть их где-нибудь можно?
http://alonecoder.nedopc.com/zx/nedolang170829.rar