Nemerle explicit interface
От: _nn_ www.nemerleweb.com
Дата: 22.03.10 13:03
Оценка:
C#
class A<T> : IEnumerable, IEnumerable<T>
{
    IEnumerator<T> IEnumerable<T>.GetEnumerator()
    {
        return null;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return null;
    }
}


Nemerle
class A[T] : IEnumerable, IEnumerable[T]
{
    public GetEnumerator() : IEnumerator[T]
      implements IEnumerable[T].GetEnumerator
    {
        null;
    }

    public GetEnumerator() : IEnumerator
      implements IEnumerable.GetEnumerator
    {
        null;
    }
}


Error: attempted return type overload on method A.GetEnumerator() : System.Collections.IEnumerator and method A.GetEnumerator() : System.Collections.Generic.IEnumerator[T]
Error: type name 'IEnumerable' is ambiguous, it could be:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll(0,0):Warning: hint: first possible type: 'System.Collections.Generic.IEnumerable.[T]'
C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll(0,0):Warning: hint: second possible type: 'System.Collections.IEnumerable'


Вторая попытка
class A[T] : System.Collections.IEnumerable,
             System.Collections.Generic.IEnumerable[T]
{
    public GetEnumerator() : System.Collections.Generic.IEnumerator[T]
      implements System.Collections.Generic.IEnumerable[T].GetEnumerator
    {
        null;
    }

    public GetEnumerator() : System.Collections.IEnumerator
      implements System.Collections.IEnumerable.GetEnumerator
    {
        null;
    }
}



Error: attempted return type overload on method A.GetEnumerator() : System.Collections.IEnumerator and method A.GetEnumerator() : System.Collections.Generic.IEnumerator[T]


Если оставить только IEnumerable или IEnumerable[T] то работает.
Как заставить работать ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Nemerle explicit interface
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.03.10 14:12
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Как заставить работать ?


Насколько я помню, Nemerle позволяет дать любое имя методу, реализующему интерфейсный метод. Таким образом, надо просто дать им разные имена.
Re[2]: Nemerle explicit interface
От: _nn_ www.nemerleweb.com
Дата: 22.03.10 14:30
Оценка:
Здравствуйте, nikov, Вы писали:

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


__>>Как заставить работать ?


N>Насколько я помню, Nemerle позволяет дать любое имя методу, реализующему интерфейсный метод. Таким образом, надо просто дать им разные имена.


Работает.
class A[T] : System.Collections.IEnumerable,
             System.Collections.Generic.IEnumerable[T]
{
    public GetEnumeratorGeneric() : System.Collections.Generic.IEnumerator[T]
      implements System.Collections.Generic.IEnumerable[T].GetEnumerator
    {
        null;
    }

    public GetEnumerator() : System.Collections.IEnumerator
      implements System.Collections.IEnumerable.GetEnumerator
    {
        null;
    }
}


Все же похоже что есть баг или это by-design ?

А так уже нет:
class A[T] : IEnumerable,
             IEnumerable[T]
{
    public GetEnumeratorGeneric() : IEnumerator[T]
      implements IEnumerable[T].GetEnumerator
    {
        null;
    }

    public GetEnumerator() : IEnumerator
      implements IEnumerable.GetEnumerator
    {
        null;
    }
}


Error: type name 'IEnumerable' is ambiguous, it could be:


C# без проблем понимает, а Nemerle никак. Баг или by-design ?

P.S.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Nemerle explicit interface
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.03.10 14:34
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Все же похоже что есть баг или это by-design ?


А что говорит спецификация Nemerle по этому поводу? Ну, та самая, которую не нашёл Хейлсберг.
Re[4]: Nemerle explicit interface
От: _nn_ www.nemerleweb.com
Дата: 22.03.10 14:56
Оценка: +1
Здравствуйте, nikov, Вы писали:

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


__>>Все же похоже что есть баг или это by-design ?


N>А что говорит спецификация Nemerle по этому поводу? Ну, та самая, которую не нашёл Хейлсберг.


Вопрос с подколом

На самом деле, да нужна спецификация.
Т.е. если кто-то может писать сейчас, это было бы круто.

Все же приоритетней , как мне кажется , это довести интеграцию и компилятор до ума, чтобы дать возможность большому количеству людей попрользоваться языком.
А далее, в рамках Nemerle 2 уже создать спецификацию и все необходимое для Хейлсберга .
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Nemerle explicit interface
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.03.10 14:59
Оценка: :)
Здравствуйте, _nn_, Вы писали:

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

__>А далее, в рамках Nemerle 2 уже создать спецификацию и все необходимое для Хейлсберга .

Ну конечно, сначала дом построим, чтобы было где жить, а уж потом план начертим.
Re[3]: Nemerle explicit interface
От: hardcase Пират http://nemerle.org
Дата: 22.03.10 16:06
Оценка:
Здравствуйте, _nn_, Вы писали:

Ну вообще IEnumerable уже реализуется IEnumerable[T]...

А проблема никак не связана с отсутствием поддержки ковариантных интерфейсов (невозможностью реализовать IEnumerable[int] и IEnumerable[string] в одном классе)?
http://nemerle.org/Banners/?t=Developer!&g=dark /* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Nemerle explicit interface
От: _nn_ www.nemerleweb.com
Дата: 22.03.10 16:11
Оценка:
Здравствуйте, hardcase, Вы писали:

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


H>Ну вообще IEnumerable уже реализуется IEnumerable[T]...

