Чем пространства имён лучше модулей?
Встречный вопрос - чем using namespace std похоже на модули? Еще хотите? “Чем пиво лучше женщин?” (с) - классика жанра
Пространства имён - это термин, относящийся к динамическим библиотекам, а не модулям.
В язык внедрено ключевое слово namespace для описания пространств имён, {$includenamespace Name}
- для их подключения. Только зачем?
Потому что делается. Но пока не реализовали. как было задумано.
Вы объясните мне, чем такие пространства имён превзойдут модули? Меня интересует в частности возможность объединения нескольких файлов в одно пространство имён. В C# - это можно. Если в интерпретации разработчиков PascalABC.Net пространства имён не будут иметь этой возможности, то какое у них преимущество перед модулями?
Это пусть сэнсэй объясняет, Серёга-сан.
Вас понял. Буду ждать уважаемого, как Вы выразились, сенсея.
Он отчаянно бился за их поддержку, если правильно помню. Хотя, на самом деле, никто и не возражал.
Будут. Для того и делается. Но пока что-то там не получилось еще.
С одной стороны - хорошо, с другой - модули становятся рудиментом. Если я правильно понимаю, пространства имён призваны заменить модули.
Скорее, объединять их без нудного перечисления uses. В языках семейства С именно эта необходимость постоянно думать (и указывать) что где лежит, больше всего ярости вызывает у начинающих. Да и не только у начинающих, и не только в С.
Ну я тоже чуточку добавил
Вы упорно пытаетесь сравнить две абсолютно разные вещи. Неймспейсы предназначены для группировки имён в динамических библиотеках. При чём здесь модули?
Модули, по сути, тоже некие контейнеры, которые используются для группировки имён. Но, как Вы правильно заметили, не для динамический библиотек. Хотя, добавление пространств имён можно рассматривать с той точки зрения, что в обучении на начальном этапе будут рассматриваться модули, на более позднем - пространства имён, тем самым обеспечивая плавный переход на C#. Является ли это одной из тех целей, которые преследуют разработчики, разрабатывая пространства имён?
Вот Вы сами на свой вопрос и ответили. Модули, кстати, имеют абсолютно иной формат, нежели dll, и являются структурной единицей конкретно Паскаля.
Здесь налицо какая-то путаница. Пространство имен - это область программы, где не может быть одного имени для обозначения двух разных сущностей (кроме перегруженных функций)
Есть пространство имен модуля, функции, класса, лямбды. Сейчас мы обсуждаем всего-то явные пространства имен.
Модуль - единица кода, пространство имен - нет.
Пространства имен не призваны заменить модули. ibond делал их скорее чтобы было как в C#. Я вот их противник - это лишняя сущность. И - у нас они имеют недостатки - нельзя одно пространство имен в разных файлах.
Кроме того, пространства имен диссонируют с модулями.
Почему же? А как порядок в dll организовать?
Возможно, меня подводит память (она у меня вообще далека от идеала), но по моему было так:
- Был задан тут вопрос когда то давно - как сделать чтоб класс был в пространстве имён.
-
@ibond ответил
type namespace1.namespace2.t1=class
, но это не работало и я сразу написал ему это в ответ. - Через некоторое время я каким то образом (вроде из issue на гитхабе) узнал о том что @ibond делает неймспейсы.
- Был так же какой то спор о их надобности, но я не помню чтоб я так уж яростно их защищал как говорит @RAlex. Хотя я был за.
Как и сказал @Gleb - неймспейсы нужны чтоб лучше упорядочивать библиотеки. Если использовать одни только модули - имена могут быть Module1.t1
, Module1.t2
, Module1.t3
и т.п., то есть только 1 уровень вложенности. И кроме того, всё из модулей паскаль суёт в основное пространство имён. А неймспейсы подключаются по желанию.
И не только в модулях. В первую очередь - в dll. А для модулей, кстати, тоже лишним не будет. Библиотека цветовых пространств не мертва, но без неймспейсов будет страшно на неё взглянуть.
.dll=библиотека (потому что объявляется как library
). Я только про них и говорил, прочитайте внимательно))
Да нет, Вы там и про модули говорили.