LINUX.ORG.RU

Вышли PHP Development Tools 2.0

 dltk, , ,


0

0

Вышла революционная версия популярного IDE для PHP, развивающегося под эгидой Eclipse Foundation. Модель новой версии переписана с использованием фреймворка DLTK (Dynamic Languages Toolkit), который позволил не только улучшить производительность и масштабируемость редактора, но и добавить новые функциональности, такие как Build Path (возможность отделения кода от ресурсов), Mark Occurrences, Override Indicators, Type Hierarchy, Open Type, Open Method и многие другие. Код ассистент (Code Assist) и функции навигации также были улучшены, и теперь они базируются не только на документации (PHPDoc), но и используют различные механизмы анализа кода PHP.

>>> Подробности

Ответ на: комментарий от tailgunner

>> Питонистам ведь табы официальная религия запрещает

> Я атеист.

Редкое счастливое исключение. Может объяснишь, за что питонисты предали табы анафеме? При том что именно для питоньего синтаксиса они очень уместны.

> Сочувствую. Может, тебе работу сменить? Скажем, перловый быдлокод править.

К счастью править чужой питонокод приходится не слишком часто. С унаследованным перловым кодом когда то приходилось дело иметь. Ничего там особо страшного нет. Как правило такая же унылая императивная лапша, только приправленная funny characters. Читается ничуть не хуже питонобыдлокода (одинаково скверно, я бы сказал).

> Может, дело в быдлокоде и его авторах?

Конечно. Вся соль как раз в том, что быдлокод на любом языке убог. И питоновские отступы проблемы читаемости не решают (потому что есть ещё такие вещи как структура кода, стиль именования и т.п.), зато создают весьма чувствительные неудобства и даже ограничивают возможности языка.

anonymous
()
Ответ на: комментарий от anonymous

> за что питонисты предали табы анафеме?

ХЗ. Подозреваю, что в великом флейме tabs-vs-spaces Гвидо был на стороне spaces :)

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

То есть никаких особых претензий к отступам у тебя нет? ;)

>> Может, дело в быдлокоде и его авторах?

>Конечно. Вся соль как раз в том, что быдлокод на любом языке убог.

О чем и речь.

> И питоновские отступы проблемы читаемости не решают

Мне тоже так кажется (мне никогда особенно не нравились семантическиеотступы), но по крайней мере они унифицируют вид программ.

> создают весьма чувствительные неудобства и даже ограничивают возможности языка.

Я лично не замечал особых проблем. Менять уровень вложенности блоков кода немного неудобно, и всё. Ах да, еще многострочных лямбд нет :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Я лично не замечал особых проблем. Менять уровень вложенности блоков кода немного неудобно, и всё. Ах да, еще многострочных лямбд нет

Да уж немного. По сути всё время приходится отслеживать отступ в каждой строке, иначе легко порушить семантику большого куска кода. То есть про автоформатирование сразу можно забыть. Даже определить к какому уровню относится следующая строка трудно. Выделить текущий блок или перескочить на его начало/конец невозможно без спец. средств (эксклюзивных для Питона) со стороны редактора. По-моему этого уже достаточно, чтобы задуматься о вменяемости такого синтаксиса. Есть и другие неудобства. Например, нельзя произвольно разбивать длинное выражение на несколько строк. Теоретически можно, но тогда совершенно запутаешься в уровнях вложенности. Кодогенерация на Питоне значительно затруднена. Тренироваться в REPL - мучение. И да, невозможность реализации многострочных лямбд - весьма досадное ограничение.

anonymous
()
Ответ на: комментарий от anonymous

> По сути всё время приходится отслеживать отступ в каждой строке,

Отслеживать вложенность нужно только тогда, когда она меняется, что бывает отнюдб не "всё время".

> иначе легко порушить семантику большого куска кода.

А больших кусков кода быть не должно.

> То есть про автоформатирование сразу можно забыть.

Таки да. Но с Питоном оно практически не нужно.

> Даже определить к какому уровню относится следующая строка трудно.

При глубокой вложенности. Но при глубокой вложенности это не очевидно в любом языке.

> Выделить текущий блок или перескочить на его начало/конец невозможно без спец. средств (эксклюзивных для Питона) со стороны редактора

А что, с тем же Си - по другому?

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

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

> Кодогенерация на Питоне значительно затруднена.

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

> Тренироваться в REPL - мучение.

Моежт быть - я не подсел на REPL.

> И да, невозможность реализации многострочных лямбд - весьма досадное ограничение.

Предложения по многострочным лямбдам отвергнуты по не-синтаксическим причинам, AFAIK.

В сухом остатке - невозможность автоформатирования, некое усложнение кодогенерации. Если это критично - есть много других языков.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Отслеживать вложенность нужно только тогда, когда она меняется, что бывает отнюдб не "всё время".

