[Nitra] План работ на ближайшее время
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.17 14:08
Оценка:
Я вот набросал план того, что нужно сделать чтобы зарелизить Nitra-у и начать заниматься языками.

Подчеркну, что работать над языками (Nemerle 2.x & Cx#) можно уже сейчас. Но я физически не могу разорваться. Если есть желающие, я могу им объяснить, что надо делать и помогать это делать. Бояться, что не справитесь не нужно. Все что нужно объясним.

План на самое ближайшее время:
1. Разобраться с этим extend syntax и маппингом для него (там выявились ошибки).
2. Разобраться с загрузкой символов (новых) из внешних сборок.
3. Допилить типизацию для тех мест, где она не доделана и поправить ее косяки.

После этого у нас, уже будет какой-никакой, а интеллисенс.

После этого можно будет зарелизить первую версию Nitra.

Планы на более далекую перспективу:

  Исправить идеологическую ошибку с деревом символов
Надо еще исправить косяк, что я заложил в работу с символами (т.е. в проекте DotNetLang.nproj). Сейчас получается так, что символы не могут браться из другого проекта того же солюшена. И приходится их грузить для каждого проекта из референс-сборок. Я их при создании леплю в дерево типов проекта, а это не правильно. Они должны иметь локальные деревья для каждой сборки (проекта). И символы из сборки/проекта надо мапить в разные проекты. Таким образом, дерево, используемое для типизации, должно быть агрегатом деревьев отдельных сборок. А типы из текущей (типизируемой) сборки должны не отличаться от тех, что из сборок загружены.

Если это сделать, то решится сразу много проблем:
1. Мы сможем кэшировать символы и переиспользовать их в проектах одного солюшена.
2. Мы сможем не грузить символы из референс-сборок, если у нас имеет место прожект-реферес. Правда, надо еще с видимостью повозиться.


  Исправить косяк с идеологией биндинга и резолва
Следующий косяк у нас с идеологией биндинга и резолва. Я поглядел то, как делают в Шарпе (Розлине) и понял, что нам надо делать так же. Сейчас у нас сокрытие символов работает так, что если найдется неподходящий символ (например, приватный из другого скопа), то мы его или полностью проигнорируем (отфильтруем) или выберем его, и прекратим поиск (и выдадим не верное сообщение в результате).

В Розлине поступают так. Они при биндинге, всегда возвращают амбигус-список и разбираются с ним уже при резолве приехавших результатов. Если у них попадается приватный символ и публичный, они просто отбрасывают публичный и все ОК. Если же у них не находится публичного, они сообщают ошибку о том, что найденный символ имеет неподходящий модификатор видимости.


  Продумать и переделать взаимодействие резолва и автодополнения слов (complit word)
Еще у нас есть серьезная недоработка с резолвом и автодополеннием идентификторов. Сейчас у нас алгоритм резолва ничего не знает об автодополнении. В результате в список автодополнения уходит все что сбиндилось. А это может быть очень много.

Надо как-то научить резолв работать не только с точными совпаденями имен, но и с получаемыми для автодополенения (фильтуемыми по комплит-префиксу).

Тут, вообще, надо подумать над тем как это все дело реализовать.


  Перевод генерации кода со старых на новые символы
Следующим этапом должен стать перевод генерации кода со старых на новые символы. Можно сказать, следующий уровень бутстрапинга. Заодно ускорим время компиляции (так как не будет две типизации параллельно работать) и упростим дальнейшее развитие (новая типизация намного декларативнее).


  Реализация Nemerle 2
Далее нужно делать Nemerle 2. Для начала достаточно воспризветси сабсет того, что используется в Nitra.


  Замена кода Nitra написанного на Nemerle 1.x на код написанный на Nemerle 2.x
Далее надо бутстрапить Nitra на Nemerle 2. При этом придется переписывать макросы и кодогенерацию. Тут объем работ будет большим. Но оно того стоит, так как дальше мы сможем избавиться от Nemerle 1, перенести Nitra на другую платформу и т.п.


После этого можно будет выпустить второй релиз Nitra.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 21.01.2017 14:52 VladD2 . Предыдущая версия .
Re: [OFF] Backend
От: fddima  
Дата: 26.01.17 01:09
Оценка:
Здравствуйте, VladD2, Вы писали:

В плане — ты упомянул бэкэнд. Это в принципе наверное то, что ты имел ввиду в этой ветке
Автор: fddima
Дата: 19.01.17
, когда я говорил, что как жаль, что нет возможности делать нэйтив.

Я прежде всего хотел бы понять твои личные (они будут ближе всего к правде) — сколько тут работы.

Но тут надо прежде всего понять — что такое есть этот самый бэкэнд и что он даст. Это вообще ключевой момент.


-- всё что ниже — основано на моих представлениях и может содержать логические ошибки --

С моей колокольни (в моих представлениях) — я понимаю, что нитра — освободит от тучи работы, и позволит сосредоточится на плюшках прям на следующей неделе! Я отлично это понимаю. Т.е. для ресерча — это то, что надо, и тут реально остальные альтернативы... скудны. С другой стороны — я понимаю, что, если задачу поставить так: "эта хрень должна быть кросс-компилирована чистым C компилятором (gcc)" — то тут я вижу фэйл. При этом — ни для нитры, ни для языка самого в себе — это не являются проблемами по отдельности. Т.е. скорее смущает то, что нитра — представляет нехилый агрегат, который вдобавок — не так уж легко и переносим. Опять же — оно для дотнета написано с содержанием в уме GC. Прикручивать сторонний — это не проблема. Проблема в том, что, кому-то легче от этого отказаться, чем пытаться вообще в это всё вникнуть.

Опять же, я проясню момент: нитра — и так ясно, отличный инструмент, и я _лично_ не испытываю неудобств с тем, что бы "языковой бэкэнд" работал на дотнете/mono/дотнеткоре/whatever и генерировал то, что он хочет. Тем не менее просто, ммм... разработчиков GP-языков с дотнетом за спиной — привлечь невозможно. Вы не пересадите с питоновских скриптов на что-то другое, — а чего уже тут говорить.

Поэтому — в целом — понятно — или ехать или плюшки. Возвращаюсь к изначальным вопросам — всё таки — что даёт "заложенный изначально" бэкэнд, может ли он быть полностью нативным? Как много кода нужно? Как насчет GC?
Т.е.:
а) мы генерим нативный парсер
б) мы генерим всю нитру нативную
в) ...
?!

С ходу — неясно.

PS: Я так предполгаю, что идея в том, что бы нитра компилировала сама себя нативно. Если так и задатки к этому есть — похвально. Но — тут пожелаю только удачи. С этим в адекватное время не справится и команда профессионалов. Одиночки по вечерам — и подавно. Кроме того, интерес не в том что бы сделать компилятор нитры. Более того, N и N2 и все его последователи на мой _личный_ вкус — неправильные. Просто глупо заниматься разработкой одного, вместо того, что бы заниматься разрабткой того, что хочется. Опять же — для ресерча — эта нативность вообще нафиг не нужна. Поэтому хочется просто прояснить. Тут нет фатализма — как раз наоброт, всему своё место.
Отредактировано 26.01.2017 1:09 Mystic Artifact . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.