LINUX.ORG.RU

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

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


0

0

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

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

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

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

Что напечатает эта перл программа?

s bbq oprint
q as a and print grep!
m aca, grep!
m cac, a...
c, a...
c and print
q aq a and print grep!
m pnp, grep!
m npn, n...
p and print and print grep!
m pnp, grep!
m npn, n...
p and print grep!
m cac, grep!
m aca, a...
c and print
q qe and q and printobe and print
q as a and print grep!
m aca, grep!
m cac, a...
c, a...
c and print
q aq a and print grep!
m pnp, grep!
m npn, n...
p and print and print grep!
m pnp, grep!
m npn, n...
p and print grep!
m cac, grep!
m aca, a...
c and print
q qe and q and print

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

>http://dev.perl.org/perl5/news/ -- как тебе? Какие мысли вызывает просмотр этой полной уныния страницы?

Лично у меня положительные. Кто меньше трепится тот больше успевает сделать :)
Да, и Ларри вроде как человек из поколений прошлого века, не ведомо ему новомодные блоги и жж.
По делу, если и читать,то только release-notes при апгрейде у себя в дистрибутиве.
Новость ни о чем. Я как писал на перле, так и буду писать и дальше, мне всех возможностей хватает.

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

> >Ъ-питон-хакеру нечем доказать окружающим что он Ъ. Потому он такой и злой.

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

Это высказывание является попыткой кому-то что-то доказать, а значит не может быть справедливым одновременно с высказыванием: "anonymous4 является Ъ-питон-хакером". Какое из них ложно?

askh ★★★★
()

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

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

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

+1

Или я красивый сегодня?

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

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

А зачем? Можно и не расстёгивать. Иногда -- и не стоит расстёгивать.

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

>Передергиваешь :) При чем тут libc и libz?

При том что интерфейсы не ломаются.

>http://dev.perl.org/perl5/news/ -- как тебе? Какие мысли вызывает просмотр этой полной уныния страницы?


Ничего не знаю. Я эту страницу впервые вижу, про 5.10.0 и релиз-кандидат 5.10.1 там ничего почему-то нет, а вот каждый день в Debian unstable обновляется десяток перловых модулей.

JackYF ★★★★
()

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

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

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

Дело не в том. А В том что в ферле от результата выполнения предидущей программы зависит является ли то что написано ниже вообще программой. eval есть ив жабаскрипте - тем не менее там все однозначно.

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

Кстати, интересная у них там формулировка:

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

Пока не доказано, что нечто гарантированно остановится, оно не имеет права называться алгоритмом, вроде как. Хотя, мы с Дональдом нашим Эрвином можем и ошибаться...

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

>Внезапно, блоки BEGIN выполняются на этапе компиляции

Нет. Оно выполняется ASAP а это ASAP включает в себя еще до выполнения конца парсинга если это возможно. В этом и суть - perl program could not be parsed w/o running this perl program.


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

>Где тут неопределенность?

При чем тут rand? Вопрос в том может ли быть текст перловой программы проанализирован без исполнения (хотя бы частичного) этой перловой программы. Ответ: не может.

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

> Подождите, подождите. Насколько я помню, в общем случае данная теорема относится вообще к любому более менее сложному языку программирования. Просто не для всех это точно доказано. Собственно в этом профессия программиста пока и отличается от профессии работника на заводе, тупо совершающего монотонные действия. Или я перепутал?

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

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

Где тут неоднозначность? Если уж взялись за джаваскрипт, то надо показывать неоднозначности с различием / /= // и regex literal. О чем даже в ecma стандарте говорится (см. начало секции 7).

dccp
()

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

И чё?

Чихал я...

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

>Да. Мне привести цитату из Camel?

Нет.

Five specially named code blocks are executed at the beginning and at the end of a running Perl program.
These are the "BEGIN", "UNITCHECK", "CHECK", "INIT", and "END" blocks.

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.

.....
An "END" code block is executed as late as possible, that is, after perl has finished running the program and just before the interpreter is being exited,