Ну да, я имел ввиду во время правки кода. В нормальных языках я вообще не думаю об оступах, просто после окончания правки жамкаю C-M-/ на всей функции. А тут такое не проходит. Вообще, питоновский код слишком хрупкий. Случайное нажатие Tab не в том месте - и семантика изменилась (а синтаксис может оставаться корректным). Семантическая значимость невидимых символов - это плохая идея, как ни крути.

> А больших кусков кода быть не должно.

Не должно. И тем не менее они есть. Повсюду, в том числе в стандартной библиотеке.

>> Даже определить к какому уровню относится следующая строка трудно.

> При глубокой вложенности. Но при глубокой вложенности это не очевидно в любом языке.

Да ну. Почему то мне намного проще подсчитать число закрывающих скобок, чем количество невидимых символов в начале строки. Даже если функция умещается в один экран, не так то просто визуально отследить уровни. Тут то и вылазят костыли вроде вертикальных линий. Хотя можно было просто подсветить парные скобки.

>> Выделить текущий блок или перескочить на его начало/конец невозможно без спец. средств (эксклюзивных для Питона) со стороны редактора

> А что, с тем же Си - по другому?

С-подобный синтаксис широко распространён, поэтому такие базовые операции, как подсветка парных скобок и прыжки между ними имеются из коробки практически везде (и реализовать их просто). Это уже достаточный минимум для комфортной работы с кодом. Для Питона же изначально требуется IDE или как минимум имаксовый python-mode (который здорово помогает, надо отдать должное). Не слишком ли жирно для скриптового язычка?

> Предложения по многострочным лямбдам отвергнуты по не-синтаксическим причинам

А по каким? Идеологическим? Помнится несколько лет назад я читал статью Гвидо, где он говорил о чрезмерном усложнении парсера. При этом даже экспериментировать он вроде не стал. Ещё какие-то волонтеры пытались реализовать многострочную лямбду, но упёрлись именно в INDENT/DEDENT и бросили эту затею. Если не ошибаюсь на LtU это проскакивало.

anonymous
()
Ответ на: комментарий от tailgunner

> есть много других языков

К счастью :) Добровольно не стану писать на Питоне даже скрипт на 50 строк. Но грызть этот кактус всё же приходится порой..

anonymous
()
Ответ на: комментарий от anonymous

>Случайное нажатие Tab

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

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

А в сях: "Тут то и вылазят костыли вроде скобок". Зачем мне делать то, что среда за меня сделает лучше?

>С-подобный синтаксис широко распространён

А в руби - енды. И так далее. везде своё - и то что вы написали далеко не самое сложное. Так что не аргумент

theos ★★★
()

Довольно странно читать тему, в которой обсуждение ведется исходя из предположения, что пых-пых нужен.

Minoru ★★★
()
Ответ на: комментарий от theos

> А в С слуачайная печатка = на == меняет семантику. может просто стоит использовать нормальную среду, которая такое фиксит?

Не подскажешь что за волшебная среда фиксит такие ошибки? Я нажал Tab не на той строке - она сдвинулась на один уровень и внезапно оказалась совсем в другом блоке. Код может остаться совершенно корректным, но делать уже совсем не то, что задумано. Сишная путаница '=' и '==' - это косяк того же рода, но он возможен далеко не в каждой строке, и в нём намного проще распознать ошибку.

> А в сях: "Тут то и вылазят костыли вроде скобок". Зачем мне делать то, что среда за меня сделает лучше?

Это не костыли, а часть синтаксиса. И в том то и дело что среда не сделает лучше - она мысли читать не умеет. Разделение кода на блоки прерогатива программиста, и совершенно глупо отказываться от явного символа конца блока в надежде, что волшебная среда всё разрулит. В итоге это приводит к нелепым ограничениям и только добавляет ручной работы.

> А в руби - енды. И так далее. везде своё - и то что вы написали далеко не самое сложное. Так что не аргумент

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

anonymous
()
Ответ на: комментарий от anonymous

>Я нажал Tab не на той строке - она сдвинулась на один уровень 

>это косяк того же рода, но он возможен далеко не в каждой строке

Так в питоне тоже такие случаи не часты

zz
if aa:
  print()
  if d:
     good()
  oops()
     good()
  if d:
  oops()
такой код компилятор отсеивает. Я знаю что в таком случае:
if a:
  nested1()
  nested2()
oops_it_must_be_indented()
будет плохо. но в сях, поверь, вот такой фигни тоже хватает:

while(true);
  oops_there_is_semocolon_beofre();

while(true)
  command();
  command_not_in_this_block();

theos ★★★
()
Ответ на: комментарий от anonymous

>среда не сделает лучше

