LINUX.ORG.RU

Perl 5.12

 ,


0

0

Вышла новая версия языка программирования Perl, из новшеств:

  • Новый оператор "...", называемый Yada Yada.
  • Теперь поддерживается Unicode 5.2.
  • Новый экспериментальный регексп «\N».
  • Поддержка DTrace.
  • Удалено 32 битное ограничение аргументов
  • и многое другое.

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



Проверено: maxcom ()
Последнее исправление: mono (всего исправлений: 2)
Ответ на: комментарий от byss

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

/* потягиваясь за чипсой */ а вот нефиг за компом жрать! ;)

а ещё помню его ответ на мой фейспалм: «да ты чо, тупой??! какие нах отступы??? они для ламерья и неудачнегоф!!!». как хорошо, что на моей текущей работе нет таких гениев ;)

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

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

Я ещё не дописал. ;) Полная система будет раза в два больше. Там есть мод_перл, разные виртуальные машины для разных систем, передача сообщений через JSON, серверная часть на POE...

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

Спасибо за сарказм, но я и на звание хорошего Си-программиста не претендую, а еще только учусь на него) Хотя, по отзывам сокурсников, у меня получается писать довольно-таки внятно (правда, сложно писать кривые программы в 50 - 200 строчек, хотя... у тех же самых однокурсников получается, ну, не считая того, что это все субъективно, очень уж нелогично и в непонятном стиле как минимум).

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

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

Но между перлом и Си есть в этом плане одно отличие. В Си уже выработалось понятие кодинг стайла и есть несколько направлений (школ). А в перле этого ещё нет и каждый придумывает своё.

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

> А в перле этого ещё нет и каждый придумывает своё.

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

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

> ... сюда включаются и недохакеры, пишущие на Си что-то вроде for (int i=0,j=10;i<j;a[i++]=a[--j]);

Это ерунда. Это всего одна и при том не самая непонятная строка.

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

> Код без отступов - это первый шаг к однострочникам.

вы так говорите, как будто это что-то плохое ;) (однострочник на сях;) — жаль только, что gcc не умеет сразу выполнять скомпиленный кот^Hт^Hд, а не писать его в фе^Haйл…).

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

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

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

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

Это плохо.

Программирование - инженерная работа. Инженерная работа осущетсвляется с соблюдением стандартов. ГОСТы «анально ограничивают свободу стиля» инженеров - и те почему-то не умерли.

Пионеры от перла вредят развитию индустрии.

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

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

Да ерунда ;) Я на Си с 89г пишу, ко многому притерперлся. Раньше удивлялся как народ пишет for(i=0; i < strlen(s); ++i) - я тут очевидные O(n*n) вижу, а многим фиг объяснишь почему.

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

> Пионеры от перла вредят развитию индустрии.

При чём тут перл?

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

а как же perlstyle (Perl style guide) который давно появился в пространстве perldoc?

Perl::Critic давно написан и активно используется и ссылается на книгу Perl Best Practices (PBP)

перл активно используется сисадминами которые зачастую плохо знакомы с языком и культура разработки низка - определяющие черты sysadmin style

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

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

Ну, однострочник на Си - это фантастика, если не брать в расчет программу, в которой все библиотечные функции написаны с нуля (чтобы выкинуть #include`ы, которые требуют себе отдельной строки, емнип).

А в gcc еще не находили уязвимостей, позволяющих выполнять произвольный код? ;) Опять же, совсем не знаком со взломом, но, имхо, выполнить свежескомпиленную программу довольно-таки сложно) (криво сейчас написал, но, надеюсь, все поняли, что я имел в виду)

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

Мой опыт не настолько внушительный, конечно, но я тоже вижу тут кучу лишних тактов процессора :) Хотя, современные компиляторы, возможно, оптимизируют даже такое. Быдлокодеры, велкам...

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

> чтобы выкинуть #include`ы, которые требуют себе отдельной строки

gcc -include stdio.h -include stdlib.h -include X11/Xlib.h … -x c - <<<'int main() { … }'

> А в gcc еще не находили уязвимостей, позволяющих выполнять произвольный код? ;)

gcc здесь вообще ни при чём. man mmap на предмет PROT_EXEC. это если «санкционировано». если нет — см. glibc, в котором в своё время находили немало переполнений буфера.

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

>gcc -include stdio.h

Это чит ;) А за опцию спасибо, буду знать, man gcc, и, тем более, info gcc слишком объемные уж, не осилил.

Может я чего-то не понимаю, но чем поможет в _исполнении_компилируемого_в_данный_момент_ файла mmap в его коде?

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

> Это чит ;)

это фича!!!11 ;)

> Может я чего-то не понимаю, но чем поможет в _исполнении_компилируемого_в_данный_момент_ файла mmap в его коде?

