Pull to refresh
69
Karma
2.5
Rating
Виктор @TyVik

Full-stack developer

У вас нет причин использовать alpine для python-проектов

Python *DevOps *

По мотивам моего доклада на PyCon "Контейнеризация Python без боли". На своей практике я постоянно сталкиваюсь со спорами какой базовый образ лучше использовать для проектов: alpine или debian. Аргументы есть и у той, и у другой стороны, но мне это настолько надоело, что я решил сам разобраться и наконец-то поставить точку. В конце концов "В наше время верить нельзя никому, даже себе. Но мне - можно." (с)

Читать далее
Total votes 19: ↑17 and ↓2 +15
Views 4.1K
Comments 19

Работа над PEG на Core Developer Sprint

Python *Programming *Algorithms *
Translation

В этой статье я не буду рассказывать о новых фичах генератора парсера — я достаточно описал его в предыдущих частях. Вместо этого хочу рассказать что я делал на Core Developer Sprint на прошлой неделе, прежде чем всё сотрётся из моей памяти. Хотя большая часть материала так или иначе всё равно касается PEG. Так что мне придётся показать некоторый код, который задаёт направление в реализации PEG-парсера для Python 3.9.



Каждый год в течение последних четырёх лет группа разработчиков ядра Python собирается на недельный спринт в экзотическом месте. Эти спринты спонсируются принимающей стороной и PSF. Первые два года мы были у Facebook в Mountain View, в прошлом году была очередь Microsoft в Bellevue, а на этот спринт выбрали офис Bloomberg в Лондоне. (Должен сказать, что он выглядит довольно круто.) Слава core-разработчику Pablo Galindo Salgado за организацию!

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Views 985
Comments 0

Реализация остальных возможностей PEG

Python *Programming *Algorithms *
Translation

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



Мы рассмотрим следующие фичи PEG:

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Views 1.4K
Comments 5

Мета-грамматика для PEG парсера

Python *Programming *Algorithms *
Translation

На этой неделе мы делаем генератор парсеров «самостоятельным», то есть он будет генерировать свой собственный парсер.



Итак, у нас уже есть генератор парсера, часть которого является парсером грамматики. Мы могли бы назвать это мета-парсером. Мета-парсер работает аналогично сгенерированным: GrammarParser наследуется от Parser и использует тот же механизм mark() / reset() / hope(). Тем не менее, там всё это было написано вручную. Но правильно ли это?

Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Views 1.4K
Comments 0

Добавление экшенов в грамматику PEG

Python *Programming *Algorithms *
Translation

Грамматика становится ещё лучше, если вы можете добавить (некоторую) семантику в соответствии с правилами. В частности, для анализатора Python, который я разрабатываю, мне нужно возвращать узел AST из каждой альтернативы, поскольку я хочу придерживаться текущей реализации AST в CPython.



Многие грамматики используют соглашение, позволяющее добавлять экшены к правилам — обычно это блок кода внутри {фигурных скобок}. Точнее, они привязаны к альтернативам. Код в этом блоке пишется на том же языке, что и остальной компилятор, например, на C, дополненный некоторой возможностью ссылки на элементы в альтернативе. В оригинальном pgen Python я не добавил этот функционал, но для нового проекта мне бы хотелось его реализовать.

Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 1K
Comments 1

Леворекурсивные PEG грамматики

Python *Programming *Algorithms *
Translation

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



Рассмотрим это гипотетическое правило грамматики:


expr: expr '+' term | term
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Views 3.1K
Comments 1

Визуализация работы PEG парсера

Python *Programming *Algorithms *
Translation

В прошлый раз получился простой генератор парсера PEG. Сейчас же я покажу, что на самом деле делает сгенерированный парсер при разборе программы. Я погрузился в ретро-мир ASCII-арта, в частности, библиотеку с именем «curses», которая доступна в стандартной поставке Python для Linux и Mac, а также как дополнение для Windows.




<В конце статьи под спойлером приводится gif. Мне он показался более понятным, нежели статичная картинка>

Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 2.2K
Comments 1

Генерация PEG-парсера

Python *Programming *Algorithms *
Translation

Теперь, когда я набросал основу самописного парсера, давайте перейдём к генерации его методов из грамматики, как я и обещал. Также покажу как реализовать packrat-парсер с помощью декоратора @memoize.



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

Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Views 1.9K
Comments 0

Реализация PEG парсера

Python *Programming *Algorithms *
Translation

