Частичные методы Nemerle vs. C#
От: _nn_ www.nemerleweb.com
Дата: 21.03.11 08:53
Оценка:
C#: MSDN

Partial method declarations must begin with the contextual keyword partial and the method must return void.


У Nemerle с этим нет заморочек:
using System.Console;

namespace W
{
 partial class X
 {
  partial F() : int
  {
   1
  }
 
  partial G() : string
  {
   "A"
  }
 }

 partial class X
 {
  static Main() : void
  {
   WriteLine(X().F());
   WriteLine(X().G());
  }
 }
}


1
A

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Частичные методы Nemerle vs. C#
От: Jack128  
Дата: 21.03.11 08:59
Оценка:
Здравствуйте, _nn_, Вы писали:

__>C#: MSDN

__>

__>Partial method declarations must begin with the contextual keyword partial and the method must return void.


__>У Nemerle с этим нет заморочек:

__>
__>using System.Console;

__>namespace W
__>{
__> partial class X
__> {
__>  partial F() : int
__>  {
__>   1
__>  }
 
__>  partial G() : string
__>  {
__>   "A"
__>  }
__> }

__> partial class X
__> {
__>  static Main() : void
__>  {
__>   WriteLine(X().F());
__>   WriteLine(X().G());
__>  }
__> }
__>}
__>


__>

__>1
__>A



а где тут partial реализация методов?? То есть метод объявлен в одном файле, а реализовал (или НЕ реализован) в другом. Соответственно что будет возвращать в N если этот метод не реализован?? default(T) ?
Re[2]: Частичные методы Nemerle vs. C#
От: _nn_ www.nemerleweb.com
Дата: 21.03.11 09:05
Оценка:
Здравствуйте, Jack128, Вы писали:

J>а где тут partial реализация методов?? То есть метод объявлен в одном файле, а реализовал (или НЕ реализован) в другом. Соответственно что будет возвращать в N если этот метод не реализован?? default(T) ?


На самом деле очевидно partial не работает.

namespace W
{
 partial class X
 {
  partial void F();
 }

 class P
 {
  static void Main()
  {
  }
 }
}

Компилируется

namespace W
{
 partial class X
 {
  public partial F() : void;

  static Main() : void
  {

  }
 }
}

error: missing body of a non-abstract and non-extern method in method W.X.F() : void


Вот так
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Частичные методы Nemerle vs. C#
От: hardcase Пират http://nemerle.org
Дата: 21.03.11 09:24
Оценка: :))
Здравствуйте, _nn_, Вы писали:

__>У Nemerle с этим нет заморочек:



Это потому что Nemerle не обращает на модификатор partial в методах никакого внимания.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Частичные методы Nemerle vs. C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.03.11 19:07
Оценка: 1 (1)
Здравствуйте, hardcase, Вы писали:

H>Это потому что Nemerle не обращает на модификатор partial в методах никакого внимания.


Что есть баг. Надо ошибку выдавать.

В немерле нет partial-методов и они ему не особо нужны, так как вместо внешних кодогенераторов куда удобнее использовать макросы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Частичные методы Nemerle vs. C#
От: Rival Таиланд
Дата: 23.03.11 13:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В немерле нет partial-методов и они ему не особо нужны, так как вместо внешних кодогенераторов куда удобнее использовать макросы.


Не знаю как остальные, а я partial использую ещё для удобства.
Node.Server.cs
Node.Client.cs
Node.IO.cs
и т.д.

Если класс длинный это очень удобно и partial хорош не только для кодогенерации.
Я быть печальный если в Nemerle такого немай.
«История жизни – это, по существу, развитие сознания, которое завуалировано морфологией.» Пьер Тейяр де Шарден
Re[4]: Частичные методы Nemerle vs. C#
От: hardcase Пират http://nemerle.org
Дата: 23.03.11 13:54
Оценка:
Здравствуйте, Rival, Вы писали:

R>Если класс длинный это очень удобно и partial хорош не только для кодогенерации.

R>Я быть печальный если в Nemerle такого немай.

Речь идет о partial-методах. С partial-типами (варианты, классы, структуры, интефейсы) все в порядке.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Частичные методы Nemerle vs. C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.03.11 16:34
Оценка:
Здравствуйте, Rival, Вы писали:

VD>>В немерле нет partial-методов и они ему не особо нужны, так как вместо внешних кодогенераторов куда удобнее использовать макросы.