я неправильно понял вопрос. никак. mmap позволит выполнить в рантайме произвольный код.

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

Вот и я удивился этому mmap'у :) А вопрос изначально был, собственно, Ваш:

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

Так что, видимо, это я что-то не так понял ;)

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

>Чую, в 5.14 (Перл 6 никогда толком не вылезет - я верую в энто :) ) введут операторы на основе символов китайского алфавита.

Perl 6(а именно rakudo 1.0 (иначе *) будет уже готова к концу июля)

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

> А вопрос изначально был, собственно, Ваш: >жаль только, что gcc не умеет сразу выполнять скомпиленный код Так что, видимо, это я что-то не так понял ;)

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

$ gcc -include stdio.h -x c -o /tmp/ttt - <<<'int main(){return printf("%.16lf\n",318.16);}' 
$ /tmp/ttt
вот если бы здесь ограничиться одной командой, типа «perl -e …», т.е. нечто вроде «gcc -include stdio.h -x c -pipe -e - <<<'int main(){return printf(«%.16lf\n»,318.16);}», после чего скомпилированный код будет размещён в ОЗУ и выполнен вообще без обращения к фс…

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

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

Да ерунда ;) Я на Си с 89г пишу, ко многому притерперлся. Раньше удивлялся как народ пишет for(i=0; i < strlen(s); ++i) - я тут очевидные O(n*n) вижу, а многим фиг объяснишь почему.

А можно теперь для быдлокодеров-недоявистов (эт я про себя исключительно) правильный вариант цикла?

Toll ★★
()

> The yada yada cannot stand in for an expression that is part of a larger statement since the ... is also the three-dot version of the range operator.

There are some cases where Perl can't immediately tell the difference between an expression and a statement.

узнаю перл :-)

впрочем, для скриптов на 50 строк кода (+150 строк данных) перл самое то

(дипломатично промолчу, что я думаю про скрипты в 8000 строк...)

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

> У меня последняя программа на перле 8 тыщ строчек

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

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

> Вы ширину, ширину строчек огласите! И расскажите, выстраивается ли текст программы в приятный глазу узор, наподобие персидского ковра.

Персидский узор и ширИны строк, это пожалуй к сишникам и явунам, у них все это замечательно получается :-D

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

Заметил некоторое время назад, что в коде новых модулей на CPAN'естали активно применяться наработанные best practices. То есть, например, многие, вместо того, чтобы городить свой уникальный способ обработки ошибок времени исполнения, пользуются штуками типа Exception::Class, и тому подобное.

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

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

> Вы ширину, ширину строчек огласите!

;) К сожалению, хотелось бы иногда поменьше ширину, но что поделаешь, раз влазят в 26" экран, значит и так хорошо ;)

И расскажите, выстраивается ли текст программы в приятный глазу узор, наподобие персидского ковра.

Нет, хотя Eclipse/EPIC при форматировании старается ;)

Да, Object::InsideOut мне очень нравится. Хотя больше понравилось бы, чтобы всё это в языке уже было.

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

Это если s не меняется в теле цикла. Если меняется, то ничего не поделаешь, надо вводить структуру, a-la std::string и хранить в ней вычисленное значение длины строки. Как правило, в момент исполнения той или иной строковой операции изменение длины известно, или, по крайней мере, вычисляемо с меньшими, чем постоянный strlen, трудозатратами.

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

> Это если s не меняется в теле цикла.

99% случаев.

Если меняется, то ничего не поделаешь, надо вводить структуру, a-la std::string и хранить в ней вычисленное значение длины строки. Как правило, в момент исполнения той или иной строковой операции изменение длины известно, или, по крайней мере, вычисляемо с меньшими, чем постоянный strlen, трудозатратами.

Если речь про одну строку, то достаточно одной переменной, которую будем [пере]вычислять по мере надобности.

std::string может оказаться коварной штукой, надо знать, когда можно, а когда стоит воздержаться от использования. И ещё, это недоступно в Си, хотя у меня есть свой str.h с а-ля структурой ;)

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

вообще говоря в джаве String.length() вычислений не производит, но можно, например, так:

for (int i = 0, j = s.length(); i < j; ++i)

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

> вообще говоря в джаве String.length() вычислений не производит

И? В жаве нет strlen(), можно догадаться, что речь про Си. В С++ str.size() тоже не производит вычислений.

for (int i = 0, j = s.length(); i < j; ++i)

Интересный авангард, только непонятный: зачем нужна j, когда операция s.length() и так проста?

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

> 99% случаев.

Lucky you are :)

Ну и да, конечно, std::string - это всего лишь (популярный) пример того, как можно сохранять длину строки рядом с массивом символов. Не турбопаскаль же вспоминать :) Для pure-C есть GString из GLib'а, ну и, конечно, в любой задаче можно сэкономить. Главное, чтобы это не была экономия на спичках :)

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