man perlmod

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

>>Я не программер и даже не админ, но ИМХО Python предпочтительнее будет

>Если ты не программер и не админ, какая тебе разница?

Иконки для Питона рисует, наверно. Шутка. :-)

mr_anonymous
()

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

Хорошо подкололи :(

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

и что? Какая часть по твоему тут не поддается статическому анализу?

Кю: статический анализ != статическая типизация.

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

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

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

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

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

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

>Или ещё проще:

А ты не заметил что ты доказал что программа исполнялась хотя и не вся? А что если я всю программу напишу внутри BEGIN - по твоему это будет обозначать что перл исполняет программы не исполняя их? В акм случае если ты в BEGIN вставишь rm -rf / и запустишь с -ce - тебе ничего не грозит?:) Ведь это же только syntax check.


r ★★★★★
()

$ locate .pl | grep -c .pl$
3100

$ uname -s
Darwin

А разных питонов из коробки тут вообще три штуки...

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

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

Да... За что меня бесят как раз такие вещи. or - ||, and - && и отсутствие обязательных скобок. Когда пишу что-то типа print join "/", split ":", $a or shift -- никогда не знаю "кто на ком стоял", поэтому, всегда пишу правильно скобки для группировки.

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

> Скрипты на нем быстро работают

и что мы пропустили?

tommy ★★★★★
()

Доигрался Ларри с симуляцией человеческих языков.

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

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

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

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

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

> Это называется "руки из жопы".

Это называть можно как угодно.

Но фактом было то что, проапргрейдился он из репов самой мандривы это раз, а два, это то, что мандрива платный дистр, что как бы намекает на линукс для домохозяек (с тех пор знакомый мой на убунту и прекрасно себя чуствует).

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

real_maverick ★★★
()

Все нга ПИТОН перл не нужен.

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

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

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

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

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

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

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

Новость - УГ. Задача неразрешима для любого Тьюринг-полного языка. Тут и базар разводить незачем и доказывать было нечего.

</thread>

name_no ★★
()

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

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

>Хороший же язык был... Скрипты на нем быстро работают. За что вы его так не любите?

они его не осилили :)

alex-w ★★★★★
()
Ответ на: комментарий от abraziv_whiskey

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

Следует добавить, что как известно, Бог написан на Lisp'е.

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

> pacman -R perl|wc -l

> error: failed to prepare transaction (could not satisfy dependencies)

Неудивительно — съесть-то все жемчужинки на экране пэкмэн может, а вот чтоб выср#ть их потом...

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

какие еще детские проблемы?
с юникодом и производными решили еще в 5.6 :-\

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

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

Еще-б тут кто знал что такое "задача останова" или "полнота по тьюрингу" :)

scott_tiger ★★★
()

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

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

> А Керниган и Ричи - не рождены смертной женщиной, а божественным образом написаны на C.

А что, идея. Вместо того, чтобы писать на <языке> транслятор <языка>, теперь будем на нём моделировать его автора, который должен после запуска изобрести этот язык.

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

>Есть мнение, что если немного изменить трактовку новости, можно от тех же дурачков добиться комментариев вроде «ура, опенсорц во все поля!», «perl жил, жив и будет жить».

Опенсурс - снова впереди: перл и задача остановки.

Перл5 - первый язык для которого доказанна невозможность статического парсинга(доказанна эквивалентность т.н. "Задаче остановки", которая как известно не имеет решения). Ни для одого из языков семейства .Net, такого доказательство Микрософт привести не смогла. Опенсурс снова впереди!

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

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

Тшшшшш, давай подождем, пока все троечники засветятся.

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

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

Да, ты явно не Ъ.

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

>> Если вам сложно понять его, то не пользуйтесь, юзайте простой и прямолинейный питон

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

Завидно, что выпендрица нечем?

Одному понятен микроскоп а другому увы только молоток.

tesla
()

/me тоже пришёл попрыгать на могиле

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

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

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

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