[PATCH] Namespace Patch, Beta 1

su1d

Старожил PHPClubа
Автор оригинала: tony2001
>да они офигели!
обоснуй.
обосновываю: я конечно не много языков знаю, но ни в одном из них не используется \ в качестве разделителя чего бы то ни было. в лучшем случае -- деление нацело (РНР-аналог: %).

de facto это либо двоеточия, либо точки.

>чем :: плох?
тем, что занят?
как отличить статический вызов от вызова функции из неймспейса?
занят для очень похожей функции: разделять имена классов и методов.
мне одному только кажется, что разделение неймспейсов и классов -- это практически то же самое?

>конфликты между именами разрешаются очень легко запретом на определение
>класса и функции с одним и тем же именем внутри одного namespace'а

ха.ха.ха.
а теперь придумай к этому хотя бы одно логическое объяснение.
неймспейс -- дословно: "пространство имён". когда имя в пространстве занято, будь то классом, функцией, или другим неймспейсом, то это имя уже занято. по-моему, очень стройно получается, разве нет?

ещё довод:
неймспейсы -- это как если бы сделали поддержку private classes, т.е. когда можно определять один класс внутри другого.
единственная разница только в том, что класс может быть определён лишь в одном единственном файле (если не уродствоваться include()'ами), в то время, как неймспейсы можно "размазать" по нескольким файлам и даже папкам.


и чем, кстати, плох \ ?
\ -- это:
-) DIRECTORY_SEPARATOR под виндами
-) воспринимается скорее как какая-то операция деления, чем разделитель неймспейса/класса
-) нестандартно. нигде больше нет \ как разделителя неймспейсов.
 

Ilya Bous

Новичок
так это, товарисчи, кто нибудь собрал под никсами пропатченную верию или нет?
 

tony2001

TeaM PHPClub
обосновываю: я конечно не много языков знаю, но ни в одном из них не используется \ в качестве разделителя чего бы то ни было. в лучшем случае -- деление нацело (РНР-аналог: %).
гут.
сколько из этих языков транслируются, а не компилируются?
и много ли ты знаешь языков, в которых есть variable variables? (а то, может, убрать надо - я, например, такого в дугих языках не видел..)

>de facto это либо двоеточия, либо точки.
ты знаешь почему и то, и другое неприемлемо, а на стадии компиляции их отличить нельзя, т.к. язык не компилируемый.

>занят для очень похожей функции: разделять имена классов и методов.
>мне одному только кажется, что разделение неймспейсов и классов -- это практически то же самое?

не знаю, за других говорить не буду.
но мне так не кажется ни разу.

>неймспейс -- дословно: "пространство имён". когда имя в пространстве занято,
>будь то классом, функцией, или другим неймспейсом, то это имя уже занято.
ну это полная ерунда..
"если есть такой класс - не может быть функции с таким именем"
"если есть такой неймспейс - не может быть класса с таким именем"
так, что-ли?
как много из тех языков, которые ты упоминал, вводят такие ограничения?

>по-моему, очень стройно получается, разве нет?
не-а.

>\ -- это:
>-) DIRECTORY_SEPARATOR под виндами
>-) воспринимается скорее как какая-то операция деления, чем разделитель неймспейса/класса

тебя же не смущает, что / - это DIRECTORY_SEPARATOR под *nix ?
или ты строку "usr/local" воспринимаешь как деление?

>-) нестандартно. нигде больше нет \ как разделителя неймспейсов.
НЕСТАНДАРТНО
вооо!
вот к этому всё и сводится.
очень серьёзный аргумент.

а что, предлагаемые решения: ввести обязательный пробел, :::, :>, <- и др. маразмы - это стандартно?
 

Ilya Bous

Новичок
tony2001
А как насчет точки? (".")
подо что она занята? И кстати это стандартное решение (C#, Java)
 

svetasmirnova

маленький монстрик
не к tony2001 :)
Ребят, а вам не всё равно какой разделитель будет? По мне были бы namespaces, а разделителем хоть что.
 

pachanga

Новичок
Спор, конечно, жаркий получился, прям как в internals :)

Однако, насколько я знаю, вся заваруха из-за вопроса о поддержке констант в namespace - если от них откажутся, то можно было бы использоваться разделитель ":", т.к. проблема с ":" и константами заключается в тернарном операторе (expr1) ? (expr2) : (expr3).

Но в любом случае, сам факт того, что эта проблема обсуждается не может не радовать, так глядишь, и namespace перестанет быть sugar syntax в глазах core php разработчиков.

Можно поблагодарить Derick Rethans'а и его date ;)
 

su1d

Старожил PHPClubа
Автор оригинала: tony2001
> сколько из этих языков транслируются, а не компилируются?
ЖабоСкрипт.

> и много ли ты знаешь языков, в которых есть variable variables?
ЖабоСкрипт, Флэш АС.

> (а то, может, убрать надо - я, например,
> такого в дугих языках не видел..)
уже видел, значит не надо.

> ты знаешь почему и то, и другое неприемлемо,
> а на стадии компиляции их отличить нельзя,
> т.к. язык не компилируемый.
имя неймспейса/класса никогда не используется в тренарном операторе. никогда и никак.

> "если есть такой класс - не может быть функции с таким именем"
вот мне тоже непонятно, с какого перепугу туда ещё и функции решили впихнуть...

> "если есть такой неймспейс - не может быть класса с таким именем"
> так, что-ли?
да. так.

