Что нового

Соревнование по уменьшению размера скомпилированного скрипта

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
В простеньком языке Neo Sign 0f Misery такой скомпилированный скрипт около 80 Кб, да и для достаточно сложных скриптов более 100 Кб не видел
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Suppir [?]
не понравилось:- функции для работы с текстом. Например, регулярные выражения необходимо прекомпилировать(как в Python);
ты это серьезно? компиляция рег. выражений и использование указателя на полученный шаблон это камень преткновения в AutoIt PCRE. при массивном использовании регвыров в AutoIt компиляция, которая происходит при каждом использовании шаблона, может заметно проигрывать в скорости с одиночной компиляцией. но даже если использований шаблонов не очень много, то хуже точно не будет.
вот что пишет гуру по этому поводу http://autoit-script.ru/index.php/topic,1504.0.html
хех... судя по твоему сообщению там, ты это уже видел :smile:
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Kaster
Perl не требует прекомпиляции рег. выражений (он просто автоматически прекомпилирует любое выражение, где нет интерполируемых переменных).
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Suppir
я, чесгря, стагнирую с твоего последнего поста :smile:
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Kaster
я к тому, что в Perl не нужно отдельной строчкой компилировать рег. выражение. Можно просто написать
if ($a =~ /tra-ta-ta/){print $a}

т.к. в "tra-ta-ta" нет интерполируемых переменных, то Perl автоматом его компилирует.
Это в 2 раза сокращает объем писанины.

А вот если написано:

if ($a =~ /$b $c/){print $a}

то Perl каждый раз будет подставлять в регулярное выражение переменные $b и $c (хотя можно использовать модификатор /o).
Но все равно не нужно несколько строчек писать, что очень удобно.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Код короче и мощнее. Например:

Код:
open(IN, "bd.txt");  # открыли файл для чтения
while(<IN>){ # читаем каждую строчку
	$database{$`}{$+}=$2 if /\t(Имя|Фамилия|Отчество|Адрес)\t(.+)/    # парсим данные и создаем базу данных в памяти
}

Эта короткая программа считывает файл вида:

id1 Фамилия Иванов
id1 Имя Петр
id1 Отчество Николаевич
id1 Адрес Северная, 54
id1 Стаж 5 лет # эти данные не заносятся в БД, так как "Стаж" не прописан в рег. выражении
id1 Возраст 30 лет # эти данные не заносятся в БД тоже
id2 Фамилия Кроликов
id2 Имя Филипп
id2 Андреевич
id2 Адрес Промышленная, 12
...
id1700

и создает структуру (хеш хешей) $database в памяти, которая выглядит как

$database{id1}{фамилия} = Иванов
$database{id1}{имя} = Петр
$database{id1}{отчество} = Николаевич
$database{id1}{адрес} = Северная, 54
$database{id2}...

т.е. создает базу данных. Причем скорость выполнения такого скрипта невероятно быстрая - гигабайт за считанные секунды (фактически со скоростью винта). И это при том, что Perl - интерпретируемый язык, скрипт можно написать в блокноте и запустить через "enter".

В строчке $database{$`}{$+}=$2 if /\t(Имя|Фамилия|Отчество|Адрес)\t(.+)/

$` - обозначает фрагмент строки до совпадения.
$+ - обозначает значение последней альтернации.
$2 - ну это просто - вторая совпавшая скобка.



Добавлено:
Сообщение автоматически объединено:

В общем, Perl очень хорош для обработки текстовых файлов. Поиск-замены, форматирование и т.п. очень удобны.
В Ruby большинство этих фишек слизали (в том числе $`, $', $+ и т.д.), но скорость работы на порядок медленней.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Но не проще же! Если убрать комментарии, то по самому коду далеко не каждый догадается, что он делает. Можно вообще всю программу в одну строку писать. А смысла?

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

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Suppir
аа. теперь понял тебя... я бы с натяжкой отнес это к недостаткам. все таки когда пишешь более менее весомый код, лишние пара строк - не проблема. это примерно как объявление переменных. в каких то яп их объявление обязательно, в других объявляются при первом использовании. это скорее особенности языка, нежели преимущество\недостаток
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
SyDr
Perl намного сложнее, это точно. Я примерно года три его использую, но практически не владею некоторыми синтаксическими фишками вроде ссылок на срезы хешей. Синтаксис AutoIt намного проще в освоении.

Kaster
насчет объявления переменных - ух, не люблю это дело. Поэтому никак не освою c# :smile:

из современных интерпретируемых языков мне нравится Ruby (можно сказать, что это Perl с человеческим лицом), но уж очень он медленный :(
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
SyDr
Suppir
Kaster

Вы ребята отвлеклись немного, от темы ушли так сказать :-X
 
Верх