Re[6]: [PDC, Don Syme] Type providers
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 05.11.10 14:36
Оценка:
_>В случае Nemerle — я могу навести мыша на макрос и посмотреть в тултипе во что он переписывается, могу подключиться отладчиком к макросу в момент его применения и посмотреть что же он делает с AST и почему делает именно это, могу наконец добавить логгирование в код макроса и получить дамп по всем применениям этого макроса.

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

в данном случае, есть следующие автоматически решаемые задачи, которые требуют решения обратной задачи:
1. выведение типов
2. подсветка синтаксиса
3. intellisense
4. определение области видимости
5. определение что переменные не используются без своих объявления
и т.д.

если using — макрос, то как автоматически решать все вышеприведенные задачи?

задачи 1, 4, 5 — можно пробовать решать через раскрытие макроса, и анализ получившегося кода,
но если случилась ошибка, то непонятно как привязать ошибку к месту в исходном коде.
Re[6]: [PDC, Don Syme] Type providers
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 05.11.10 14:38
Оценка:
WH>Дело в том что "обратную задачу" ни кто ни когда не решает.
WH>Всегда решают только "прямую".

в немерле может и не решают, а в других системах решают.
Re[7]: [PDC, Don Syme] Type providers
От: hi_octane Беларусь  
Дата: 05.11.10 14:49
Оценка:
DG>если using — макрос, то как автоматически решать все вышеприведенные задачи?
Всё уже давно решено. Автокомплит подхватывает, интеллисенс подсказывает, синтаксис подсвечивается, типы выводятся лучше чем в C#, области видимости определяются корректно. Если действительно хочешь знать как — посмотри на сорцы Nemerle. Пруф например здесь
Автор: WolfHound
Дата: 31.10.10
, читать в окрестности слов "Он сам заработал".
Re[7]: [PDC, Don Syme] Type providers
От: WolfHound  
Дата: 05.11.10 15:00
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>задачи 1, 4, 5 — можно пробовать решать через раскрытие макроса, и анализ получившегося кода,

DG>но если случилась ошибка, то непонятно как привязать ошибку к месту в исходном коде.
Вот только у немерла работает и подсветка синтаксиса и автокомплит и навигация и отладка и сообщения об ошибках.
И это при том что код чуть меньше чем польностью состоит из макросов.
Если не веришь можешь поставить интеграцию и посмотреть.

А во всем виноват класс
  public class Located
  {
    public mutable loc : Location;

    public this ()
    {
      loc = LocationStack.Top();
    }
    public this (loc : Location)
    {
      this.loc = loc;
    }
    public IsGenerated : bool { get { loc.IsGenerated } }

    public Location : Location
    {
      get { loc }
      set { loc = value; }
    }
  }

От которого наследуется AST
  public variant PExpr : Located

Location содержит номер файла, позицию начала и позицию конца.

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

Короче заканчивай искать фатальные недостатки в том о чем ты не знаешь ровным счетом ничего.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: [PDC, Don Syme] Type providers
От: WolfHound  
Дата: 05.11.10 15:00
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>в немерле может и не решают, а в других системах решают.

Ссылки на статьи с описанием решения "обратной задачи" показать можешь?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: [PDC, Don Syme] Type providers
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.11.10 13:43
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Дон прямо сейчас рассказывает о type providers.

Кэр>http://bit.ly/bfWDkA

Да, забавно. Эдакий интером с динамичским миром для статически-типизированных языков. Намного лучше чем денамики в 4-ом Шарпе. Еще бы не затягивать презентацию на столько времени, а говорить по сути... плюс по больше информации и было бы совсем здорово.

Кэр>Выглядит очень круто. Никакого генеренного кода — все типы являются виртуальными и получаются на лету, пока пишется код. При этом есть поддержка сторогой типизации и интеллисенс(!).


Это явные домыслы. Генерация кода есть и делается она компилятором во время компиляции. Типы тоже получаются не налету, а в во время компиляции. Как правильно заметил вольфхаунд, такие вещи лучше в виде макросов реализовывать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: [PDC, Don Syme] Type providers
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.11.10 14:25
Оценка:
Здравствуйте, mrTwister, Вы писали:

H>>Ты видел в стандартной библиотеке реализацию DependencyProperty? Или автоматическое INotifyPropertyChange?

