Модули vs namespace's

Может быть, воспользоваться прямым заимствованием? Ведь этот Oxygene тоже не на коленке слеплен, люди думали что-то…

1 лайк

В модулях, на сколько мне известно, можно писать Uses &Unit in ‘где то там\Unit.pas’

Главный анахронизм модулей в том, что имя исходника .pas должно совпадать с именем будущего модуля в unit, который указан первой строкой в этом самом .pas

Ну так может распрощаться с этим?

Это уж точно не моя компетенция.

Ну я это всем сказал, в том числе и разработчикам. Кто что об этом думает?

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

К слову, в Паскале есть проекты.

Есть. Но я пока не нашел им полезного для себя применения. Возможно, позже разберусь, в чем их изюминка.

В том, что каждый класс можно в отдельном файле писать и не устанавливать связи вручную.

Ну это не бог весть какое достижение ))) У меня в NumLibABC классов уйма и все в одном файле. Никто не умер пока.

Но ведь модули нельзя так разрезать…

Так - это как?

На несколько файлов. Неймспейсы для этого и делают. Сейчас, наверное, можно include использовать.

include на уровне исходников - не лучшая вещь. Замаешься прыгать по файлам, пытаясь понять, где там что. Мне для библиотеки (а там порядка 2800 строк кода) оказалось достаточно возможности сворачивать код по регионам.

Тут уже дело вкуса. Для меня идеальный вариант - большая библиотека с несколькими неймспейсами, лежащими в разных файлах. Для примера - единый модуль Graph, где GraphABC и ObjectsABC - неймспейсы.

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

1 лайк

Дополнение. Как Вы смотрите на реализацию такой возможности:

Модуль с пространством имён:

unit MyClasses;

namespace MyNamespace; // Да, без begin - лучше выглядит.
  type
    TClass = class
    end;
end;
end.

Программа:

uses Alias = MyClasses.MyNamespace.TClass;
begin
  var x := new Alias();
end.

? Это, разумеется, когда будут сделаны namespace’ы в том виде, с которым Вы согласились.

1 лайк

Хорошая идея. А давайте распишем всё, что предлагается сделать касательно неймспейсов. Я, например, уже запутался. Можно хоть как - то систематизировать?

По ходу дела, я буду редактировать Issue.

1 лайк