R>Не знаю как остальные, а я partial использую ещё для удобства.

R>Node.Server.cs
R>Node.Client.cs
R>Node.IO.cs
R>и т.д.

R>Если класс длинный это очень удобно и partial хорош не только для кодогенерации.

R>Я быть печальный если в Nemerle такого немай.

Причем тут класс? partial-классы доступны и в Немерле. Здесь же речь идет о partial-методах. Это весьма спорная выдумка создателей шарпа. Предназначена она исключительно для внешних кодогенераторов. Суть ее заключается в том, что программист может объявить метод с возвращаемым значением типа void, но при этом не описывать тело такого метода. Такой метод будет доступен в IDE. Если в процессе компиляции внешняя утилита сгенерирует такой же метод с телом, то в программу попадет именно он. Иначе все вызовы этого метода будут игнорироваться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Частичные методы Nemerle vs. C#
От: Rival Таиланд
Дата: 23.03.11 17:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Причем тут класс? partial-классы доступны и в Немерле. Здесь же речь идет о partial-методах. Это весьма спорная выдумка создателей шарпа. Предназначена она исключительно для внешних кодогенераторов. Суть ее заключается в том, что программист может объявить метод с возвращаемым значением типа void, но при этом не описывать тело такого метода. Такой метод будет доступен в IDE. Если в процессе компиляции внешняя утилита сгенерирует такой же метод с телом, то в программу попадет именно он. Иначе все вызовы этого метода будут игнорироваться.


А, тогда всё окей, а то испугался что речь про partial классов. Не внимательно прочёл тред — не выспался.
«История жизни – это, по существу, развитие сознания, которое завуалировано морфологией.» Пьер Тейяр де Шарден
Re[3]: Частичные методы Nemerle vs. C#
От: hardcase Пират http://nemerle.org
Дата: 23.03.11 20:53
Оценка: 52 (2)
Здравствуйте, VladD2, Вы писали:

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


H>>Это потому что Nemerle не обращает на модификатор partial в методах никакого внимания.


VD>Что есть баг. Надо ошибку выдавать.


Готово.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Частичные методы Nemerle vs. C#
От: Аноним  
Дата: 25.03.11 21:00
Оценка:
Здравствуйте, VladD2, Вы писали:

>Может ли в .Net CLR или JVM (т.е. в рантаймах рассчитанных на номинативную систему типов) жить язык со структурной типизацией?

>И если может, насколько при этом такой язык будет "своим" в этих рантаймах?

Цитата:

If two or more anonymous types have the same number and type of properties in the same order, the compiler treats them as the same type and they share the same compiler-generated type information.

Похоже в CLR уже есть поддержка структурной типизации, по крайней мере для анонимных типов.
Re[5]: Частичные методы Nemerle vs. C#
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.03.11 22:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Причем тут класс? partial-классы доступны и в Немерле. Здесь же речь идет о partial-методах. Это весьма спорная выдумка создателей шарпа. Предназначена она исключительно для внешних кодогенераторов. Суть ее заключается в том, что программист может объявить метод с возвращаемым значением типа void, но при этом не описывать тело такого метода. Такой метод будет доступен в IDE. Если в процессе компиляции внешняя утилита сгенерирует такой же метод с телом, то в программу попадет именно он. Иначе все вызовы этого метода будут игнорироваться.


Существующий софт на макросы не перепишешь. Макросы хорошо, но partial методы поддерживать тоже надо. Кстати там ещё есть ограничени на отсутствие out параметров.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Частичные методы Nemerle vs. C#
От: hardcase Пират http://nemerle.org
Дата: 26.03.11 12:26
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>If two or more anonymous types have the same number and type of properties in the same order, the compiler treats them as the same type and they share the same compiler-generated type information.


А>Похоже в CLR уже есть поддержка структурной типизации, по крайней мере для анонимных типов.


Нет там ее, и небыло никогда. Компилятор же просто кэширует сигнатуры анонимных типов, в Nemerle используется аналогичный подход для работы с ними.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Частичные методы Nemerle vs. C#
От: hardcase Пират http://nemerle.org
Дата: 26.03.11 12:55
Оценка:
Здравствуйте, adontz, Вы писали:

A>Существующий софт на макросы не перепишешь. Макросы хорошо, но partial методы поддерживать тоже надо. Кстати там ещё есть ограничени на отсутствие out параметров.


