
1. Вводим конвенцию - некоторые функции (назовем их условно "быстрыми")
могут иметь специальные аннотации, скажем, перед названием функции пишем специальный коммент
# THIS_SHIT_MUST_BE_FUCKING_FAST
def myFunc():
2. Аналогичным образом, через специальные комменты, помечаем типы переменных и типы, возращаемые "быстрыми" функциям. Помеченный типы - могут быть не произвольными, а из числа некоторого допустимого списка, грубо говоря, то что обычно нужно, без извращений. Bread and butter. Числа, булеаны, строки, тьюплы.
3. Напускаем на таким образом проаннотированный код - специальный препроцессор, который смотрит, возможно ли такой код (только в "быстрых" функциях) преобразовать в валидный C-код. Если невозможно, печатается соов. жалобное сообщение, с попыткой описать почему именно невозможно (в самом просто случае- забыли указать тип переменной)
4. Если п.3 увенчивается успехом, препроцессор запускает соотв. компиляцию, которая выпекает добротные сишные либы, которые делают то что сказано делать в функциях
5. Исходный код заменяется на модицифицированный - оригинальный Петоновский код сохраняется в теле функций, но в начале функции добавляется if FAST_MODE: (вызов быстрой бинарной либы)
6. Программисту осталось теперь только при желании поставить флаг FAST_MODE = True и вуаля, Петоновская прога начнет работать со скоростью Си на тех функциях, где это надо, если не учитывать небольшой оверхед для загрузки быстрой либы.
Почему такого нет? Или я опять, как обычно, велосипед изобретаю?
Я в курсе, что есть и Петон на JVM, и Психопетон, и Петон для численных расчетов. Но я сейчас не про эти серьезные, большие системы. Я про вот такую минималистическую систему, которую, судя по всему, программист хорошей квалификации за пару выходных написать может.
Основное преимущество такого подхода - программист сам решает, какие ЧАСТИ программы должны быть быстрыми, и аннотирует типы только там, и больше нигде. В результате, основной код остается по прежнему безалаберно-Петоновским, лаконичным. Иными словами, не пытаемся быть быстрыми там, где это не нужно.