класс + пространство имен Nemerle vs. C#
От: _NN_  
Дата: 13.03.13 11:24
Оценка: +1 :)
Итак C# запрещает (может кто знает почему ?) иметь класс и пространство имен с тем же именем:

namespace P
{
  namespace A {}
  class A {}

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


19: `P.A' clashes with a predefined namespace


Nemerle в свою очередь не запрещает. CLR тоже.
namespace P
{
  namespace A {}
  class A {}

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


Ну и можно полет не ограничивать:
using System;
using A.P; // подключает пространство имен и класс одновременно !

namespace A
{
  namespace P { class J {} }
  static class P { public J : int = 1; }
   
  class Q
  {
    static Main() : void
    {
      def p = J;
      Console.WriteLine(p.GetType());
      
      def x : J = J();
      Console.WriteLine(x.GetType());
      
      _ = Console.ReadKey();
    }
  }
}


System.Int32
A.P.J


P.S.
Очередной зачет Nemerle и проигрыш C#
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: класс + пространство имен Nemerle vs. C#
От: Аноним  
Дата: 13.03.13 12:31
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Итак C# запрещает (может кто знает почему ?) иметь класс и пространство имен с тем же именем


Не поэтому?

This reveals an interesting point about the design of the “type binding” algorithm in C#. That is, the algorithm which determines what type or namespace a name like “X.Y” is talking about. We do not “backtrack”. We do not say “well, suppose X means this. Then Y would have no meaning. Let’s backtrack; suppose X means this other thing, oh, yes, then Y has a meaning.” We figure out what X unambiguously means, and only then do we figure out what Y means. If X is ambiguous, we don’t check all the possibilities to see if any of them has a Y, we just give up.
Re[2]: класс + пространство имен Nemerle vs. C#
От: WolfHound  
Дата: 13.03.13 12:57
Оценка: +1 :)
Здравствуйте, <Аноним>, Вы писали:

А>This reveals an interesting point about the design of the “type binding” algorithm in C#. That is, the algorithm which determines what type or namespace a name like “X.Y” is talking about. We do not “backtrack”. We do not say “well, suppose X means this. Then Y would have no meaning. Let’s backtrack; suppose X means this other thing, oh, yes, then Y has a meaning.” We figure out what X unambiguously means, and only then do we figure out what Y means. If X is ambiguous, we don’t check all the possibilities to see if any of them has a Y, we just give up.

Перевожу: Мы не осилили написать алгоритм, который это умеет. А идеологию потом придумали. Ибо мы же не можем сказать, что не осилили.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: класс + пространство имен Nemerle vs. C#
От: catbert  
Дата: 13.03.13 21:43
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Перевожу: Мы не осилили написать алгоритм, который это умеет. А идеологию потом придумали. Ибо мы же не можем сказать, что не осилили.


Что, прям никто в микрософте не осилил бектрек написать?
Re[4]: класс + пространство имен Nemerle vs. C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.03.13 13:43
Оценка:
Здравствуйте, catbert, Вы писали:

C>Что, прям никто в микрософте не осилил бектрек написать?


Похоже что они узнали о том, что так можно только когда пришел Меер и предложил сделать Линк.

Если серьезно, то там все очень не просто получается. Банальный отказ от разруливания неоднозначностей делает алгоритм в 10 раз проще.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: класс + пространство имен Nemerle vs. C#
От: matumba  
Дата: 15.03.13 10:22
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Перевожу: Мы не осилили написать алгоритм, который это умеет. А идеологию потом придумали. Ибо мы же не можем сказать, что не осилили.


+1.
Люди же внятно отмазались: "в паре Х.У мы сначала однозначно определяем кто есть Хэ, а потом занимаемся У" (и получаем Й). Хотя могли бы не идти самым тупым и простым путём, а чуть более общо посмотреть на проблему. В конце концов, пространство нэймспэйсов и имена классов — не такие большие и практически не пересекающиеся функционально, могли бы и разрулить! Немерле же это почему-то не помешало!

catbert> Что, прям никто в микрософте не осилил бектрек написать?

Вопрос не в этом, а в том, что это "не прибавляет фичастости"! (а всего лишь помогает в редких случаях не заморачиваться по поводу имён) Соответственно, мракетологи эту фичу вычёркивают из планов, а прогеры с унылым лицом бредут писать идеологическую отмазу.

УГ, коим являлась Жаба, не могла быть грамотно спроектирована и тем более "обобщена" до "платформы .NET", не привнеся костылей предыдущей реализации — видимо, портировали в полной спешке и вопрос стоял "запускается? работает? вываливай в продакшн!". Именно поэтому мы имеем аж ЧЕТЫРЕ несовместимых поколения дотнетины и два GAC'а.
Re[5]: класс + пространство имен Nemerle vs. C#
От: hi_octane Беларусь  
Дата: 15.03.13 10:40
Оценка:
VD>Если серьезно, то там все очень не просто получается. Банальный отказ от разруливания неоднозначностей делает алгоритм в 10 раз проще.
Влад, ты мои мыла получал? Добавь плиз меня в Skype (в профиле).
Re[6]: класс + пространство имен Nemerle vs. C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.03.13 15:57
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Влад, ты мои мыла получал? Добавь плиз меня в Skype (в профиле).


Я тебе там ответил. Ты видимо на мой старый скайповый экаунт запрос посылал. Он сдох по причине утраты пароля. Новый экаунт vc.rsdn.ru.

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