я только что обнаружил http://code.google.com/p/re2, многообещающую библиотеку который использует давно забытый способ (Thompson NFA) для реализации механизма регулярных выражений это может быть на несколько порядков быстрее, чем доступные механизмы awk, Perl или Python.
поэтому я скачал код и сделал обычную sudo make install
вещь. однако это действие, по-видимому, сделало немногим больше, чем добавление /usr/local/include/re2/re2.h
в мою систему. там вроде еще какой-то *.a
файл был в придачу, но тогда что это с этим *.a
расширением?
я хотел бы использовать re2 из Python (предпочтительно Python 3.1) и был рад видеть такие файлы, как make_unicode_groups.py
в дистрибутиве (может быть, они просто использовались в процессе сборки?). однако они не были развернуты на моей машине.
как я могу использовать re2 из Python?
update два дружелюбных человека указали, что я могу попытаться собрать файлы DLL / *.so из исходников, а затем использовать библиотеку Python ctypes
для доступа к ним. может ли кто-нибудь дать полезные советы, как это сделать? тут я почти не разбираюсь, особенно в первой части (создании файлов *.so).
обновление Я также отправил этот вопрос (ранее) разработчикам re2. группа, до сих пор без ответа (это небольшая группа), а сегодня в (несколько более многочисленную) comp.lang.py группа [—тема здесь—]. надежда состоит в том, что люди из разных уголков могут связаться друг с другом. я предполагаю, что опытный человек может сделать это за несколько часов в течение своего 20-процентного временного интервала, принадлежащего вашему свободному времени; это свяжет меня на несколько недель. есть ли инструмент для автоматического упрощения C++ до любого варианта C, который Python должен иметь возможность подключать? тогда, возможно, получение жизнеспособного результата можно свести к умной цепочке инструментов.
(напыщенно)почему это так сложно? думать, что в 2010 году мы все еще не можем позволить нашим многочисленным программным продуктам просто общаться друг с другом. это такое препятствие, что всякий раз, когда вы хотите обратиться к некоторому коду C из Python, вы всегда должны перебирать эти биты ссылок. это требует большой работы, но предоставляет только модуль расширения, специфичный для версии кода C и версии Python, поэтому он быстро устаревает. (/rant) можно ли запускать такие вещи в отдельных процессах (скажем, если бы у меня был исполняемый файл re2, который мог бы выдавать результаты для данных, поступающих, скажем, subprocess/Popen/communicate()
)? (это не должен быть чистый инструмент командной строки, который требует открытия процесс каждый раз, когда это необходимо, но один процесс, который работает непрерывно; возможно, существуют оболочки, которые как бы «демонизируют» такой код C).