Как я могу "преобразовать" объект класса в python в llvm?

Я готов использовать llvm для оптимизации моего кода на Python. Я прочитал несколько учебных пособий, но я не понял, как, скажем, экспортировать объект класса из кода Python в llvm. Я научился создавать функции в llvm-py, но классы мне не по силам.

Вот пример класса, который я хочу создать в коде llvm:

class Char():
    def __init__(self,c):
        self.c=c
    def next(self,line,p):
        try:
            return self.c==line[p]
        except:
            return False
    def next_rep(self,line,p):
        try:
            return self.c==line[p],p
        except:
            return False,p

Буду благодарен за любую помощь!

1 ответ

Решение

Краткий ответ: вы не можете.

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

Я предлагаю вам профилировать вашу программу (например, если вы работаете в Linux, используйте опцию запуска IPython -p или вообще через модуль cProfile), и выясните, что занимает большую часть времени программы.

В большинстве программ высокий процент общего времени выполнения занимает относительно небольшая область кода, и его улучшение (либо путем улучшения алгоритмов, либо путем написания расширения C, например, через SWIG) часто может привести к порядку величина улучшения производительности.

Этот вид оптимизации, как правило, гораздо эффективнее, чем пытаться заставить "все работать быстрее".

Другие вопросы по тегам