Переработка библиотечного софта
Я чего долго не писал? Потому что у меня велосипеда не было! Потому что я решил вспомнить те отличные годы, когда я хорошо писал на Perl. Perl вообще отличный язык, который незаслужено забыт и вытеснен всякими мерзкими Python’ами. Вот не люблю Python. Не понимаю, когда мы «программируем на отступах». Но надо отдать должное, инфраструктура Python’а сейчас закрывает каждый чих. Как и мерзкий NodeJS. Есть же мем: «как определить, что число чётное? npm install odd». Вот также и с Python’ом.
Но я отвлёкся. Я решил вернуться к Perl потому что он что? Он хорошо подходит для обработки строк. Не зря же он Practical Extraction and Report Language («практический язык для извлечения данных и составления отчётов»). С самим изучением Perl у меня в своё время (лет 25 назад) прям не задалось. Мне попалась очень неудачная книжка по нему. Да-да, в те годы приходилось ездить на книжные ярмарки и покупать книжки, а потом ещё и читать их, чтобы чему-то научиться.

И вот в этой книжке, где-то после оглавления шёл листинг Perl кода. А Perl вообще очень специфичный язык. Он придерживается так называемого принципа TMTOWTDI (Тим Тоуди) – «There’s More Than One Way To Do It» – «Есть больше одного способа сделать это». А ещё у него много регулярок и не специфичных для других языков операторов. Например ~=, //, и прочее. В целом, если задаться целью – то можно написать абсолютно нечитаемый, но рабочий Perl код.
Но при этом это не недостаток (как и отступы в Python, в целом. Я просто их не люблю). Просто нужно писать всё правильно и придерживаться каких-то общих принципов программирования: методы называть нормально, переменные, разбивать методы и вот это вот всё.
Ну и вот я решил, что а почему бы и нет. Нашёл свой старый самоучитель по Perl. Потратил пару дней на штудирование (но до конца так и не дошёл, это реально очень «большой» язык). И принялся переписывать свою библиотеку. И что самое забавное, основной функционал (разбор архивов книг) я написал быстрее, чем на Java, даже с учётом того, что я не писал на Perl очень много лет. Да, я ловил много тупых ошибок, да я долго не понимал, почему возвращаемое значение превращается в какое-то странное выражение. Но!

Вот это всё перекрыло. А время запуска?
real 0m0,461s
user 0m0,152s
sys 0m0,027s
Это же на уровне сишечки уже. Поэтому я решил, что и фронт у меня должен быть тоже заточен на скорость. Поэтому я использую фреймворк VanillaJS для работы. Замеры его работы можно посмотреть у них на сайте: http://vanilla-js.com/. Да, возможно SPA (Single Page Application) на VanillaJS сложно написать, но опять-таки, мне важнее скорость работы и загрузки, чем удобство собственной разработки.
В итоге у меня уже готов просмотр книг, авторов, серий, жанров. Редактирование книг и авторов. Серии в процессе. Жанры потом. Сканер книг тоже требует доработки, которые уже дописаны, но это работа с базой предыдущего прогона, поэтому есть серия с пустым названием. Поэтому в неё попадает куча книг. А ещё поскольку книги готовят разные криворуки люди, есть авторы, у которых в отчестве ещё десяток авторов :)



Да, нет типизации. Да, можно потратить много времени на то, чтобы понять, почему у тебя возвращается не то, что ты ожидаешь, но при этом всё выглядит рабочим. Но мне кажется можно с этим смириться.
В итоге получилается что Perl работает напрямую – интерпретатор компилирует в байткод и выполняет. Нет JVM, нет JIT-компилятора, нет garbage collector’а, нет загрузки сотен классов при старте. Один процесс, минимум абстракций.
Java платит за свои гарантии – типобезопасность, управление памятью, мониторинг, потокобезопасность. Всё это стоит памяти и времени старта. Зато в большой команде с 200 разработчиками компилятор ловит ошибки до продакшна, а Perl молча подставит undef и пожелает удачи.
Мир свернул в энтерпрайз потому что бизнесу важнее предсказуемость, чем эффективность. Дешевле купить RAM, чем дебажить $hash{$ky} вместо $hash{$key} в 3 часа ночи на проде :)
Но для личного проекта одного разработчика — Perl идеален. Быстро, легко, делает ровно то, что просишь. Без церемоний.
Осталось немножко. Думаю за пару дней чистого времени я добью и выложу куда-нибудь сие творение.

Последние комменатрии