Как сказать. для меня вот вертикальные линии более наглядны, чем куча скобочек.

theos ★★★
()
Ответ на: комментарий от theos

> но в сях, поверь, вот такой фигни тоже хватает:

Ну сделай над этим кодом indent-region в имаксовой c-mode и посмотри что получится. Для Питона же восстановить исходную семантику не получится никак.

anonymous
()
Ответ на: комментарий от AndreyKl

> Мне лично в емакс-модах что для php что для си++ не хватает нормального браузинга классов, конетксного автодополнения (чтобы понимал, в каком я классе и предлагал методы, а не все подряд шпарил), ну и ещё по мелочи того, что так удобно реализовано в еклипсе (на примере прошлого pdt).

Я ж о том и говорил вроде :-)

kost-bebix ★★
()
Ответ на: комментарий от anonymous

> То есть про автоформатирование сразу можно забыть

определите, что такое автоформатирование для питоновского кода

> Даже определить к какому уровню относится следующая строка трудно. Выделить текущий блок или перескочить на его начало/конец невозможно без спец. средств (эксклюзивных для Питона) со стороны редактора.

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

> Кодогенерация на Питоне значительно затруднена.

а, теперь все понятно. нет средств "программирования" мышкой. в этом смысле питон сосет.

> И да, невозможность реализации многострочных лямбд - весьма досадное ограничение

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

теперь понятна суть ваших претензий к питону: лепить всю программу одним огромным куском кода с десятью уровнями вложенности в питоне неудобно. и слава богу, что в питоне это неудобно! это не должно быть удобно!

anonymous
()
Ответ на: комментарий от anonymous

>> Кодогенерация на Питоне значительно затруднена.

>а, теперь все понятно. нет средств "программирования" мышкой. в этом смысле питон сосет.

=/ узнайте уже наконец о генеративном подходе. При чём здесь "программирование мышкой"?

Кстати, что то я очень сомневаюсь что затруднена. Отступы и скобки тривиально взаимозаменяемы. Это самая меньшая проблем кодегенерации.

theos ★★★
()

Лучшим редактором пхп был для мен фар с колорером..А так что никто зенд в глаза не видел?

Konstantyn
()
Ответ на: комментарий от spektom

Несогласен с вами. Это кому как , мне например достаточно того что дает ctags + плюс парочка плагинов нормальной контекстной подсказки для php пока нет в виме но это меня на пугает так как если вы забыли как называется тот или иной метод который вам предоставляет тот или иной класс его можно быстро открыть и просмотреть в VIM для этого имеются базовые плагины , также +zsh + xdb и много других инструментов которые помогают в работе над довольно внушительными проектами ( unix-way :) ).

crono
()
Ответ на: комментарий от theos

> =/ узнайте уже наконец о генеративном подходе. При чём здесь "программирование мышкой"?

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

anonymous
()

Кусочек сахару троллям ☺

В стандартном PHP расширении gd обнаружена проблема безопасности, связанная с возможностью доступа злоумышленника к областям памяти процесса (например, можно получить RSA ключи сохраненные в памяти httpd). Уязвимость присутствует в PHP 5.2.8.

via http://www.opennet.ru/opennews/art.shtml?num=19637

nnm
()
Ответ на: комментарий от anonymous

>попытки компенсировать отсутствие лаконичности языка средствами

Советую хотя бы почить http://en.wikipedia.org/wiki/Automatic_programming, не полениться и пройти там по ссылочкам - чувствую вы откроете много нового ;)

theos ★★★
()
Ответ на: комментарий от theos

> Советую хотя бы почить http://en.wikipedia.org/wiki/Automatic_programming, не полениться и пройти там по ссылочкам - чувствую вы откроете много нового

сходил, но абсолютно ничего нового там не увидел. все тот же примитивный метод программирования, называемый copy-n-paste, завернутый в красивую оболочку из умных терминов.

"Generative programming is a style of computer programming that uses automated source code creation through generic frames, classes, prototypes, templates, aspects, and code generators to improve programmer productivity."

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

задолбали студенты, наслушавшиеся лекций теоретиков-маразматиков, налепивших дерьма типа corba.

anonymous
()
Ответ на: комментарий от anonymous

Это нужно тем языкам, у которых описательной выразительности нехватает для описания конкретной модели (любые языки т.н. "общего назначения"). У питона (как и у любова языка программирования, который я видел) она никакущая. В динамических языках это подпирается костылём динамичности, который сильно уменьшает майнтабельность, а зачастую и производительность. Мне кажется, у вас просто программизм головного мозга, и вы считаете что программирование==кодинг небольших приложений.

theos ★★★
()
Ответ на: комментарий от anonymous