Это как реализуюется ?
class A[T] : System.Collections.IEnumerable,
             System.Collections.Generic.IEnumerable[T]
{
  GetEnumerator() : System.Collections.Generic.IEnumerator[T]
    implements System.Collections.Generic.IEnumerable[T].GetEnumerator
  {
    null;
  }
}


Error: unimplemented interface method System.Collections.IEnumerable.GetEnumerator() : System.Collections.IEnumerator (in A type)


H>А проблема никак не связана с отсутствием поддержки ковариантных интерфейсов (невозможностью реализовать IEnumerable[int] и IEnumerable[string] в одном классе)?

Я не силен в компиляторе. Может и связанна.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Nemerle explicit interface
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.03.10 16:30
Оценка:
Здравствуйте, _nn_, Вы писали:

using System.Collections.Generic;

class A[T] : IEnumerable[T]
{
  public GetEnumerator() : System.Collections.Generic.IEnumerator[T]
    implements System.Collections.Generic.IEnumerable[T].GetEnumerator
  {
      null;
  }

  public GetEnumerator1() : System.Collections.IEnumerator
    implements System.Collections.IEnumerable.GetEnumerator
  {
      null;
  }
}
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Nemerle explicit interface
От: Воронков Василий Россия  
Дата: 22.03.10 16:33
Оценка:
Здравствуйте, nikov, Вы писали:

__>>А далее, в рамках Nemerle 2 уже создать спецификацию и все необходимое для Хейлсберга .

N>Ну конечно, сначала дом построим, чтобы было где жить, а уж потом план начертим.

Справедливости ради, много вполне популярных языков вообще десятилетиями живут без спецификаций.
Re[7]: Nemerle explicit interface
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.03.10 16:34
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

__>>>А далее, в рамках Nemerle 2 уже создать спецификацию и все необходимое для Хейлсберга .

N>>Ну конечно, сначала дом построим, чтобы было где жить, а уж потом план начертим.

ВВ>Справедливости ради, много вполне популярных языков вообще десятилетиями живут без спецификаций.


Например?
Re[8]: Nemerle explicit interface
От: Воронков Василий Россия  
Дата: 22.03.10 16:52
Оценка:
Здравствуйте, nikov, Вы писали:

ВВ>>Справедливости ради, много вполне популярных языков вообще десятилетиями живут без спецификаций.

N>Например?

Ну Руби, например. Или Питон.
Re[9]: Nemerle explicit interface
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.03.10 16:58
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>>>Справедливости ради, много вполне популярных языков вообще десятилетиями живут без спецификаций.

N>>Например?

ВВ>Ну Руби, например. Или Питон.


Ruby
Python
Re[10]: Nemerle explicit interface
От: Воронков Василий Россия  
Дата: 22.03.10 17:01
Оценка:
Здравствуйте, nikov, Вы писали:

N>Ruby

N>Python

Ну а когда они появились (причем еще не факт, что появились) и сколько лет эти языки жили без спецификаций?
Потом ссылка, которую ты привел на Питон, это не спецификация, а Language Reference — все же вещи не совсем чтобы одинаковые.
Re[6]: Nemerle explicit interface
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.03.10 17:09
Оценка:
Здравствуйте, nikov, Вы писали:

N>Ну конечно, сначала дом построим, чтобы было где жить, а уж потом план начертим.


Лучше уж так чем как с Шарпом (где и дом кривой, и плат).
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Nemerle explicit interface
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.03.10 17:15
Оценка:
Здравствуйте, _nn_, Вы писали:

__>C# без проблем понимает, а Nemerle никак. Баг или by-design ?


Это бай-дизайн, но в дизайне баг.

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

Если докрутить анализ добавив в него эвристику "Если есть два типа-кандидата среди которых есть кандидат без параметров типа, то выбирать его для выражений в которых не указаны параметры типов.", то подобный код будет компилироваться.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Nemerle explicit interface
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.03.10 17:16
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если докрутить анализ добавив в него эвристику "Если есть два типа-кандидата среди которых есть кандидат без параметров типа, то выбирать его для выражений в которых не указаны параметры типов.", то подобный код будет компилироваться.


В общем, напиши фича-реквест. Будет время, реализую.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Nemerle explicit interface
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.03.10 17:17
Оценка:
Здравствуйте, nikov, Вы писали:

N>А что говорит спецификация Nemerle по этому поводу? Ну, та самая, которую не нашёл Хейлсберг.


Ты лучше бы не подкалывал, а помог ее написать. На все вопросы (если сам не сможешь ответить) я тебе помогу ответить.
Ты с такой задачей справишся наилучшим образом. Я не столь педантичен, так что точно накосячу.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Nemerle explicit interface
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.03.10 17:19
Оценка: +1
Здравствуйте, VladD2, Вы писали:

N>>Ну конечно, сначала дом построим, чтобы было где жить, а уж потом план начертим.


VD>Лучше уж так чем как с Шарпом (где и дом кривой, и плат).


Смотря для каких целей. Неужели ты думаешь, что тот факт, что в мире .NET в продакшене повсеместно используются C# и VB.NET (а в разработку инструментов для работы с ними вкладываются десятки миллионов долларов ежегодно), а Nemerle используется только на нескольких проектах — это только следствие тупости и недальновидности менеджмента, принимающего такое решение?
Re[5]: Nemerle explicit interface
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.03.10 17:20
Оценка:
Здравствуйте, _nn_, Вы писали:

__>А далее, в рамках Nemerle 2 уже создать спецификацию и все необходимое для Хейлсберга .


А нафиг нам тогда Хейлсберг то будет нужен?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.