Re[5]: [n2] Первое задание - Чтение метаданных
От: _Eter_ http://mnazarov.ru
Дата: 04.01.11 09:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, как? Что-нибудь получается? Если есть вопросы, то лучше их задавать заранее


Вопросы относительно проекта Core:

  1. Класс NMemberInfo абстрактный, но не содержит не то что абстрактных, а даже виртуальных методов. Все-таки его свойства и методы должны быть абстрактными?
  2. Возможно в проекте Core должны быть также соответствующие абстрактные классы: NPropertyInfo, NFieldInfo, NEventInfo, NMethodInfo ?



в файле IMember.n опечатка: должно быть CustomAttributes вместо CastomAttributes

PS. Я могу сделать эти изменения в основной ветке, или в своем клоне
[
Re[5]: [n2] Первое задание - Чтение метаданных
От: _Eter_ http://mnazarov.ru
Дата: 04.01.11 09:24
Оценка:
На ревизии 5f2b02224b улетает ncc.exe
Re[6]: [n2] Первое задание - Чтение метаданных
От: _Eter_ http://mnazarov.ru
Дата: 04.01.11 09:32
Оценка:
Здравствуйте, _Eter_, Вы писали:

_E_>На ревизии 5f2b02224b улетает ncc.exe


Причина оказалась в том что при установке Nemerle RC я (и инсталлятор) не удалил Nemerle beta2
Re[8]: [n2] Первое задание - Чтение метаданных
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.01.11 11:39
Оценка:
Здравствуйте, _Eter_, Вы писали:

_E_>Я имел ввиду нужно ли в названии проекта отразить, что это реализация чтения метаданных на основе базовой библиотеки cci?


А, да... это можно. Можно назвать ее MetadataReader.CCI.

_E_>Ранее вроде бы говорилось, что предполагается реализовать чтение метаданных на основе разных базовых библиотек, одна из которых cci. Будут ли все эти реализации находиться в одной сборке, или для каждой все-таки нужна своя сборка.


Конечно логично было бы чтобы они находились в отдельных сборках.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [n2] Первое задание - Чтение метаданных
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.01.11 11:43
Оценка:
Здравствуйте, _Eter_, Вы писали:

_E_>На ревизии 5f2b02224b улетает ncc.exe


Что значит "улетает"?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [n2] Первое задание - Чтение метаданных
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.01.11 11:53
Оценка:
Здравствуйте, _Eter_, Вы писали:

_E_>Вопросы относительно проекта Core:


_E_> * Класс NMemberInfo абстрактный, но не содержит не то что абстрактных, а даже виртуальных методов. Все-таки его свойства и методы должны быть абстрактными?


Делай пока виртуальными. В принципе большую их часть можно реализовать прямо в этом классе. В принципе класс не очень то и нужен. Он ведь только интерфейс реализует.

_E_> * Возможно в проекте Core должны быть также соответствующие абстрактные классы: NPropertyInfo, NFieldInfo, NEventInfo, NMethodInfo?


Да проще, наверно, реализовывать интерфейсы напрямую. Хотя, если в реализациях будет общий код, то можно поступить и так.

_E_>в файле IMember.n опечатка: должно быть CustomAttributes вместо CastomAttributes


Сейчас поправим.

_E_>PS. Я могу сделать эти изменения в основной ветке, или в своем клоне


CastomAttributes — я уже поправил. Так что просто обновись. Остальное меняй как тебе надо. Если что потом отрефакторим.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [n2] Чтение метаданных - property и event
От: para  
Дата: 04.01.11 13:41
Оценка:
может быть стоит property и event, которые являются надстройками над .Net,
реализовать как "стандартный плагин к компилятору"

а заодно это поможет отработать элементы расширяемости...
Re: [n2] Первое задание - Чтение метаданных
От: Jack128  
Дата: 05.01.11 13:32
Оценка:
Здравствуйте, VladD2, Вы писали:

каков смысл типа Nemerle2.Compiler.Subst ?

и на счет свойства NTypeInfo.AttributeTargets , я так понимаю — это свойство имеет смысл только для наследников System.Attribute ?
Re[2]: [n2] Первое задание - Чтение метаданных
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.01.11 18:04
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Здравствуйте, VladD2, Вы писали:


J>каков смысл типа Nemerle2.Compiler.Subst?


Это тип используемый для подстановки параметров типов. Он позволяет заменить одни параметры типов другими. Пример его применения можно найти в комите 9508 (файл Typer.n). Там Subst используется для замены параметров типа алиаса (создаваемых директивой "type") на явно заданный список типов.

J>и на счет свойства NTypeInfo.AttributeTargets , я так понимаю — это свойство имеет смысл только для наследников System.Attribute ?


По всей видимости — да.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [n2] Первое задание
От: _Eter_ http://mnazarov.ru
Дата: 05.01.11 18:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Так же прошу всех кто хочет работать над этой фичей скоординировать работу друг с другом.

VD>Лучше всего было бы организовать общественный чат в Скайпе где и обсуждать все возникающие проблемы и идеи.

Как бы скоординировать работу? Мне сейчас не очень понятно, как работать: начал я что-то делать в своем клоне, а два других человека начали делать в своих, какой смысл нам делать одну и ту же работу?
Re[7]: [n2] Первое задание - Чтение метаданных
От: _Eter_ http://mnazarov.ru
Дата: 05.01.11 18:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _Eter_, Вы писали:


_E_>>На ревизии 5f2b02224b улетает ncc.exe


VD>Что значит "улетает"?


Происходит необработанное исключение. Причина видимо была в том, что у меня получились установлены две версии Nemerle: бета и RC. После того как я их обе снес и заново поставил только RC все заработало
Re[2]: [n2] Первое задание - Чтение метаданных
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.01.11 22:31
Оценка:
Здравствуйте, Jack128, Вы писали:

Вы с _Eter_ (mikhail.a.nazaro) оба решили работать над CCI-ой реализацией чтения метаданных.

Чтобы не делать одну и ту же работу два раза, и чтобы быстрее разобраться в CCI предлагаю объединить ваши усилия.
Отпишись в этой ветке
Автор: _Eter_
Дата: 05.01.11
.

Оптимально было бы связаться в одно и то же время по скайпу и обсудить детали. Просьба отписать в указанной ветке удобно ли обсуждать по скайпу и если да, то во сколько тебе будет удобнее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [n2] Первое задание
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.01.11 22:34
Оценка:
Здравствуйте, _Eter_, Вы писали:

Для начала личная просьба, занести в гугль-эканут информацию о рсдн-овском экаунте и наоборот. А то приходится искать корреляцию через поиск в почте. Тоже самое касается скайповского экаунта.

_E_>Как бы скоординировать работу?


Да, конечно.

_E_>Мне сейчас не очень понятно, как работать: начал я что-то делать в своем клоне, а два других человека начали делать в своих, какой смысл нам делать одну и ту же работу?


Как я понял реально CCI-ем занялись двое, ты и Jack128. Лучше всего будет пересечься по скайпу и обсудить детали. Если через скайп сложно, то можно и здесь все обсудить. Я уже отписал
Автор: VladD2
Дата: 06.01.11
Jack128. Надеюсь, что он откликнется здесь в ближайшее время.

ЗЫ

Просьба отписать можешь ли ты общаться в скайпе и если да, то в какое время предпочтительнее общаться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [n2] Первое задание
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.01.11 22:47
Оценка:
Здравствуйте, _Eter_, Вы писали:

_E_>Как бы скоординировать работу? Мне сейчас не очень понятно, как работать: начал я что-то делать в своем клоне, а два других человека начали делать в своих, какой смысл нам делать одну и ту же работу?


Я потихонечку начну смотреть что вы оба уже успели сделать и выдавать отдельные замечания.

Первое замечание каталог ExternalDependencies должен быть один и находиться в корне проекта. Лучше всего разместить библиотеки в подкаталоге /ExternalDependences/CCIMetadata как это сделал Jack128.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [n2] Первое задание - Чтение метаданных
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.11 01:44
Оценка:
Здравствуйте, Jack128, Вы писали:

J>каков смысл типа Nemerle2.Compiler.Subst ?

J>и на счет свойства NTypeInfo.AttributeTargets , я так понимаю — это свойство имеет смысл только для наследников System.Attribute ?

Посмотрел твой код. Есть несколько замечаний.
1. Классы реализации нужно поместить в отдельный проект (а не держать их в Core).

2. В тестах (да и вообще нигде) нельзя использовать полные пути. В качестве тестовых сборок используй Nemerle*.dll. Путь к ним получай программно, через переменные среды расширения. Если орпеделена переменная "%Nemerle%", то бери путь в ней, если нет, то используй "%ProgramFiles%\Nemerle". На всякий случай.... их резолв делается с помощью System.Environment.GetEnvironmentVariable().

3. В проекте периодически попадаются табуляции. Это не хорошо. В других местах отбивки делаются четырьмя (4) пробелами. Надо использовать два (2).

4. Используются неверные переносы операторов. Бинарные операторы переносятся на следующую строку. При указании типов надо ставить пробел как перед двоеточием, так и после него, т.е. не так "_host: SomeType", а так "_host : SomeType". В общем, внимательно прочти правила форматирвоания.

5. Значения лучше вычислять не в свойствах, а в конструкторах. Вычисляем значения свойств в свойствах, только если они возвращают большие объемы данных загрузку которых имеет смысл отсрочить. Обычно такие свойства имеют тип Seq[_]. Так значение свойства IsNumeric лучше вычислить в конструкторе (или при первом обращении и запомнить в поле).

6. По поводу свойства IReferencedAssembly.Types:
    public Types : Seq[NTypeInfo]
    {
      get
      {
        def types = _assembly.GetAllTypes();
        types.Map(CciNTypeInfo(_));
      }
    }

6.2. Полученный список нужно кэшировать, а не создавать при каждом запросе значения свойства. Это во-первых, расточительно, и во-вторых, будет создавать множество экземпляров оберток (CciNTypeInfo) для одного и того же типа, а этого лучше избежать. Для материализации списков большого размера лучше всего использовать privat-копии массивов. Ссылки на такие массивы ни в коем случае не отдавать наружу. Вместо этого нужно возвращать отдельный перечислитель (Seq).
6.2. Хот в данном случае список все равно нужно материализовать, но в общем случае, если свойство возвращает Seq, вычисление его значения нужно стараться отложить. Стало быть здесь нужно примерять не Map(), а MapLazy() или линковский Select(). Еще раз подчеркну, что в данном случае список все равно нужно материализовать.
6.3. Если не ошибаюсь, метод GetAllTypes() возвращает все типы. В том числе и вложенные. Нам же нужно возвращать только типы объявленные в пространствах имен (т.е. типы верхнего уровня). Вложенные типы должны быть доступны через соответствующие свойства NTypeInfo. Возможно потом мы добавим дополнительное свойство выдающее все типы. Но Types должен возвращать только верхнеуровневые.

Ну, и общее замечание по CCI. Работать с их интерфейсами напрямую обычно очень сложно и неудобно. Для облегчении жизни авторы CCI создали ряд классов-помощников. Например, TypeHelper для упрощения работы с типами. Вот список хэлперов выявленный поиском по следующему регуляроному выражению "class :iHelper":
* TypeHelper
* MemberHelper
* AttributeHelper
* ClrHelper
* UnitHelper
* MutableModelHelper
--------- нижеприведенные, видимо, к делу не относятся ---------
* HashHelper
* IteratorHelper
* ObjectModelHelper

Их имена говорят сами за себя. Просто открой солюшен Metadata.sln и посмотри описания их методов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [n2] Первое задание
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.11 02:12
Оценка:
Здравствуйте, VladD2, Вы писали:

Вот здесь
Автор: VladD2
Дата: 06.01.11
я описал замечания к проекту Jack128. Прочти, плиз, чтобы не повторять ошибок.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [n2] Первое задание - Чтение метаданных
От: IT Россия linq2db.com
Дата: 06.01.11 02:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>3. В проекте периодически попадаются табуляции. Это не хорошо. В других местах отбивки делаются четырьмя (4) пробелами. Надо использовать два (2).


Может в 2011-м году проще купить широкоформатный монитор?
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: [n2] Первое задание - Чтение метаданных
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.11 04:25
Оценка:
Здравствуйте, IT, Вы писали:

VD>>3. В проекте периодически попадаются табуляции. Это не хорошо. В других местах отбивки делаются четырьмя (4) пробелами. Надо использовать два (2).


IT> Может в 2011-м году проще купить широкоформатный монитор?


Ты сегодня не с той ноги встал?

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

ЗЫ

Что до мониторов, то с ноутбуком монитор таскать не будешь. Да и монитор тут не причем. Немерл располагает к написанию кода "в строку". Провоцировать бессмысленное удлинение строк нет смысла. Раз выбрали проблемы, то их будет ровно два.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [n2] Первое задание - Чтение метаданных
От: IT Россия linq2db.com
Дата: 06.01.11 04:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Есть правила форматирования кода и их нужно выполнять не смотря на вероисповедание, размер монитора и прочих прелестей. Большинство высказалось за 2 пробела, значит так тому и быть.


А где на них можно посмотреть?

VD>Что до мониторов, то с ноутбуком монитор таскать не будешь. Да и монитор тут не причем. Немерл располагает к написанию кода "в строку". Провоцировать бессмысленное удлинение строк нет смысла. Раз выбрали проблемы, то их будет ровно два.


А четыре обсуждали?
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: [n2] Первое задание - Чтение метаданных
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.11 04:41
Оценка:
Здравствуйте, IT, Вы писали:

VD>>Есть правила форматирования кода и их нужно выполнять не смотря на вероисповедание, размер монитора и прочих прелестей. Большинство высказалось за 2 пробела, значит так тому и быть.


IT>А где на них можно посмотреть?


http://rsdn.ru/forum/nemerle/4094711.1.aspx
Автор: VladD2
Дата: 26.12.10


IT>А четыре обсуждали?


http://rsdn.ru/forum/nemerle/4094793.1.aspx
Автор: WolfHound
Дата: 27.12.10


Я там плюсик не поставил, так как мне по фигу 2 пробела или таб. Но если речь идет о пробелах, то мой выбор так же 2 пробела.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.