> как много из тех языков, которые ты упоминал, вводят такие ограничения?
так ты ж "зарезал" все эти языки, потому что они не интерпретируются, и у них нет variable variables! зачем же ты сейчас взываешь к их помощи? =)

> а что, предлагаемые решения:
> ввести обязательный пробел, :::, :>, <- и др.
> маразмы - это стандартно?
это ваще ПЦ!
поэтому следует сделать ::
потому что стандартно -- это иметь один и тот же разделитель как между неймспейсами, так и между классами-методами.

NS1\NS2\Class::Method()
на первый взгляд имеет больше отношения к файловой системе, чем к иерархии классов.

-~{}~ 12.12.05 11:38:

> имя неймспейса/класса никогда не используется в тренарном операторе. никогда и никак.
ага. константы. функции. =(
блин. неймспейсы -- для ООП!

-~{}~ 12.12.05 11:48:

константы и функции в неймспейсах вообще дают больше проблем, чем преимуществ. к тому же ещё и идут против общей идеологии.

если ограничиться только классами, то тогда не нужно лепить горбатого с include_path в поисках нужного файла по имени неймспейса. всё (относительно) красиво реализуется через __autoload()
 

tony2001

TeaM PHPClub
>имя неймспейса/класса никогда не используется в тренарном операторе. никогда и никак.

expr1 ? namespace:class::method() : namespace:class::method2();

>> и много ли ты знаешь языков, в которых есть variable variables?
>ЖабоСкрипт, Флэш АС.

через eval() ?
это не то, о чем я спрашивал.

>> "если есть такой класс - не может быть функции с таким именем"
>вот мне тоже непонятно, с какого перепугу туда ещё и функции решили впихнуть...
>> "если есть такой неймспейс - не может быть класса с таким именем"
>> так, что-ли?
>да. так.

круто.
я против.
 

su1d

Старожил PHPClubа
не-не-не! два двоеточия:
expr1 ? namespace::class::method() : namespace::class::method2();

> через eval() ?
нет. через this[varVar].
$$varVar тоже ведь работает только в текущем поле видимости.

> круто.
> я против.
я тут весь из себя пытаюсь обосновывать свои за и против.
давай и ты тоже =)
 

tony2001

TeaM PHPClub
мне кажется странным, если существование одного объекта может как-то влиять на возможность существования другого, если они - разного типа.
 

svetasmirnova

маленький монстрик
> круто.
> я против.
Кстати я тоже против, так как мы получим то же о чего так стремимся избавиться: конфликты имён. На этот раз между классами в глобальном пространстве имён и namespaces.
 

si

Administrator
если можно будет иметь namespace и class с одиним именем и разделитель для namespace :: как тогда отличить:

foo::bar(); // вызов функции из namespace foo
foo::bar(); // вызов метода класса foo

выходит надо либо запретить иметь их с одни именем либо другой разделитель ...
 

su1d

Старожил PHPClubа
> Кстати я тоже против, так как мы получим то же о чего так стремимся избавиться: конфликты имён.
согласен. некрасиво получится.

> выходит надо либо запретить иметь их с одни именем либо другой разделитель ...
надо оставить неймспейсы только для классов.

если начнёшь втыкать туда функции и константы, то тогда придётся как-то указывать РНР корневую папку проекта.
с классами-то это всё решается через __autoload(), но вот когда в дело вступают функции/константы, начинается жопа.
предлагают делать поиск во всех частях include_path'а, но это ж будет жутко вертеть дисками на каждый запрос! в конце концов никто не захочет юзать такие красивые и удобные неймспейсы, т.к. придётся винты на сервере из чайника поливать, дабы те не дымились.
 

Ilya Bous

Новичок
Автор оригинала: tony2001
$var1.$var2
доброе утро.
да да извините извините....
так чем оно хуже виндового сепаратора "\"?

btw ИМХО функции в неймспейсах это зло - ибо смешение двух подходов: модульного и объектного -- до такого еще по моему никто не доходил

ps
так собрал кто-нибудь пропатченную версию??? (с проходящими тестами неймспейсов)
 

tony2001

TeaM PHPClub
>да да извините извините....
>так чем оно хуже виндового сепаратора "\"?
хм..
а где в PHP используется \ ?
нигде не ипользуется.
 

su1d

Старожил PHPClubа
# -- комментарий.
^ -- исключающее ИЛИ.

спакойствие! тока спакойствие!
 

Ilya Bous

Новичок
о блин все позанимали =))
а "~" ?

А да извините - побитовое НЕ

Если блин так спецсимволы расходовать - ни на что не хватит (по аналогии с !== можно сделать ^-^ как один токен -- будет круто HyperSpace^-^MetaGalaxy^-^Galaxy^-^Earth::selfDestroy(AS_SOON_AS_POSSIBLE))
:) :)

-~{}~ 12.12.05 23:19:

Так все таки кто-нибудь собрал пропатченную версию???
Хоть НЕТ ответьте =))

-~{}~ 12.12.05 23:25:

И вапще /me пошел читать драконову книгу компиляторов -- как то ведь эти мерзавцы писавшие C++/Java/C#/... с проблемой справились...
 

svetasmirnova

маленький монстрик
>Так все таки кто-нибудь собрал пропатченную версию???
Я - НЕТ (отчасти из-за переезда => недокомплекта компиляторов)
А в чём проблемы у тебя со сборкой?
 
Сверху