type и частичная специализация generic'ов
От: _ALeRT_  
Дата: 31.10.07 22:54
Оценка:
Здравствуйте, я столкнулся с такой ситуацией:

  [Record]
  class Foo[T,U]{public data : int;}
  type IntFoo[U] = Foo[int, U];
  type IntStrFoo = IntFoo[string];

  static class Program
  {
    static Main() : void
    {
      _ = IntStrFoo(5);
      _ = IntFoo.[string](5); //error
      _ = Foo.[int, string](5);

      def myFun = f : IntFoo.[string]  => f.data;

      _ = myFun(IntStrFoo(5));
      _ = myFun(IntFoo.[string]()); //error
      _ = myFun(Foo.[int, string](5));
    }
  }


В статье
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
достаточно расплывчато сказано, что с помощью этой возможности можно объявлять даже открытые generic-типы. Собственно а subj вообще поддерживается? Вроде получается что частичная специализация есть, но не совсем
Re: type и частичная специализация generic'ов
От: Иванков Дмитрий Россия  
Дата: 01.11.07 05:22
Оценка:
Здравствуйте, _ALeRT_, Вы писали:

_AL>В статье
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
достаточно расплывчато сказано, что с помощью этой возможности можно объявлять даже открытые generic-типы. Собственно а subj вообще поддерживается? Вроде получается что частичная специализация есть, но не совсем


Там имелось в виду что как раз специализации нет, а есть только алиасы/синонимы. (специализация просто игнорируется насколько я помню)
В общем-то надо прикрыть это сообщением об ошибке, пока кто-нибудь не реализует этот функционал

P.S. подходящий баг в трекере: http://nemerle.org/bugs/view.php?id=830
Re: type и частичная специализация generic'ов
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.11.07 13:44
Оценка:
Здравствуйте, _ALeRT_, Вы писали:

_AL>В статье
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
достаточно расплывчато сказано, что с помощью этой возможности можно объявлять даже открытые generic-типы. Собственно а subj вообще поддерживается? Вроде получается что частичная специализация есть, но не совсем


Если речь идет об налоге из С++, то нет, не поддерживается. В С++ шаблоны сродни макросам Немерле, а может и еще проще, сродни строковым макросам. В них специаилизация — это подстановка рукопашного кода для некоторого частного случая. Возможно это так как раскрытие шаблонов возможно только в рамках одного компилируемого модуля (их нельзя класть в бибилотеки).

Немерле же использует дотнетные дженерики которые являются фичей компонетной (их можно создавать динамически и совместно использовать несколькими модулями). Это приводит к тому, что текстуальные или компайл-тайм-возможнсоти для дженериков не применеимы. Описанная возможность Немрле не более чем синтаксический сахар позволяющий ввести для типа сокращенное имя — краткий синоним. Специализации он не поддерживает. Код дженерико истенно полиморфен и не поддерживает перегрузки (коей и является специализация в С++).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: type и частичная специализация generic'ов
От: _ALeRT_  
Дата: 01.11.07 14:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Немерле же использует дотнетные дженерики которые являются фичей компонетной (их можно создавать динамически и совместно использовать несколькими модулями). Это приводит к тому, что текстуальные или компайл-тайм-возможнсоти для дженериков не применеимы. Описанная возможность Немрле не более чем синтаксический сахар позволяющий ввести для типа сокращенное имя — краткий синоним. Специализации он не поддерживает. Код дженерико истенно полиморфен и не поддерживает перегрузки (коей и является специализация в С++).


Похоже я не совсем точно выразился Я имел ввиду не частичную специализацию в смысле переопределения поведения дженерик класса для какой-то более узкой группы типов, а просто введение сокращенного названия для типа (как template typedef). Например так:

type MySet[T] = Dictionary[T,DBNull];
Re[3]: type и частичная специализация generic'ов
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.11.07 15:47
Оценка:
Здравствуйте, _ALeRT_, Вы писали:

_AL>Похоже я не совсем точно выразился Я имел ввиду не частичную специализацию в смысле переопределения поведения дженерик класса для какой-то более узкой группы типов, а просто введение сокращенного названия для типа (как template typedef). Например так:


_AL>
_AL>type MySet[T] = Dictionary[T,DBNull];
_AL>


Дык это и есть синонимы ака aliases.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: type и частичная специализация generic'ов
От: hi_octane Беларусь  
Дата: 03.11.07 08:48
Оценка:
_AL>Похоже я не совсем точно выразился Я имел ввиду не частичную специализацию в смысле переопределения поведения дженерик класса для какой-то более узкой группы типов, а просто введение сокращенного названия для типа (как template typedef). Например так:

_AL>
_AL>type MySet[T] = Dictionary[T,DBNull];
_AL>


А обычное наследование с частичной специализацией почему не подходит? Вроде обладает всеми теми-же свойствами...

  public class MySet[T] : Dictionary[T, DBNull]
  {  
  }

  public static Main(params args : array[string]) : void
  {           
    def mySet = MySet();
    mySet["aa"] = DBNull.Value;
    mySet["bb"] = DBNull.Value;
    
    WriteLine($"count = $(mySet.Count)");
    
    _ = ReadKey();            
  }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.