H>>Или автоматический маппинг объектов?
T>Нет, и что?

А то, что это как раз то что невозможно положить в обычную библиотеку потому, но слишком специфично чтобы встраивать в язык. По этому ты никогда не увидишь средств автоматизирующих DependencyProperty и INotifyPropertyChange. Меж тем в виде макроса эти проблемы автоматизируются на раз. Вот здесь можно найти пример автоматизации DependencyProperty.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [PDC, Don Syme] Type providers
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.11.10 14:32
Оценка:
Здравствуйте, FR, Вы писали:

WH>>Я двумя руками за то чтобы на систему типов переложить все что можно но: Попробуй на досуге из системы типов приконектиться к БД или файлик прочитать. Или как в этой теме поднять произвольный ITypeProvider и по нему нагенерировать типы и код для доступа к внешним источникам данных.


FR>Чтобы файлик прочитать и т. п. нужна только нормальная поддержка compile-time вычислений (как например в D), а не мощная система типов.


Он об этом и говорил. Только мощная как в Немреле, а не как в Ди. Потому как в Ди пока что жалкое подобие.

ЗЫ

Вообще, конечно надо реализовать немерл в нэйтив виде и закрыть тем самым тему Ди .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: [PDC, Don Syme] Type providers
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.11.10 14:35
Оценка:
Здравствуйте, FR, Вы писали:

FR>Да ни чем вроде не макросы, синтаксис и семантику не меняют, только тихо мирно считают во время компиляции.


Врешь. Если они ничего не меняют, то и смысла в них нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [PDC, Don Syme] Type providers
От: _FRED_ Черногория
Дата: 06.11.10 16:21
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>А во всем виноват класс

WH>  public class Located
WH>  {
WH>    public mutable loc : Location;

WH>    public this ()
WH>    {
WH>      loc = LocationStack.Top();
WH>    }
WH>    public this (loc : Location)
WH>    {
WH>      this.loc = loc;
WH>    }
WH>    public IsGenerated : bool { get { loc.IsGenerated } }

WH>    public Location : Location
WH>    {
WH>      get { loc }
WH>      set { loc = value; }
WH>    }
WH>  }

WH>От которого наследуется AST

WH>Короче заканчивай искать фатальные недостатки в том о чем ты не знаешь ровным счетом ничего.


Мне это только кажется, или во главе всего, получается, изменяемый тип, который, в дефолтовом конструкторе использует некое изменяемое глобальное состояние

Кстати, как на счёт слов о том, что свойства-акессоры к открытым полям не есть гуд? А что же мы видим здесь? Открытое изменяемое поле
Help will always be given at Hogwarts to those who ask for it.
Re[9]: [PDC, Don Syme] Type providers
От: WolfHound  
Дата: 06.11.10 16:45
Оценка: 26 (1)
Здравствуйте, _FRED_, Вы писали:

_FR>Мне это только кажется, или во главе всего, получается, изменяемый тип,

От этого никуда не деться ибо в режиме интелисенса при редактировании нужно корректировать локешены.

_FR>который, в дефолтовом конструкторе использует некое изменяемое глобальное состояние

Изначально компилятор писали студенты.
Там еще много страшного если посмотреть.
Во второй версии ничего подобного не будет.

_FR>Кстати, как на счёт слов о том, что свойства-акессоры к открытым полям не есть гуд? А что же мы видим здесь? Открытое изменяемое поле

Осталось по недосмотру. Ща сделаю его приватным.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: [PDC, Don Syme] Type providers
От: _FRED_ Черногория
Дата: 06.11.10 16:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>От этого никуда не дется ибо в режиме интелисенса при редактировании нужно корректировать локешены.

WH>Изначально компилятор писали студенты.
WH>Там еще много страшного если посмотреть.
WH>Во второй версии ничего подобного не будет.
WH>Осталось по недосмотру. Ща сделаю его приватным.

Спасибо, всё понятно, всё отлично
Help will always be given at Hogwarts to those who ask for it.
Re[20]: [PDC, Don Syme] Type providers
От: mrTwister Россия  
Дата: 06.11.10 17:39
Оценка:
Здравствуйте, VladD2, Вы писали:

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


H>>>Ты видел в стандартной библиотеке реализацию DependencyProperty? Или автоматическое INotifyPropertyChange?

H>>>Или автоматический маппинг объектов?
T>>Нет, и что?

