Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Новый компьютерный язык

Автор Alone Coder, февраля 12, 2017, 19:30

0 Пользователи и 1 гость просматривают эту тему.

Alone Coder

Последнее время я пишу компилятор самодельного языка. Сначала у него был синтаксис, где слова чередовались со знаками, знаки были односимвольные, контекст число левый. Но потом я понял, что не смогу его довести до самокомпиляции малыми шагами, если не сделаю совместимость с Си (через дефайны). Разворачиваться он будет, естественно, на ZX Spectrum.

Постепенно синтаксис сильно приблизился к Си, только все команды начинаются со слова (типа VAR, PROC, FUNC, LET, CALL), а у типизации префикс +. За счёт этого обеспечивается контекст на 1 символ вперёд и нет зарезервированных слов. И не нужны точки с запятой.

Хотелось бы минимальное время самокомпиляции и незначительный объём занимаемой памяти.

Пока не уверен, как строить проект: как в Си (с заголовками и линкером), через include в главном модуле или через проектный файл (тут варианты: компилировать как единый текст или пофайлово, но тогда проблема в линковке констант).

Что плохо в Си, по вашему мнению, и что стоит добавить (малыми силами)? И в какую сторону стоит мутировать после достижения самокомпиляции?

Alone Coder

Ещё особенности:

строгая типизация (никаких неявных преобразований), char!=byte, указатель!=массив, есть система модулей, доступ к идентификаторам явно описывает место в дереве (в Си - любое место выше, что медленно).

basta

идеи по синтаксису можно взять из Go для быстрой компиляции.

Alone Coder

Да, вижу общее (кстати, call и let я сумел убрать без потери скорости). Но остальное несовместимо с Си. И сишный синтаксис for не может компилироваться быстро - у него два тела, из которых первое может выполняться после второго. Я не стал реализовывать этот оператор.

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

Сейчас мой компилятор уже умеет самокомпилироваться и отлажен таким образом. Но линкера нет, на выходе просто бинарник (склеивает всё ассемблер, так решена и проблема констант). И работает на реале медленнее, чем хотелось бы. Видимо, надо генерить код мимо ассемблера, нужен линкер.

Первый релиз программы на нём (сам язык пока рассылаю только заинтересованным): http://www.pouet.net/prod.php?which=69770

kemerover


Alone Coder

Сначала чисто идеи, потом по работе стояла задача, но теперь вроде не стоит. А полноценная нативная среда разработки для Спектрума всегда была нужна.

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Alone Coder

Вполне возможно. У меня есть пара недописанных движков.

maqomed1

Язык доступный к компьютеру, интернету очень нужен для создании и развитии искусственного интеллекта.

Bhudh

Надеюсь, искусственный интеллект когда-нибудь поймёт предыдущий пост.
Пока на нём даже естественный спотыкается.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Alone Coder

Кстати, если кто не читает ACNews: NedoLang уже работает на Z80 (самокомпиляция) и на ARM Thumb1 (проверено на довольно большом куске кода, который уже проверен на Z80). Качайте с моего сайта :)

Alone Coder

Вот одна дема на этом языке (её исходники есть в комплекте): http://www.pouet.net/prod.php?which=69770

Сейчас Hippiman начал писать игру.

Hellerick



Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр