LINUX.ORG.RU

Доказана невозможность статического парсинга Perl 5

 , неразрешимость, ,


0

0

Формально доказана неразрешимость задачи статического синтаксического анализа Perl 5. В опубликованном доказательстве задача парсинга программы на Perl сводится к задаче остановки, которая, как известно любому школьнику, неразрешима.

Этот факт имеет важное практическое значение — он означает что в общем случае выяснить, что будет делать та или иная программа на Perl, возможно только выполнив саму программу. Методы статического анализа бессильны. Возникают ли подобые проблемы в Perl 6 — неизвестно.

Статьи (pdf): [1], [2], [3].

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

Мне кажется основная нелюбовь к perl вызвана тем, что он не говорит вам, "как правильно" делать, а большинство быдло-кодеров действуют по линейному принципу "howto step-by-step".
И когда им попадается в руки perl, естественно они не понимают что с ним делать и начинают брызгать слюни.
В любом случаи язык хороший и дал огромный прорыв в современном программировании, особенно если учесть сколько других популярных языков было сделано на его идеях.

>Всё равно его не брошу, потому что он хороший.


+!

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

перл уникален тем , что отличается свободой выбора алгоритмов решения конкретных задач и не вписывается в общую картину наиболее популярных стандартных языков
за что его и не-долюбливают :-)

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

>>Существует мнение, что это комплексы из-за того что подобную программу на питоне в одну строку не запишешь.

>Ну вообще-то Питон использует перловый диалект регулярных выражений

А брекеты он тоже использует? :^)

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

>>в любой редактор поддерживающий подсветку для перла.

>Это не поймет редактор , но компилятор поймет однозначно.

Но он сделает это не статически проанализировав код, а проинтерпретировав часть его.

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

P. S. Почему-то лоровская школота посчитала себя умнее авторов доказательства и, встретив знакомое упоминание проблемы остановки, стала весело улюлюкать по этому поводу.

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

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

>этот прикол стар как говно мамонта

Дык тут еще и контингент не тот, если бы какой-нибудь сайтец с помощью новичкам...

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

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

>неизвестного заранее кода, записанного в самой программе

>неизвестного кода, записанного в программе

>неизвестного кода в программе

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

>основная нелюбовь к perl вызвана тем, что он не говорит вам, "как правильно" делать, а большинство быдло-кодеров действуют по линейному принципу "howto step-by-step".

+100

на фразе "а еще этот алгоритм можно реализовать другим способом" их нещщщастный мозг перегревается, переходит в "безопасный режим", в котором уже ничего, кроме Питона не парсит ;)

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

Вот у меня вопрос.
Подрывает ли это суть ОпенСурца или нет ?
Какой смысл в откр.исходниках если все равно нельзя понять что делает прога ?

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

Я представляю, как обидно илите, осилившей перл... :) Они долгие годы скрипели мозгом, всасывали "особенности" синтаксиса этого чудоязыка, а все ради чего? Чтобы поиметь длинный и толстый ЧСВ и возможность уныло троллить тех, для кого ЯП -- инструмент решения реальных задач, а не объект для фапания :)

И особенно им обидно из-за того, что фапают они на мертвечинку, хотя сами никогда даже себе в этом не признаются :D

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

>Нет.

>A "BEGIN" code block is executed as soon as possible, that is, the moment it is completely defined, even before the rest of the containing file (or string) is parsed.


Ну так? Блок BEGIN выполняется, компилируется и исполняется до парсинга программы. Для того, чтобы проверить синтаксис, блок BEGIN нужно исполнить. И да, rm -rf я туда не засуну.

И... что?

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

>детские проблемы с utf-8

что? это какие же?

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

>Чтобы поиметь длинный и толстый ЧСВ и возможность уныло троллить тех, для кого ЯП -- инструмент решения реальных задач, а не объект для фапания :)

Остапа опять понесло?

Что ж вы пыжитесь, доказывая нам, что Перл труп? Если вы видите труп и считаете, что он труп, то разговаривать с ним вы не будете. Он же труп? Но вот если вы говорите "ты труп! труп!!!", значит, это только ваши желания.

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

Задача расстегивания бюстгалтера кавалера, как я понял, успешно Вами решена?

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

У меня нет никаких желаний по отношению к перлу :-Р

И я с ним не разговриваю :) Меня просто забавляют его экзальтированные фанбои :)

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

> Завидно, что выпендрица нечем? Одному понятен микроскоп а другому увы только молоток.

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

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

> Введи вот эту строчку

>sub x{}; x / 25 ; # / ; die 'not comment'

>в любой редактор поддерживающий подсветку для перла. Он подсветит вторую часть как коммент. И будет неправ.

Padre IDE показывает все правильно. Для разбора использует либо Scintilla, либо PPI.

chorny
()

Школота, а вы в курсе, что в С можно написать #include </dev/stdin> -- и это будет работать и даст такой же эффект, как рандомы и чтение пользовательского ввода в BEGIN-блоках?

Все, доказана невозможность статического парсинга С, R.I.P.

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

Да, забавно, я давно заметил что на лоре абсолютно любые новости о всех языках программирования в комментах содержат "не нужен, рип, выпилить" ,а если это Perl, Lisp, или упаси ктулху хаскель или окамл какой нить - то количество соплей, слюней, метанирования луж и красноглазия в отдельно взятом треде достигает такой концентрации что порой возникает надежда что школота, наконец, коллапсирует в своём порыве и мир станет снова чистым, добрым, и зеленым %-)

Почему бы школьникам которые кричат "выпилить" не показать пример - хотя бы один дистр очистить от так ими ненавидимого перла? Я имею ввиду что-то более функциональное чем busybox

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

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

<troll-mode>Не доказывая, а напоминая. А то перловщики вечно об этом забывают.</troll-mode>

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

>Они долгие годы скрипели мозгом, всасывали "особенности" синтаксиса этого чудоязыка, а все ради чего? Чтобы поиметь длинный и толстый ЧСВ

Если бы вы попробовали освоить несколько языков, вы бы поняли, что Перл выучить несколько проще, чем тот же Питон. И управлятся с ним потом тоже. Так что за ЧСВ - к питонистам. Они любят помериится, кто больше от кактуса откусил ;) А мы так, работаем себе спокойно.

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

> Мне кажется основная нелюбовь к perl вызвана тем, что он не говорит вам, "как правильно" делать,

Поэтому его крайне неудобно использовать в командах из более чем одного человека. Отсутствие стандартов -> ковбойский стиль -> неподдерживаемость.

> И когда им попадается в руки perl, естественно они не понимают что с ним делать

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

> В любом случаи язык хороший

Нет.

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

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

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

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

4.2

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

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

Отгоняем от него некрофилов. Ибо вонь, мухи, трупный яд - это всё плохо, это нам ни к чему.

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

> Почему бы школьникам которые кричат "выпилить" не показать пример - хотя бы один дистр очистить от так ими ненавидимого перла? Я имею ввиду что-то более функциональное чем busybox

А зачем? Если код работает - пусть работает, хоть на перле, хоть на фортране, хоть на брэйнфаке. Поголовье перлистов сокращается естественным путём. Рано или поздно перловые поделия проще будет переписать, чем поддерживать. Вот тогда и наступит коммунизм.

yk4ever
()

Могу сказать что perl мне дал возможность кодить на куче других скриптовых языков аля php, ruby, python, sh при этом к ним всем я всегда относился как очередному "урезанному perl-подобному языку".

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

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

Но он ещё не наступил, и до него вам бы ещё дожить %-) А пока я тоже могу метанировать в лужу: "Рано или поздно питоновские поделия проще будет переписать, чем поддерживать."

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

> при этом к ним всем я всегда относился как очередному "урезанному perl-подобному языку".

зря

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

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

>4.2

- Слышал Робертино Логретти?

- Да ну его, фальшивит, хрипит...

- ???!!!!

- Да мне Рабинович напел.

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

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

><troll-mode>Не доказывая, а напоминая. А то перловщики вечно об этом забывают.</troll-mode>


Деревня. Уборка урожая. Люди-перловщики неспеша работают.
Подходит питоновец.

- Хочу вам напомнить, что Перл - труп.
- ?
- Его невозможно статически распарсить!
- ???
- И в блоках BEGIN можно написать "rm -rf /"! И новых версий на сайте мало!
- А, это опять из той секты...

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

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

> что Перл выучить несколько проще, чем тот же Питон

Наглое враньё (пользуюсь обоими, Питоном сейчас больше).

> А мы так, работаем себе спокойно.

Верно, троллите не покладая рук.

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

>Так что, мы тут выясняем, что "перл плохой" потому что для него нельзя написать редактор с подсветкой синтаксиса для программеров, которые ничего не знают о хорошем стиле программирования?

Нет - мы тут выясняем что он не поддается статическому анализу. Какие буквы непонятны?

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

>Это не поймет редактор , но компилятор поймет однозначно.

Если определение X взять в BEGIN/eval - без исполнения этого кода _компилятор_ ничего не поймет.

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

>Ну так? Блок BEGIN выполняется, компилируется и исполняется до парсинга программы.

Ты что скрипач дальтоник? Он выполняется в момент _когда полностью определен_. И вообще - как это ты его собрался выполнять _до парсинга_?

>И... что?


ASAP вот что.

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

>Padre IDE показывает все правильно. Для разбора использует либо Scintilla, либо PPI.

Данный кусок таки можно проанализировать - я так сказать для иллюстрации идеи. Возьми его в BEGIN а x определи в eval - и уже будет нельзя.

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

>за ЧСВ - к питонистам

Ну ведь ложь же :) Если выстроить программистов по уровню ЧСВ, за первые места будут драться как раз перловики и функциональщики :)

>Они любят помериится, кто больше от кактуса откусил

Умнее ничего не придумалось? По поводу ЧСВ перловиков очевидно, в каком месте они его чешут -- в вопросе написания за сорок минут скриптов в одну строчку, которые потом за два часа не разберешь ;)

>А мы так, работаем себе спокойно

Работайте-работайте, угнетенный рецессивный вид :D

anonymous4
()

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

На CPAN ежемесячно появляется 30-50 новых авторов.

Perl активно поддерживается. Стоит посмотреть Moose где реализованы роли.

Насчет парсера мне очень любопытно смотреть всю эту дискуссию, учитывая, что я работал над модулем Perl::MinimumVersion, где используется парсер PPI и активно пользуюсь Perl::Critic, где он тоже используется. perltidy имеет свой собственный парсер, упрощенный.

Кстати говорят что шаблоны в C++ имеют такую же проблему.

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

> Для тех кто не знает - Perl жив и активно развивается.

Нет, он мёртв и "развивается" пассивно, по инерции. Посмотрите графики TPCI.

> На CPAN ежемесячно появляется 30-50 новых авторов.

Имею заметить, что PyPI по объёму трафика уже почти не уступает. И он будет расти, а перл будет падать. Потому что ковбои вымирают, а потребность в инженерах - растёт.

> Просто это может быть не завметно за воплями что Perl умер.

Да какие вопли. Скорее вздох облегчения.

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

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

Fixed.

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

>И вообще - как это ты его собрался выполнять _до парсинга_?
Не я, а интерпретатор. До парсинга всех не-BEGIN/INIT блоков. Так яснее?

>Он выполняется в момент _когда полностью определен_

О жесть. И кто же его определяет и когда?

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

>Да какие вопли. Скорее вздох облегчения.

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

А вы все так же делаете это: http://www.books.ru/img/666336.jpg

anonizmus
()

>> Мне кажется основная нелюбовь к perl вызвана тем, что он не говорит вам, "как правильно" делать,
>Поэтому его крайне неудобно использовать в командах из более чем одного человека. Отсутствие стандартов -> ковбойский стиль -> неподдерживаемость.


А где вы видели чтобы стандарт кодинга шел в самом языке программирования?
Может ещё там написано как переменные называть?

Я каждый год через свои руки пропускаю по 3-4 web-программера, так вот знаете что я скажу... нормальные программеры себя никогда так не назовут и кодят они все по разному и чаще криво, а это всё модные php, ruby, python. Среди них уже многие мыслят только таблично (это как в HTML таблицами, если что-то не помещается в двумерны масив или функция имеет рекурсию - для них это смерть) и дивично (нет не те кто по девкам специализируются, а те кто дивами верстают), а и ещё забыл они понимают и умеют программить "форму" и знают как делать печеньки/плючшки. А если такому вот модному "web 2.0 программеру" задать вопрос, что такое алгоритм? - и он висит.

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

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

Я это тонко намекаю что гринпис вас анально рано или поздно покарает за зоофилию, и коммунизм видимо наступит без вас %-)

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

>Мм, у перла есть школа? /r/ ссылку.

Имелось ввиду что люди что-то фундаментальное читали, и некоторые даже закончили среднюю школу, а кое-кто имеет степень доктора наук %) В отличии от %-)

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

> Нельзя написать преобразователь Perl->Си++
Почему это? Это почти тривиальная задача, достаточно просто вывести в файл код типа:
/*Сюда скопировать исходники интерпретатора перла, если они на C++ */
parse (char* prog){
/* Отсюда вызывается интерпретатор перла */}
main (){
parse ("сюда копируем исходник преобразуемой программы");
}

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