Вышла бета-версия библиотеки bind.py (https://github.com/KOLANICH/bind.py), ускоряющей функции, использующие замкнутые переменные, через модификацию их байт-кода. Основной сценарий использования - ускорение программно-сгенерированных функций, например в метаклассах, что позволяет иметь красивый усложнённый код почти без уменьшения производительности во время исполнения, ценой некоторых затрат на инициализацию.
Синтетический тест (255 переменных) показал 15% ускорение для замкнутых переменных и 30% для глобальных. Ускорение достигается путём перемещения переменных в константы (проверки, что переменная действительно константа не проводится, будьте аккуратны). Функция допускает использование в качестве декоратора, поддерживается как передача словаря, так и kwargs-синтаксис.Также доступна (https://github.com/KOLANICH/RichConsole) python-библиотека RichConsole для вывода форматированного текста на консоль. Библиотека позволяет выводить в консоль текст, отформатированный с помощью управляющих последовательностей. Вручную это делать неудобно, так как управляющие последовательности имеют эффект на все последующие символы, т.е. необходимо сбрасывать и восстанавливать состояние в зависимости от текущего и желаемого. Начиная с уровня вложенности 3 это приводит к проблемам в архитектуре программы, препятствуя модуляризации.
Данная библиотека позволяет решить эту проблему. Желаемая разметка задаётся в виде ориентированного ациклического графа (обобщение дерева, позволяющее повторно использовать вершины при условии, что это не создаёт циклов), в котором листьями являются строки. В таком виде вывод обрабатывается в программе и рендерится в строку перед отправкой на вывод. При рендеринге происходит обход графа в глубину, применение и откат изменений, создание последовательностей диффов, конвертация в последовательность управляющих последовательностей и оптимизация полученной последовательности с целью минимизации выводимых данных.
URL: https://github.com/KOLANICH/bind.py
Новость: http://www.opennet.ru/opennews/art.shtml?num=46617
> ... ориентированного ациклического графа (обобщение дерева, позволяющее повторно использовать вершины при условии, что это не создаёт циклов),Неожиданно-оригинальное определение ациклического графа.
Цикличный обход ацикличного графа. Это же великолепно :)
>Ускорение достигается путём перемещения переменных в константы (проверки, что >переменная действительно константа не проводится, будьте аккуратны)Каких только пулеметов не наизобретают люди, чтоб только не учить C++
Библиотека для питона чтобы оптимизировать код на питоне. Написана была для лулзов, вернее для траллинга некоторых коментаторов пулл-реквестов, которым в питоне нужна максимальная производительность. Причём тут C++?
> Библиотека для питона чтобы оптимизировать код на питоне. Написана была для лулзов,
> вернее для траллингаТак и сам питон написан для лулзов и троллинга.
> вернее для траллинга некоторых коментаторовЗа минрепы их, окаянных!
> что позволяет иметь красивый усложнённый кодВ оригинале новости было "overиженеренный". Overинженеренный - на мой взгляд, это где многие обойдутся решением "в лоб", но где так не сделано. Но overиженеренный - не значит "усложнённый", такой код проще в поддержке и отладке.
> Но overиженеренный - не значит "усложнённый", такой код проще в поддержке и отладке.Он по определению сложнее и в поддержке, и в отладке, так как использует лишние слои абстракций.
В наиболее распространённом понимании - это именно переусложнённый код, неудобный в поддержке и (обычно) не дающий значимых преимуществ в эффективности перед более простым подходом.
Теперь можно постить новости о своих проектах, beta-quality, just for fun?
> Теперь можно постить новости о своих проектах, beta-quality, just for fun?Вообще-то уже давно.
про ричконсол не написано под какие системы ? никс ? вин ?
информацию не нашел ни в тексте новости ни на джите (правда смотрел по диагонали)
>про ричконсол не написано под какие системы ? никс ? вин ?Любые. Контрольные коды ecma - это фича эмулятора терминала, а не ОС. В самой же либе я не использовал ОС-зависимой фигни. Из коробки контрольные коды доступны на никсах. У винды вместо контрольных кодов дёргаются функции, переключающие цвет. Но на винде тоже могут быть доступны, если использовать совместимый эмулятор терминала. https://stackoverflow.com/questions/16755142/how-to-make-win...
>ни на джите
git произносится [ɡɪt]
Если ты сделал это не для лулзов то:Сделай одолжение этому миру - удали эту х**ню, чтобы никто не знал, что это существовало..
И почитай для начала https://www.python.org/dev/peps/pep-0008/
> Если ты сделал это не для лулзов то:
> Сделай одолжение этому миру - удали эту х**ню, чтобы никто не знал,
> что это существовало..Если есть конструктивные замечания - на гитхаб (или тут). Нет - сам знаешь куда.
> И почитай для начала https://www.python.org/dev/peps/pep-0008/
Я недостаточно сектант для того, чтобы следовать долбанутым рекомендациям, лично мне не удобным. Не нравится мой стиль кода - обмажься autopep8.
Интересно, а правилам русского языка вы не следуете тоже, по причине личного неудобства? )
Ты знаешь, да, есть замечания.. 100% кода - это гов.о размером в 300 строк.И, пожалуйста, брось программирование, оно не для тебя! :)
Толсто.
> Также доступна python-библиотека RichConsole для вывода форматированного текста на консоль.Я, конечно, извиняюсь, но разве curses выкинули из стандартной библиотеки?!
curses - для псевдографического интерфейса. Я же делал приложение с консольным текстовым интерфейсом (пока ещё не в паблике, ждёт ещё одну зависимость и модно будет релизить), и мне нужно было раскрасить его вывод, сделать "подсветку синтаксиса" для улучшения восприятия. Гуглинг дал только colorama и подобные ей либы. У них есть перечисленные ограничения. Пришлось написать свою.
> curses - для псевдографического интерфейса.Ви таки хотите сказать, что с ей я не могу текст в консольке раскрасить?
Можешь. Но с извращениями.
> Можешь. Но с извращениями.Например, какими?
Выкинули вряд ли, но он давно просится на выкидывание. ncurses родом из 80-х, и если её используют и по сей день, то лишь потому, что возможности "красивого" вывода в консоль никому особо не нужны.
А цветной текст выводить в консоль -- много ума не нужно, и ncurses выглядит безумным оверхедом. Самое сложное -- выудить из terminfo управляющие коды, и поскольку всем лень заниматься этим, то либо они пишут '\e[...', либо используют ncurses.
Более интересный вопрос в том, зачем нужен этот RichConsole, если он использует подход с жёстко прошитыми управляющими кодами, и даже не парится заглянуть в terminfo. С жёстко прошитыми я и сам с усам, и никаких библиотек мне не надо. Даже если писать на бидоне.
То есть, идея стилей приятна, в том смысле, что позволяет отделить концептуально цвет выделения от смысла выделения, а связь между ними задавать конфигом. Но реализация этой идеи оказывается бесполезной, потому что она полагается на то, что контрол-коды везде одинаковы. Может быть так оно и есть де факто -- я не знаю. Но если мне понадобится выводить цветной текст в консоль, то не поверю и всё равно возьму ncurses.
"... возможности "красивого" вывода в консоль никому особо не нужны. А цветной текст выводить в консоль -- много ума не нужно... " откуда мамы таких аналитиков достают?
Сидит крендель за ПК из ближайшего ашана и пребывает в полной уверенности что у всего остального человечества точно такая же железная конфигурация.
$ echo $TERM
dumb
это про тебя
> "... возможности "красивого" вывода в консоль никому особо не нужны. А цветной
> текст выводить в консоль -- много ума не нужно... " откуда
> мамы таких аналитиков достают?
> Сидит крендель за ПК из ближайшего ашана и пребывает в полной уверенности
> что у всего остального человечества точно такая же железная конфигурация.
> $ echo $TERM
> dumb
> это про тебяХы. Ты точно когда показывал пальцем, не перепутал направление? Мне почему-то кажется, что ты не осилил прочитать мой коммент целиком, прежде чем лезть с критикой типа "демонстрация выдающихся знаний".