Вдохновленный лишь частичным пониманием PEG, я решил попробовать его реализовать. Результат может получиться и не самым лучшим среди парсеров PEG общего назначения — их уже много (например, TatSu написан на Python и генерирует код Python) — но это хороший способ разобраться в PEG. В дальнейшем я хочу заменить им текущую реализацию парсера в CPython.



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

Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 4.6K
Comments 3

PEG парсеры

Python *Programming *Algorithms *
Translation

Несколько лет назад меня кто-то спросил имеет ли смысл превести Python на PEG-парсер (или на грамматику PEG; я не помню точно кто и когда это было). Тогда я немного посмотрел на него, но так и не пришёл к какому-либо выводу, а потому и отбросил эту тему. Недавно я узнал больше о PEG (Parsing Expression Grammars, грамматике по парсингу выражений), и теперь я думаю, что это интересная альтернатива самописному генератору парсеров, который был разработан 30 лет назад, когда только начинал работать над Python. Я назвал его «pgen», и это был, наверно, первым фрагментом кода, который я написал для Python.



Причина, по которой я сейчас заинтересован в парсере PEG, заключается в том, что меня несколько раздражают ограничения pgen. Он построен на собственной реализации LL(1), которая имеет ряд допущений. Например, мне не нравились грамматические правила, которые могли бы генерировать пустые строки, поэтому я запретил их. И тем самым упростил алгоритм для создания таблиц синтаксического анализа. Я также изобрёл свою собственную EBNF-подобную грамматическую нотацию, которая мне до сих пор очень нравится.

Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Views 10K
Comments 9

GeoPuzzle — собери мир по кусочкам

Website development *Open source *Programming *Geoinformation services *Open data *
image

Хочу рассказать о проекте, который развивал последние пару лет. Называется он GeoPuzzle и представляет собой игру-паззл на политической карте мира. Цель — расставить кусочки-страны на свои места. Идея подсмотрена в статье «Головоломка Mercator для знатоков географии», также в детстве играл в тетрис из стран (ещё под DOS), но название программы уже не припомню. Я был настолько вдохновлён идеей, что захотел сделать полноценный продукт, интересный не только школьникам, но и знатокам географии. За развитием проекта можно наблюдать на GitHub.
Читать дальше →
Total votes 57: ↑53 and ↓4 +49
Views 13K
Comments 44

AsyncIO для практикующего python-разработчика

Python *
Tutorial
Translation
Я помню тот момент, когда подумал «Как же медленно всё работает, что если я распараллелю вызовы?», а спустя 3 дня, взглянув на код, ничего не мог понять в жуткой каше из потоков, синхронизаторов и функций обратного вызова.

Тогда я познакомился с asyncio, и всё изменилось.
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 343K
Comments 12

Получаем фотографии NASA с Марса с помощью aiohttp

Python *
Translation
Я большой фанат книги «Марсианин» Энди Вейера. Читая её, мне было интересно, что же Марк Уотни чувствовал, гуляя по красной планете. Недавно наткнулся на пост на Twillo, в котором упоминалось, что у NASA есть публичный API для доступа к фотографиям с марсоходов. Так что я решил написать собственное приложение для просмотра изображений непосредственно в браузере.
Читать дальше →
Total votes 15: ↑15 and ↓0 +15
Views 13K
Comments 0

Да, Python медленный, но меня это не волнует

Python *Programming *
Translation
Разговоры о снижении производительности ради продуктивности.


Я беру паузу в моём обсуждении asyncio в Python, чтобы поговорить о скорости Python. Позвольте представиться, я — ярый поклонник Python, и использую его везде, где только удаётся. Одна из причин, почему люди выступают против этого языка, — то, что он медленный. Некоторые отказываются даже попробовать на нём поработать лишь из-за того, что «X быстрее». Вот мои мысли на этот счёт.
Читать дальше →
Total votes 84: ↑64 and ↓20 +44
Views 74K
Comments 223

Совместная доработка открытого ПО

Lumber room
Здравствуйте, Хабравчане! Выношу на ваш суд идею, которая может показаться интересной (а может и нет). Сам я являюсь пользователем открытого ПО. Порой мне не хватает какой-нибудь мелочи — кнопочку повесить, новый раздел в программу добавить… Открытое ПО тем и замечательно, что такая возможность есть, но, как всегда бывает, нет времени. Мне легче заплатить 50 руб. кому-нибудь за такое.
Читать дальше →
Total votes 11: ↑9 and ↓2 +7
Views 525
Comments 9

Information

Rating
806-th
Location
Краснодар, Краснодарский край, Россия
Date of birth
Registered
Activity