Кстати, судя по "метод программирования, называемый copy-n-paste, завернутый в красивую оболочку из умных терминов." вы ничего не поняли. при чём наверняка потому, что хотели не понять, а просто самоутвердится. Если вы всё таки хотите чему нибудь поучитсья, а не просто пополеваться на "оболочку из умных терминов" советую почитать Language Workbench Фаулера.

theos ★★★
()
Ответ на: комментарий от anonymous

Кстати. Вот вам пример генеративного подхода, который, я надеюсь, вы всё так знаете. генерация парсера по грамматеке. всякие bison, yacc, antlr (antlr, кстати, умеет генерить питоновский код парсера). Ну конечно же это "copy-n-paste, завернутый в красивую оболочку из умных терминов" и "это нужно лишь тем языкам, в которых лаконичность недостижима". Ну-ну.

theos ★★★
()
Ответ на: комментарий от theos

> от вам пример генеративного подхода, который, я надеюсь, вы всё так знаете. генерация парсера по грамматеке. всякие bison, yacc, antlr (antlr, кстати, умеет генерить питоновский код парсера)

не надо теплое с соленым мешать. так вы мне начнете компиляторы в качестве примеров "генеративного подхода" демонстрировать.

anonymous
()
Ответ на: комментарий от theos

> Вот вам пример генеративного подхода, который, я надеюсь, вы всё так знаете. генерация парсера по грамматеке.

вот вам пример того, как в питоне можно обходится без генераторов парсеров. http://pyparsing.wikispaces.com/.

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

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

anonymous
()
Ответ на: комментарий от theos

> Кстати, судя по "метод программирования, называемый copy-n-paste, завернутый в красивую оболочку из умных терминов." вы ничего не поняли. при чём наверняка потому, что хотели не понять, а просто самоутвердится. Если вы всё таки хотите чему нибудь поучитсья, а не просто пополеваться на "оболочку из умных терминов" советую почитать Language Workbench Фаулера.

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

anonymous
()
Ответ на: комментарий от anonymous

> рад бы учится

"учиться", чурка нерусская :) (это я так сам себя обозвал. для тех, кто подумает про русофобов)

anonymous
()
Ответ на: комментарий от anonymous

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

Во первыз. ANTLR генерит код который не то что бы удобно, но терпимо отлаивать. Но дело даже не в этом. Почему нонсенс? Почему в байткод - ненонсенс, а в код программы - нонсенс? в код программы удобнее по куче причин.

>генерация исходного кода - костыли

theos ★★★
()
Ответ на: комментарий от anonymous

>вот вам пример того, как в питоне можно обходится без генераторов парсеров. http://pyparsing.wikispaces.com/.

А на с++ есть boost.spirit. Только всё это ну добно неудобно читать, писать, и сильно медленнее генерированых парсеров (для полноценных грамматик, а не примперов из туториала). А на не сильно сложных входах вполне хватает регекспов.

theos ★★★
()
Ответ на: комментарий от anonymous

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

А генерация ассемблера не костыли? костылём можно обозвать всё что угодно, и компьютер в том числе.

theos ★★★
()
Ответ на: комментарий от theos

> А на с++ есть boost.spirit. Только всё это ну добно неудобно читать, писать

Спирит говно, а вот pyparsing - чистое BNF. Чище ну просто некуда. Не хватает только ленивости, из-за этого нужно кое-где вставлять forward declarations, в отличие от хаскеля.

Помимо этого, на питоне проще генерировать не код, а сразу AST, так гарантированно не будет синтаксических ошибок. В стандартной библиотеке есть всё необходимое. Но даже если хочется странного, расставлялка отступов пишется в 10 (десять) строчек. Сам напишешь или маму будешь просить?

class Generate(object): def __init__(self): self.level = 0 def start_block(self): self.level += 1 def end_block(self): self.level -= 1 def write_line(self, line): print ' ' * self.level * 4 + line

anonymous
()
Ответ на: комментарий от anonymous

>генерация любого исходного кода - костыли.

Ммм. какой интересный аналитег. Скажите, а генерация ксмля - это наверно тоже костыли? Вы хотите сказать, что не костыли, когда получаетс что то отличное от blob на выходе, а когда результат читаемый - то сразу костыли?

theos ★★★
()
Ответ на: комментарий от anonymous

>пирит говно, а вот pyparsing - чистое BNF. Чище ну просто некуда.

Фееричненько. Чистый бнф это:

a := b | c | (d e);

а то что я там вижу - не "чистый бнф".

>Помимо этого, на питоне проще генерировать не код, а сразу AST

Antlr справляется с этим не хуже

>Сам напишешь или маму будешь просить?

Какие мы снисходительные ;)

И ещё раз - читабельность у этого хуже чем у соответствующего DSL. и скорость не идёт ни в какое сравнение. Вы не отвечаете на вопросы ;)

theos ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.