Модули vs namespace's

Это не неймспейсы

А что это? Задача стояла - дать возможность делать в библиотеках такую же иерархию, как и в C#. Задачу выполнили. Тот, кто о них не знает, не испытывает вообще никаких трудностей. Кому они помешали? А не испортило ли язык удаление статических классов?

Насколько давно это было?

Уже наверное пол года. Причём узнали об этом уже по факту, когда ошибку компиляции получили. Оказалось, что разработчики поняли, что Sealed Abstract - бредовая запись и запретили её, а об альтернативе никто не позаботился. Как итог - остались ни с чем.

1 лайк

static бы пригодился. Представляется мне как наиболее логичная запись. Хотя, наверное, это уже обсуждалось.

1 лайк

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

Не считаю, что такое должно иметь место быть здесь, на этом форуме, среди нас и разработчиков.

Не должно, но имеет, к сожалению. Выслушаем @ibond, он уже здесь.

Можно. Явные пространства имен можно разносить по файлам, ради чего это и затевалось, чтобы хоть как-то смягчить ограничения паскалевской модели с тысячью классов в одном файле…

3 лайка

Для библиотек это особенно актуально. Сейчас надо писать все в одном файле с library, чтобы они попали в dll…

3 лайка

Можете привести пример кода, который бы объединял два класса (в двух различных файлах) одного пространства имён?

1 лайк

Поддерживаю. Если можно, не убирайте их.

10 сообщений перенесены в тему Болталка PascalABC.NET

Да, согласен. Я тоже сторонник явных повторно открываемых namespaces. Просто написали, что они имеют ту же структуру, что и модуль - с initialization, finalization, а это как-то не очень.

Я бы делал namespaces как в C#. В любом месте файла можно объявить несколько namespaces

3 лайка

Да, те, кто поддерживал эту идею, предлагали сделать именно так.

С теоретической точки зрения как Вам такой вариант:

namespace A;
begin
  type
    TClass1 = class
    end;
end;

namespace A.B;
begin
  type
    TClass2 = class(TClass1)
    end;
end;

begin
  var (x, y) := (new A.TClass1(), new A.B.TClass2());
end.

?

Это всё в одном файле? В принципе, идея хорошая, но я бы сделал так:

Namespace a // без Begin!
  Namespace b // Явно поместить его в a
  End;
End;

Да, в одном.

В C# не принято вкладывать непосредственно одно пространство имён в другое, зависимость одного пространства имён от другого принято подчеркивать в его именовании (через точку). Вполне разумное решение - что будет, если пространства имён бесконечно вкладывать (непосредственно) друг в друга? Длинные отступы - вот что. А кому это надо?

На ду! Их можно вкладывать, а через точку они пишутся, если разнесены по файлам и нет возможности сделать вложение.

Как Вы это себе представляете?