ICE нашол.
От: WolfHound  
Дата: 27.04.10 23:32
Оценка: :)
Пытаемся компилировать вот такой код:
class SchemePointBase {}
class SchemePoint : SchemePointBase {}

interface ISchemeGlyph
{
  Points : IEnumerable[SchemePointBase] {get;}
}

class SchemeItemList[T] : List[T] {}

class PointList : SchemeItemList[SchemePoint] {}
class GlyphList : SchemeItemList[ISchemeGlyph] {}

class Scheme
{
  public Glyphs : GlyphList { get; set; }
  public Points : PointList { get; set; }
}

module Program
{
  Main() : void
  {
    def scheme = Scheme();
    def points = scheme.Points.Concat(scheme.Glyphs.MapLazy(_.Points).Flatten());
  }
}

И получаем:
---------------------------
Ошибка утверждения: Прервать=Выход, Повторить=Отладка, Пропустить=Продолжить
---------------------------
ICE! (Internal Compiler Error)

unresolved expression: an error



    at Typer2.Unfold(TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(243)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1023)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1290)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1446)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1414)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1415)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1446)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1465)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.Run()  H:\work\nemerle\ncc\typing\Typer2.n(122)

    at Typer.RunSecondPass(MethodBuilder meth)  H:\work\nemerle\ncc\typing\Typer.n(428)

    at Typer.RunFullTyping()  H:\work\nemerle\ncc\typing\Typer.n(235)

    at MethodBuilder.RunBodyTyper()  H:\work\nemerle\ncc\hierarchy\ClassMembers.n(931)

    at MethodBuilder.Compile()  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(1080)

    at TypeBuilder.EmitImplementation()  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(639)

    at _N_emit_impl__53895.apply_void(TypeBuilder _N__53894)  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(362)

    at _N_maybe_f__54466.apply_void(TypeBuilder _N__54465)  H:\work\nemerle\ncc\hierarchy\TypesManager.n(258)

    at NList.Iter(list`1 l, FunctionVoid`1 f)  H:\work\nemerle\lib\list.n(889)

    at list`1.Iter(FunctionVoid`1 f)  H:\work\nemerle\lib\list.n(310)

    at TypesManager.Iter(list`1 builders, FunctionVoid`1 f)  H:\work\nemerle\ncc\hierarchy\TypesManager.n(265)

    at TypesManager.Iter(FunctionVoid`1 f)  H:\work\nemerle\ncc\hierarchy\TypesManager.n(276)

    at TypesManager.compile_all_tyinfos(Boolean aux_phase)  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(388)

    at _N__N_lambda__53335__53438.apply_void()  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(236)

    at Solver.Enqueue(FunctionVoid action)  H:\work\nemerle\ncc\typing\Solver.n(201)

    at TypesManager.EmitDecls()  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(256)

    at ManagerClass.Run()  H:\work\nemerle\ncc\passes.n(548)

    at MainClass.main_with_catching()  H:\work\nemerle\ncc\main.n(89)

    at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)  

    at ThreadHelper.ThreadStart()  


---------------------------
Прервать   Повтор   Пропустить   
---------------------------


Если сделать так то работает.
    def points = (scheme.Points :> IEnumerable[SchemePointBase]).Concat(scheme.Glyphs.MapLazy(_.Points).Flatten());


Версия компилятора 8830
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: ICE нашол.
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 03:25
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>unresolved expression: an error


Ну, так пиши баг-репорт. А еще лучше за одно его и пофикси .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: ICE нашол.
От: Jack128  
Дата: 28.04.10 06:35
Оценка:
Здравствуйте, WolfHound, Вы писали:

Хе, как раз думал на Nemerle проверить -)
Re: ICE нашол.
От: _nn_ www.nemerleweb.com
Дата: 28.04.10 09:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

Если разобрать выражение по частям, то вообще не компилируется.

//def points = scheme.Points.Concat(scheme.Glyphs.MapLazy(_.Points).Flatten());

def points0 = scheme.Glyphs.MapLazy(_.Points);
def points1 = points0.Flatten();
def points2 = scheme.Points.Concat(points1);


Error: none of the overloads of Points is possible:
Error: property: ISchemeGlyph.Points : System.Collections.Generic.IEnumerable[SchemePointBase] { get; } was expected to have type list[SchemePoint]+, while it has got System.Collections.Generic.IEnumerable[SchemePointBase]

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: ICE нашол.
От: WolfHound  
Дата: 28.04.10 11:00
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Хе, как раз думал на Nemerle проверить -)

Вот два рабочих варианта:
    def points1 = scheme.Points.Cast().Concat(scheme.Glyphs.MapLazy(_.Points).Flatten());
    def points2 = comp enumerable
      {
        yieldcomp scheme.Points.Cast();
        yieldcomp scheme.Glyphs.MapLazy(_.Points).Flatten();
      };

Тут прикол в том что в .NET нет преобразования из IEnumerable[SchemePoint] в IEnumerable[SchemePointBase].
Его выполняет метод расширение Cast.
Но как ты видишь все типы выведены.
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: ICE нашол.
От: WolfHound  
Дата: 28.04.10 11:00
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Если разобрать выражение по частям, то вообще не компилируется.

А оно и не должно.
Просто ICE это не ответ.

__>

__>Error: none of the overloads of Points is possible:
__>Error: property: ISchemeGlyph.Points : System.Collections.Generic.IEnumerable[SchemePointBase] { get; } was expected to have type list[SchemePoint]+, while it has got System.Collections.Generic.IEnumerable[SchemePointBase]

Вот примерно так оно и должно было выругаться.
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: ICE нашол.
От: WolfHound  
Дата: 28.04.10 11:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, так пиши баг-репорт.

Я забыл пароль к трекеру.
Вот когда оно переедет на googlecode буду писать сразу туда.

VD>А еще лучше за одно его и пофикси .

Я в типизаторе ничего не понимаю.
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: ICE нашол.
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 11:07
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>Ну, так пиши баг-репорт.

WH>Я забыл пароль к трекеру.

Восстанови.

WH>Вот когда оно переедет на googlecode буду писать сразу туда.


Вероятность что он туда переедет не очень велика, а того что это случится в ближайшее время и вовсе стремится к нулю.

VD>>А еще лучше за одно его и пофикси .

WH>Я в типизаторе ничего не понимаю.

Ну, так и я не понимал когда-то.

Что касается багтрекера, то держать в голове сообщения в форуме содержащие описание багов очень не просто. Я баги для правки беру из багтрекера. Там есть полноценный интерфейс для их отслеживания.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: ICE нашол.
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 11:26
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Хе, как раз думал на Nemerle проверить -)


Что проверить, если не секрет?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: ICE нашол.
От: Jack128  
Дата: 28.04.10 13:35
Оценка:
Здравствуйте, VladD2, Вы писали:

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


J>>Хе, как раз думал на Nemerle проверить -)


VD>Что проверить, если не секрет?


Вот
Автор: Jack128
Дата: 28.04.10
, я веточку завел, об особенностях ввода типов в F#. Ну осответственно думал проверить, как ся немерле поведет. Но WolfHound опередил.
Re: ICE нашол.
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 19:54
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Пытаемся компилировать вот такой код:...

WH>И получаем:
WH>...
WH>ICE! (Internal Compiler Error)
WH>unresolved expression: an error

Подправил процесс оверлоад-резолющен. Теперь на твой исходный пример выдаеются следующие сообщения о ошибках:

Main.n(34,52):Error: none of the overloads of Points is possible:
Main.n(34,52):Error: property: ISchemeGlyph.Points : System.Collections.Generic.IEnumerable[SchemePointBase] { get; } was expected to have type System.Collections.Generic.IEnumerable[SchemePoint]+, while it has got System.Collections.Generic.IEnumerable[SchemePointBase]

Сообщение выдается на участок кода выделенный жирным:
    _ = scheme.Points.Concat(scheme.Glyphs.MapLazy(_.Points).Flatten());


Правильная реакция?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: ICE нашол.
От: WolfHound  
Дата: 28.04.10 20:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>[/q]

VD>Сообщение выдается на участок кода выделенный жирным:
VD>
VD>    _ = scheme.Points.Concat(scheme.Glyphs.MapLazy(_.Points).Flatten());
VD>


VD>Правильная реакция?

В целом да но было бы значительно понятнее если бы оно ругалось на Concat.
Хотя как компилятор поймет в каком случае на что ругаться не ясно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: ICE нашол.
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 20:19
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>В целом да но было бы значительно понятнее если бы оно ругалось на Concat.

WH>Хотя как компилятор поймет в каком случае на что ругаться не ясно.

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

В принципе можно добавить еще одно сообщение об ошибке.

Вопрос в том что при этом писать и надо ли делать остальные сообщения вложенными (видимо надо)?

Можно написать что-то вроде "при типизации Concat(сигнатура) возникли следующие ошибки: и тут список воложенных ошибок приведенных выше".

Вот только есть ли в этом смысл? Вложенность может быть очень большой...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: ICE нашол.
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 20:20
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>В целом да но было бы значительно понятнее если бы оно ругалось на Concat.

WH>Хотя как компилятор поймет в каком случае на что ругаться не ясно.

Советую посмореть на суть исправлений (закомиченых мной). Возможно ситуация будет более понятна.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: ICE нашол.
От: WolfHound  
Дата: 29.04.10 13:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Можно написать что-то вроде "при типизации Concat(сигнатура) возникли следующие ошибки: и тут список воложенных ошибок приведенных выше".

VD>Вот только есть ли в этом смысл? Вложенность может быть очень большой...
Я думаю имеет.
Ибо в данном случае с точки зрения программиста жопа с Concat но компилятор ругается на совершенно другое место.
Тут примерно как с исключениями. Обычно достаточно знать где оно вылетело но иногда приходиться смотреть на весь стек вызовов.
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: ICE нашол.
От: Аноним  
Дата: 29.04.10 14:48
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Советую посмореть на суть исправлений (закомиченых мной). Возможно ситуация будет более понятна.


Typer.n выглядит страшновато
Re[5]: ICE нашол.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.04.10 20:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Typer.n выглядит страшновато


Это ты просто еще в Typer-DelayedTyping.n Typer-CallTyper.n не пытался разобраться. Если бы попытался, то понял бы, что Typer.n — фигня. Он просто большой.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.