Re[5]: Здравствуйте товарищи разработчики R#.
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.11.04 16:55
Оценка:
Здравствуйте, Loislo, Вы писали:

L>Рисует в смысле, берет то что построено парсером и отображает его 1 в 1, т.е. это визуальное представление работы парсера в чистом виде.


А разве этот адд-ын что-то отображает?

L>Надумалось вот еще что:


L>сейчас так

L>
L>compile-unit {
L>  Imports{}
L>  namespaces {
L>    global-namespace {...}
L>    user-namespace1 {...}
L>    user-namespace2 {...}
L>  }
L>}
L>


L>подумалось что global покрывает весь файл вместе с таблицей импорта

L>при этом import вроде вполне может быть внутри любого неймспейса (стандарт C# еще не читал, попробовал, компайлер не ругается),

На самом деле все не так просто (однозначно). Вот граматика из спецификации:
compilation-unit:
    extern-alias-directives-opt 
    using-directives-opt 
    global-attributes-opt
    namespace-member-declarations-opt


Как видишь, по сути глобального пространства имен даже не существует. using и глобальные атрибуты как бы находятся в compilation-unit-е. И это не с проста, ведь глобальные атрибуты могут быть только тут. Вот, для сравнения, описание тела пространства имен:
namespace-body:
{
    extern-alias-directives-opt 
    using-directives-opt 
    namespace-member-declarations-opt
}


Как видишь, структура похожа, но не идентична. В принципе было бы правильно вообще избавиться от глобального пространства имен, но уж больно удобно им пользоваться.

L>тогда выглядеть это будет примерно так


L>
L>compile-unit {
L>  global-namespace {
L>    Imports{}
L>    namespaces {
L>      user-namespace1 {...}
L>      user-namespace2 {...}
L>    }
L>  }
L>}
L>


L>таким образом global-namespace фактически совпадает со всем compile-unit и

L>отличается от него только тем что у того есть имя файла.

Нет, главное отличие — это наличие глобальных атрибутов. В принципе можно было бы создать базовый класс (RNamespaceBase) от которого породить RNamespace и RCompileUnit. Тогда у RNamespace можно было бы добавить имя, а у RCompileUnit список глобальных атрибутов. Тогда можно было бы наиболее полно применять полиморфизм.

Видимо так и нужно будет сделать. Но насколько это актуально? По мне так приоритетность у данной задачи не велика.

L>Про разрешение имен.

L>Это всякий геморой связаный с разрешением ссылок на ф-ии, Argument Depended Lookup и т.д?

Что-то вроде. Одним словом — это разрешение всех ссылок. Например, в коде программы есть ссылки на переменные. Сейчас — это неразрешенные ссылки, а надо сделать так чтобы имея объявление переменной можно было бы быстро найти все ее вхождения. И наоборот, имея некоторое вхождение узнать ее объявление, типа и т.п. Тоже самое с методами, классами и т.п.

L>ЗЫ: у global-namespace тоже имя есть так что не очень понятно чем оно от compile-unit отличается.


Нет у него имени. Это побочные эффекты. В принципе я выше описал как будет правильнее. Можно в принципе поправить.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.