Как предложение по улучшению — ок, мы подумаем. Но это точно не первостепенной важности требование.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[7]: Частичные методы Nemerle vs. C#
От: Аноним  
Дата: 26.03.11 13:00
Оценка:
Здравствуйте, hardcase, Вы писали:

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

Так компилятор же, а для Runtime (то есть CLR) похоже такие типы воспринимаются одинаково.
Хотя, по идее, среда выполнения должна их различать.

Но тут надо копнуть поглубже, конечно.
Может там какой-то атрибут скрытый ставится у типа, что его можно считать структурно таким же, как и другие типы с таким же набором полей.
Re[8]: Частичные методы Nemerle vs. C#
От: hardcase Пират http://nemerle.org
Дата: 26.03.11 13:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Так компилятор же, а для Runtime (то есть CLR) похоже такие типы воспринимаются одинаково.


Откройте рефлектором или ILSpy-ем любую сборку с анонимными типами C# и посмотрите своими глазами. Это обычные Record-like классы с переопределенными Equals и GetHashcode.

А>Хотя, по идее, среда выполнения должна их различать.


Структурно эквивалентные анонимные типы из разных сборок будут разными классами для CLR и Equals для них будет возвращать False (в Nemerle это, кстати, не так — у нас Equals будет работать для эквивалентных анонимных типов из разных сборок).
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Частичные методы Nemerle vs. C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.03.11 17:08
Оценка:
Здравствуйте, adontz, Вы писали:

A>Существующий софт на макросы не перепишешь. Макросы хорошо, но partial методы поддерживать тоже надо. Кстати там ещё есть ограничени на отсутствие out параметров.


Существующий софт умеет генерировать Nemerle-код? Нет? Тогда о чем ты ведешь речь?

Генераторов кода в формате Nemerle и вряд ли возникнет просто потому, что их удобнее писать на макросах. Посему фича полностью не нужная в немерле.

Скажу больше — эта фича является детектором недостатков языков в которых она нужна.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Частичные методы Nemerle vs. C#
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.03.11 17:09
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>Существующий софт на макросы не перепишешь. Макросы хорошо, но partial методы поддерживать тоже надо. Кстати там ещё есть ограничени на отсутствие out параметров.

VD>Существующий софт умеет генерировать Nemerle-код? Нет? Тогда о чем ты ведешь речь?

Есть CodeDOM. Дизайнер форм не поддерживаете?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[8]: Частичные методы Nemerle vs. C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.03.11 17:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Так компилятор же, а для Runtime (то есть CLR) похоже такие типы воспринимаются одинаково.

А>Хотя, по идее, среда выполнения должна их различать.

В .Net 4 появилась ограниченная структурная эквивалентность для интерфейсов, структур (вэлью-типов) и делегатов. Сделано это, в основном, для того чтобы можно было хранить копии метаданных для COM-объектов в разных сборках и при этом иметь возможность передавать ссылки между сборками (т.е. для избавления от interop-сборок).

Структурной эквивалентности для классов нет и не планируется.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Частичные методы Nemerle vs. C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.03.11 17:15
Оценка:
Здравствуйте, adontz, Вы писали:

A>Есть CodeDOM. Дизайнер форм не поддерживаете?


Поддерживаем. Только это очень убогий АПИ использование которого ограничено весьма узкими областями. Паршал-методы в них не используются.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Частичные методы Nemerle vs. C#
От: Ziaw Россия  
Дата: 28.03.11 15:04
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В .Net 4 появилась ограниченная структурная эквивалентность для интерфейсов, структур (вэлью-типов) и делегатов. Сделано это, в основном, для того чтобы можно было хранить копии метаданных для COM-объектов в разных сборках и при этом иметь возможность передавать ссылки между сборками (т.е. для избавления от interop-сборок).


VD>Структурной эквивалентности для классов нет и не планируется.


А где про это можно почитать? Мне кажется структурной эквивалентности интерфейсов должно быть вполне достаточно, чтобы работать со ссылочными типами.
Re[10]: Частичные методы Nemerle vs. C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.03.11 15:54
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>А где про это можно почитать?


Где-то в МСДН-е дыло. В разделе связанном с ком-интеропом.

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


Не совсем так, но конечно лучше чем ничего. Попробуем в Н2 выжить из этого что-то.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.