OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

Публичные и непубличные символы пакетов

Open EvilBeaver opened this issue 9 years ago • 13 comments

Перекликается с задачей #253

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

EvilBeaver avatar Jun 03 '16 09:06 EvilBeaver

иии тут мы опять приходим к тому, что обсуждали полгода назад.

#Использовать logos Экспорт;

Ну или наоборот private (как в typescript - свойство с необъявленной видимостью является публичным).

nixel2007 avatar Jun 03 '16 09:06 nixel2007

Я за предложение @nixel2007 Только по умолчанию приват, а не публик.

artbear avatar Jun 03 '16 10:06 artbear

Только по умолчанию приват, а не публик.

только это внезапно обрушит все имеющиеся скрипты и библиотеки...

nixel2007 avatar Jun 03 '16 10:06 nixel2007

@nixel2007 логично. Значит, нужно будет сразу и их подправить, раз такой breaking change

artbear avatar Jun 03 '16 10:06 artbear

@nixel2007 я вообще-то совсем не об этом... и вдобавок, не понял о чем говорите вы с @artbear

Я говорю о том, что сейчас в некоторой библиотеке может быть модуль "РаботаСHTTP", но он нужен для внутренних целей библиотеки и в клиентском скрипте не должен быть виден.

А теперь, поясните мне, плиз, о чем вы сейчас говорите?

EvilBeaver avatar Jun 03 '16 10:06 EvilBeaver

@EvilBeaver ты предлагаешь регулировать это на уровне библиотеки/packagedef.. а я и Артур намекают на то, что это должно быть в самом движке у директив импорта.

nixel2007 avatar Jun 03 '16 13:06 nixel2007

Почему у импорта-то? Я импортирую пакет. Что я тут буду регулировать? Что означает то слово Экспорт в переписке выше?

EvilBeaver avatar Jun 03 '16 13:06 EvilBeaver

@nixel2007 Да, я понял Андрея. Он внутри библиотеки хочет регулировать, что выдавать наружу. А мы с тобой говорили об использовании уже снаружи, т.е. позже. Здесь Экспорт уже не важен, все приватные классы,модули уже должны быть не видны.

artbear avatar Jun 03 '16 13:06 artbear

@EvilBeaver т.е. к Классы и Модули добавляем еще два уровня рядом - ПриватныеКлассы и ПриватныеМодули, этим и достигается регулировка.

artbear avatar Jun 03 '16 13:06 artbear

Ну а вы что имели в виду?

EvilBeaver avatar Jun 03 '16 13:06 EvilBeaver

Я вообще не совсем про это.

Единственная возможность использовать РаботаСHTTP внутри скрипта - импортировать его через "Использовать". причем не важно, сторонняя ли это библиотека, подключаемая по имени, или файл в соседнем модуле, подключаемый по пути с переопределенным загрузчиком (как это сделано в gitsync, например). Суть одна - я импортирую библиотеку в текущий файл скрипта. Но я не хочу отдавать классы и методы, которые предоставляет эта импортируемая библиотека "наружу" - в скрипт, который будет импортировать уже мою библиотеку. Для этого я говорю: "уважаемый оскрипт (с) подгрузи мне вот эту туеву хучу методов только в мою область видимости" и пишу #use http private.

Моя хотелка реализована - внутри моей библиотеки я работаю с методами из РаботаСHTTP, а вызывающий мою библиотеку скрипт вообще ничего не знает про http.

nixel2007 avatar Jun 03 '16 14:06 nixel2007

Понял. Да это тоже надо. Но семантику видимостей нужно серьезно продумывать

EvilBeaver avatar Jun 03 '16 16:06 EvilBeaver

2.0?

nixel2007 avatar Jun 03 '16 16:06 nixel2007