Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кеширование скомпилированного Perl-кода, Компиляция перл-кода 
:(
    Опции темы
djpan
Дата 17.1.2005, 12:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Господа, имеется такой вопрос.
Есть очень навороченная система на перле (не веб, просто работа с файлами и всем чем только можно), состоящая из сотен pl-файлов и тысяч pm-файлов. Использование модулей друг другом (use) идёт на несколько уровней (5-10).
Произошёл случай. Внесли незначащее изменение в один pl-файл (просто добавили коммент). После этого всё перестало работать. Лезу разбираться и обнаруживаю что там на много уровней ниже в одном модуле просто есть тупая ошибка и реально даже непонятно как до этого всё работало. Модуль, в кот. ошибка, был изменён где-то пол-года назад, до этого там версия была рабочая.

У меня складывается ощущение, что перл как-то где-то хранит промежуточно скомпиленные исходники и всегда работает с ними, т.е. последние пол-года вызывалось именно что-то скомпиленное и закешированное. Просто факт изменения файла .pl "перетряхнул" всё дерево модулей под ним, заставил ещё раз всё заново пересобраться и только сейчас оно вылезло.
Почему такое перетряхивание не произошло тогда когда появилась ошибка в модуле - не знаю. Это просто моя версия, т.к. вообще ничего больше в голову не приходит.
Факт в том, что до этого работало, а после добавления коммента в запускаемый файл .pl - перестало и именно из-за ошибки в модуле, кот. появилась ещё хрен знает когда, но её эфект проявился только сейчас. Т.е. как-будто бы последние пол-года работала ещё та, старая, версия модуля.

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

  Вверх
korob2001
Дата 17.1.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 6
Всего: 61



Вообще-то Perl транслирует программу каждый раз, когда она запускается. Может эта проблема была и раньше, просто её никто не замечал, так как система состояла из сотен .pl файлов и тысяч .pm . О том как работает Perl, очень подробно написано в книге "Программирование на Perl" 3 издание Л.Уолл, Т.Кристиансен.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
djpan
Дата 17.1.2005, 17:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Проблема сейчас в том, что из того модуля удалена одна функция, кот. выше в иерархии вызывалась.
Такое не заметить нельзя было. Вот сейчас оно просто вываливаться стало, оно и понятно.
Как же ж оно работало нормально раньше при отсутствующей функции-то? Классно работало, та функция типа вызывалась, всё отрабатывало smile
Где-то оно всё-таки закешировало это дело.

Как перл себя ведёт в случаях use и require (кроме момента реального подъёма модуля) ?

Под рукой этой книги нет сейчас. В инете кто-нибудь знает где какое-нибудь описание есть по данному вопросу?
  Вверх
dimes
Дата 17.1.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



mod_perl? fast_cgi?
PM ICQ   Вверх
Guest
Дата 17.1.2005, 17:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Используется обычный ActiveState Perl 5.8.3

  Вверх
korob2001
Дата 17.1.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 6
Всего: 61



Какой интерфейс у проекта? Может проблема в браузере?
Цитата

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

У меня сегодня экзамен заканчивается в 22:00, после я обязательно зайду домой за этой книгой. Попробую поискать, ответ на эту траблу.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
djpan
Дата 17.1.2005, 18:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Интерфейс - да просто вызов из командной строки pl-файла (вернее из батника вызов идёт, если совсем уж точно).
Тут нет веба. По-крайней мере в глючащей части.

  Вверх
korob2001
Дата 18.1.2005, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 6
Всего: 61



Вот что пишет Лари Уолл, Том Кристиансен и Джон Орвант в книге "Программирование на Perl":
Как работает Perl
Когда на вход компилятора Perl поступает программа Perl, то в первую очередь он пристапает к лексическому анализу: разбивает программу на основные синтаксичекие элементы, часто называемые лексемами. Если взять программу:
Код

print "Hello, world!\n";

то лексический анализатор выделит в ней три лексемы: print, "Hello, world!\n" и завершающий символ точки с запятой. После этого проводится синтаксический разбор последовательности лексем, устанавливающий взаимосвязь между лексемами. В Perl граница между лексическим и синтаксическим анализом более расплывчата, чем в других языках. ( Имеется ввиду в других копьютерных языках. Вы поймёте, с чем это связано, если представите себе, какой различный смысл может иметь new Critter в зависимости от того, существует ли пакет Critter или подпрограмма с именем new. С другой стороны, мы постоянно разрешаем такого рода неопределённости, разговаривая на естественных языках.)

После проведения синтаксического анализа программы и, предположительно, её осмысленная программа компилируется в дерево кодов операций, представляющих операции назкого уровня, и, наконец, выполняется это дерево операций - если только Perl не был вызван с ключём -c("Проверка синтаксиса"), вызывающим выход по завершении компиляции. Именно на этапе компиляции, а не исполнения, выполняются блоки BEGIN, CHECK и команды use.


Ничего о кешировании кода нигде не сказано. Но я ещё пороюсь в учебниках.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Ramirez
Дата 18.1.2005, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: нет
Всего: 5



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

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

Это сообщение отредактировал(а) Ramirez - 18.1.2005, 11:46
PM ICQ   Вверх
Guest
Дата 19.1.2005, 14:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо за ответы.

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

Ещё видел однажды как глючил один cgi-script на перле. По коду видно, что всё в порядке, поломал какое-то время голову. Полез, вставил пробел в пустую строку, refresh - всё работает. Немая сцена.

Т.е. 2 раза в жизни я точно наблюдал очень странное поведение перла.
  Вверх
GoodBoy
Дата 19.1.2005, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: нет
Всего: 83



Цитата(Guest @ 19.1.2005, 14:54)
Т.е. 2 раза в жизни я точно наблюдал очень странное поведение перла.

Всему есть объяснения!!! smile


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Ramirez
Дата 19.1.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: нет
Всего: 5



Цитата(Guest @ 19.1.2005, 14:54)
Ещё видел однажды как глючил один cgi-script на перле. По коду видно, что всё в порядке, поломал какое-то время голову. Полез, вставил пробел в пустую строку, refresh - всё работает. Немая сцена.


Возможно я повторюсь, но такое вполне возможно если на сервере какой-нибудь mod_perl стоит...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.