Ха, это уже какой-то интерпретатор Си получается :)

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

>l = strlen(s);

for(i=0; i < l; ++i)

...; <--------------------

ААААА! В C тоже появился Yada Yada.

Vovka-Korovka ★★★★★
()
Ответ на: комментарий от Casus

> Раньше удивлялся как народ пишет for(i=0; i < strlen(s); ++i) - я тут очевидные O(n*n) вижу, а многим фиг объяснишь почему.

это тяжелое наследие pascal-я. там условия for вычислялись только один раз.

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

> Раньше удивлялся как народ пишет for(i=0; i < strlen(s); ++i) - я тут очевидные O(n*n) вижу, а многим фиг объяснишь почему.

Оптимизирующий компилятор такое девиативное программирование успешно исправляет. Вот и пишут кое-как.

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

>> В опенсорсе, нампример, всё более менее читабельно

потому что опенсорс зачастую - это студенты

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

Пионеры от перла вредят развитию индустрии.


Ути пути, а вот пионэры от пайтона наверное для индустрии соль небесная, ага )

anonizmus
()

перлу место в анналах (истории), в современном мире ему места не осталось

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

если с выходом стабильной версии перла6 перл5 умножат на 0


Да никто не умножит, перл5 уже даже если сильно захотят - не умножат на 0, слишком много нафигачено на нем )

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

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

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

> > 99% случаев.

Lucky you are :)

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

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

> перл активно используется сисадминами которые зачастую плохо знакомы с языком и культура разработки низка - определяющие черты sysadmin style

Если посмотреть на вопрос шире. На кого он вообще расчитан? Большие известные проекты на перле можно пересчитать пальцами двух рук. В основном это как раз наработки админа и потом выросшие из них более-менее крупные проекты.

Некоторое время назад у перла практически не было конкурентов в этой области и только сейчас его вытесняют из этой ниши. Так что не нужно говорить о нём как о «элитном» языке.

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

Напоминает средние века, аскетизм и самоистязание ранних христиан в надежде на обретение жизни вечной. Но ради чего самоистязание тут? Перл несёт в себе некоторые особенности языков 70-80 годов в виде кучи неявных переменных и обилия конструкций. Как язык общего назначения он однозначно проигрывает современным.

Давайте сравним по числу известных применений перла хотя бы с питоном. Имхо, перлу нечем и здесь похвастаться. Т.е. туго пошёл в массы.

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

> У меня последняя программа на перле 8 тыщ строчек

Ну, это ещё не так много... Хотя дело не в размере, написать можно и 200 строк таких, что хрен разберёшь. Просто перл такой язык специфический, к нему можно подпускать только людей с развитой самодисциплиной и чувством меры. То есть имеется проблема с пресловутым порогом вхождения, при том что язык и его инфраструктура позиционируются как RAD. В общем по соотношению сложность/мощность Перл не оптимален совсем, при этом достаточно кривоват. Что ставит под сомнение его нужность для чего либо окромя легаси.

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

> Если проводить аналогию - наверное перл нельзя давать в руки обезьян (как и гранату)

Да, а ещё в Перле большой подвох - это TMTOWTDI. Не пробовали участвовать в проекте с десятком программистов разного уровня из разных концов света? Это ад! У каждого свои представления о Перле - свой стиль, своё подмножество используемых фич, свой способ записи одного и того же. И хрен заставишь этих хакиров следовать каким либо гайдам. Они ж все творческие натуры, блин. Перл ещё можно допустить, когда сам себе демиург, или же стоишь с плёткой над группой рабов, прикованных к батарее. Ну ещё легаси, куда ж от него денешься. А так нафиг он нужен.

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

>> Раньше удивлялся как народ пишет for(i=0; i < strlen(s); ++i) - я тут очевидные O(n*n) вижу, а многим фиг объяснишь почему.

Оптимизирующий компилятор такое девиативное программирование успешно исправляет. Вот и пишут кое-как.

Это не кое-как. Это принцип: Не занимайться оптимизацией раньше выявления проблемы. Во вторых. Для рефакторинга лучше такой вызов функции, чем дополнительные встроенные переменные. То есть в процессе написание лучше что бы было так. После написания: если проблемы не составляет, то лучше не менять.

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

Не пробовали участвовать в проекте с десятком программистов разного уровня из разных концов света?


Пробовал немножко, там вопрос этот решался через ООП. Был сплошной ООП головного мозга, а у перла очень специфичный ООП, скажем так, что-то наглухо распределенное с кучей индусов писать надо конечно же не на перле, с этим я согласен на 200%

Поэтому просто использую этот язык для автоматизации, разной, особенно понравилось сетевое программирование на нем.

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