VD>А то, что это как раз то что невозможно положить в обычную библиотеку потому, но слишком специфично чтобы встраивать в язык. По этому ты никогда не увидишь средств автоматизирующих DependencyProperty и INotifyPropertyChange. Меж тем в виде макроса эти проблемы автоматизируются на раз. Вот здесь можно найти пример автоматизации DependencyProperty.


Какое это имеет отношение к Type providers?
лэт ми спик фром май харт
Re[21]: [PDC, Don Syme] Type providers
От: WolfHound  
Дата: 06.11.10 17:46
Оценка:
Здравствуйте, mrTwister, Вы писали:

T>Какое это имеет отношение к Type providers?

Type providers без проблем делаются макросом.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: [PDC, Don Syme] Type providers
От: WolfHound  
Дата: 06.11.10 19:03
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Осталось по недосмотру. Ща сделаю его приватным.

Вот собственно все что пришлось поправить:
http://code.google.com/p/nemerle/source/detail?r=9326#
3 использования в компиляторе.
1 в стандартной библиотеке
13 в интеграции. Причем как я понимаю тот кусок по факту не используется.
2 в сниппетах.

Короче это поле почти не использовалось.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: [PDC, Don Syme] Type providers
От: _FRED_ Черногория
Дата: 06.11.10 20:14
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Короче это поле почти не использовалось.


Не сомневаюсь. Кстати, можно ещё поправить: AST.n/TextPoint/Offcet на Offset

А автосвойств с авто-mutable полем нет?

"Util.ice" — замечательно
Help will always be given at Hogwarts to those who ask for it.
Re[12]: [PDC, Don Syme] Type providers
От: hardcase Пират http://nemerle.org
Дата: 06.11.10 22:55
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>А автосвойств с авто-mutable полем нет?


Их есть:
class Foo { public Bar : string { get; set; } }


_FR>"Util.ice" — замечательно


Это тот самый "internal compiler error".
/* иЗвиНите зА неРовнЫй поЧерК */
Re[13]: [PDC, Don Syme] Type providers
От: _FRED_ Черногория
Дата: 06.11.10 23:12
Оценка:
Здравствуйте, hardcase, Вы писали:

_FR>>А автосвойств с авто-mutable полем нет?


H>Их есть:

H>class Foo { public Bar : string { get; set; } }


Отлично, а почему не используется (в данном конкретном месте)?

_FR>>"Util.ice" — замечательно

H>Это тот самый "internal compiler error".

Util.vodka и Util.juice в стандартной поставке имеются или нужно самому изобретать?
Help will always be given at Hogwarts to those who ask for it.
Re[14]: [PDC, Don Syme] Type providers
От: hardcase Пират http://nemerle.org
Дата: 06.11.10 23:25
Оценка:
Здравствуйте, _FRED_, Вы писали:

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


_FR>>>А автосвойств с авто-mutable полем нет?


H>>Их есть:

_FR>
H>>class Foo { public Bar : string { get; set; } }
_FR>


_FR>Отлично, а почему не используется (в данном конкретном месте)?


Можно, но особого резону, я, например, пока не вижу — к сожалению есть куча других проблем.
Если уж специально садиться и заниматься подобным рефакторингом, то нужно комплексно анализировать АПИ компилятора. Но этим займемся после релиза.

_FR>>>"Util.ice" — замечательно

H>>Это тот самый "internal compiler error".

_FR>Util.vodka и Util.juice в стандартной поставке имеются или нужно самому изобретать?


Вот этого не понял.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[14]: [PDC, Don Syme] Type providers
От: hardcase Пират http://nemerle.org
Дата: 06.11.10 23:34
Оценка:
Здравствуйте, _FRED_, Вы писали:

H>>Их есть:

_FR>
H>>class Foo { public Bar : string { get; set; } }
_FR>


_FR>Отлично, а почему не используется (в данном конкретном месте)?


Есть даже круче вещи:
class Foo {
  public Bar : string { mutable bar : string; get { bar } set { bar = value } }
}


Вообще сейчас код компилятора можно точно сократить процентов на 20 использованием одних только стандартных макросов и удалением дублированного кода. Вот только чтобы это сделать нужно кучу времени, которого у меня например хватает только на исправление багов.
/* иЗвиНите зА неРовнЫй поЧерК */
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.