The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск Python-библиотек Bind.py и RichConsole.py

29.05.2017 21:15

Вышла бета-версия библиотеки bind.py, ускоряющей функции, использующие замкнутые переменные, через модификацию их байт-кода. Основной сценарий использования - ускорение программно-сгенерированных функций, например в метаклассах, что позволяет иметь красивый overинженеренный код почти без уменьшения производительности во время исполнения, ценой некоторых затрат на инициализацию.

Синтетический тест (255 переменных) показал 15% ускорение для замкнутых переменных и 30% для глобальных. Ускорение достигается путём перемещения переменных в константы (проверки, что переменная действительно константа не проводится, будьте аккуратны). Функция допускает использование в качестве декоратора, поддерживается как передача словаря, так и kwargs-синтаксис.

Также доступна python-библиотека RichConsole для вывода форматированного текста на консоль. Библиотека позволяет выводить в консоль текст, отформатированный с помощью управляющих последовательностей. Вручную это делать неудобно, так как управляющие последовательности имеют эффект на все последующие символы, т.е. необходимо сбрасывать и восстанавливать состояние в зависимости от текущего и желаемого. Начиная с уровня вложенности 3 это приводит к проблемам в архитектуре программы, препятствуя модуляризации.

Данная библиотека позволяет решить эту проблему. Желаемая разметка задаётся в виде ориентированного ациклического графа (обобщение дерева, позволяющее повторно использовать вершины при условии, что это не создаёт циклов), в котором листьями являются строки. В таком виде вывод обрабатывается в программе и рендерится в строку перед отправкой на вывод. При рендеринге происходит обход графа в глубину, применение и откат изменений, создание последовательностей диффов, конвертация в последовательность управляющих последовательностей и оптимизация полученной последовательности с целью минимизации выводимых данных.

  1. Главная ссылка к новости (https://github.com/KOLANICH/bi...)
Автор новости: KOLANICH
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/46617-python
Ключевые слова: python
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (27) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, anonymous yet another (?), 07:28, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > ... ориентированного ациклического графа (обобщение дерева, позволяющее повторно использовать вершины при условии, что это не создаёт циклов),

    Неожиданно-оригинальное определение ациклического графа.

     
     
  • 2.3, Аноним (-), 08:02, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Цикличный обход ацикличного графа. Это же великолепно :)
     

  • 1.4, Хорошийкомп (?), 08:55, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >Ускорение достигается путём перемещения переменных в константы (проверки, что >переменная действительно константа не проводится, будьте аккуратны)

    Каких только пулеметов не наизобретают люди, чтоб только не учить C++

     
     
  • 2.5, KOLANICH (?), 09:44, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Библиотека для питона чтобы оптимизировать код на питоне. Написана была для лулзов, вернее для траллинга некоторых коментаторов пулл-реквестов, которым в питоне нужна максимальная производительность. Причём тут C++?
     
     
  • 3.20, Led (ok), 17:26, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Библиотека для питона чтобы оптимизировать код на питоне. Написана была для лулзов,
    > вернее для траллинга

    Так и сам питон написан для лулзов и троллинга.

     
  • 3.22, myhand (ok), 19:25, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > вернее для траллинга некоторых коментаторов

    За минрепы их, окаянных!


     

  • 1.6, KOLANICH (?), 09:52, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > что позволяет иметь красивый усложнённый код

    В оригинале новости было "overиженеренный". Overинженеренный - на мой взгляд, это где многие обойдутся решением "в лоб", но где так не сделано. Но overиженеренный - не значит "усложнённый", такой код проще в поддержке и отладке.

     
     
  • 2.9, Аноним (-), 12:46, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Но overиженеренный - не значит "усложнённый", такой код проще в поддержке и отладке.

    Он по определению сложнее и в поддержке, и в отладке, так как использует лишние слои абстракций.

     
  • 2.12, Crazy Alex (ok), 15:17, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В наиболее распространённом понимании - это именно переусложнённый код, неудобный в поддержке и (обычно) не дающий значимых преимуществ в эффективности перед более простым подходом.
     

  • 1.7, Blind Vic (ok), 10:29, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Теперь можно постить новости о своих проектах, beta-quality, just for fun?
     
     
  • 2.14, KOLANICH (?), 15:25, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Теперь можно постить новости о своих проектах, beta-quality, just for fun?

    Вообще-то уже давно.

     

  • 1.10, Аноним (-), 13:36, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    про ричконсол не написано под какие системы ? никс ? вин ?
    информацию не нашел ни в тексте новости ни на джите (правда смотрел по диагонали)
     
     
  • 2.13, KOLANICH (?), 15:24, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >про ричконсол не написано под какие системы ? никс ? вин ?

    Любые. Контрольные коды ecma - это фича эмулятора терминала, а не ОС. В самой же либе я не использовал ОС-зависимой фигни. Из коробки контрольные коды доступны на никсах. У винды вместо контрольных кодов дёргаются функции, переключающие цвет. Но на винде тоже могут быть доступны, если использовать совместимый эмулятор терминала. https://stackoverflow.com/questions/16755142/how-to-make-win32-console-recogni

    >ни на джите

    git произносится [ɡɪt]

     

  • 1.15, Аноним (-), 16:53, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если ты сделал это не для лулзов то:

    Сделай одолжение этому миру - удали эту х**ню, чтобы никто не знал, что это существовало..

    И почитай для начала https://www.python.org/dev/peps/pep-0008/

     
     
  • 2.19, KOLANICH (?), 17:20, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Если ты сделал это не для лулзов то:
    > Сделай одолжение этому миру - удали эту х**ню, чтобы никто не знал,
    > что это существовало..

    Если есть конструктивные замечания - на гитхаб (или тут). Нет - сам знаешь куда.

    > И почитай для начала https://www.python.org/dev/peps/pep-0008/

    Я недостаточно сектант для того, чтобы следовать долбанутым рекомендациям, лично мне не удобным. Не нравится мой стиль кода - обмажься autopep8.

     
     
  • 3.23, myhand (ok), 19:32, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Интересно, а правилам русского языка вы не следуете тоже, по причине личного неудобства? )
     
  • 3.25, Аноним (-), 21:32, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ты знаешь, да, есть замечания.. 100% кода - это гов.о размером в 300 строк.

    И, пожалуйста, брось программирование, оно не для тебя! :)

     
     
  • 4.31, KOLANICH (?), 10:48, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Толсто.
     

  • 1.16, myhand (ok), 16:54, 30/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Также доступна python-библиотека RichConsole для вывода форматированного текста на консоль.

    Я, конечно, извиняюсь, но разве curses выкинули из стандартной библиотеки?!

     
     
  • 2.17, KOLANICH (?), 17:14, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    curses - для псевдографического интерфейса. Я же делал приложение с консольным текстовым интерфейсом (пока ещё не в паблике, ждёт ещё одну зависимость и модно будет релизить), и мне нужно было раскрасить его вывод, сделать "подсветку синтаксиса" для улучшения восприятия. Гуглинг дал только colorama и подобные ей либы. У них есть перечисленные ограничения. Пришлось написать свою.
     
     
  • 3.21, myhand (ok), 19:23, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > curses - для псевдографического интерфейса.

    Ви таки хотите сказать, что с ей я не могу текст в консольке раскрасить?


     
     
  • 4.32, KOLANICH (?), 16:49, 01/06/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Можешь. Но с извращениями.
     
     
  • 5.33, myhand (ok), 15:16, 04/06/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Можешь. Но с извращениями.

    Например, какими?

     
  • 2.18, Ordu (ok), 17:16, 30/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Выкинули вряд ли, но он давно просится на выкидывание. ncurses родом из 80-х, и если её используют и по сей день, то лишь потому, что возможности "красивого" вывода в консоль никому особо не нужны.
    А цветной текст выводить в консоль -- много ума не нужно, и ncurses выглядит безумным оверхедом. Самое сложное -- выудить из terminfo управляющие коды, и поскольку всем лень заниматься этим, то либо они пишут '\e[...', либо используют ncurses.
    Более интересный вопрос в том, зачем нужен этот RichConsole, если он использует подход с жёстко прошитыми управляющими кодами, и даже не парится заглянуть в terminfo. С жёстко прошитыми я и сам с усам, и никаких библиотек мне не надо. Даже если писать на бидоне.
    То есть, идея стилей приятна, в том смысле, что позволяет отделить концептуально цвет выделения от смысла выделения, а связь между ними задавать конфигом. Но реализация этой идеи оказывается бесполезной, потому что она полагается на то, что контрол-коды везде одинаковы. Может быть так оно и есть де факто -- я не знаю. Но если мне понадобится выводить цветной текст в консоль, то не поверю и всё равно возьму ncurses.
     
     
  • 3.29, proud_anon (?), 07:09, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    "... возможности "красивого" вывода в консоль никому особо не нужны. А цветной текст выводить в консоль -- много ума не нужно... " откуда мамы таких аналитиков достают?
    Сидит крендель за ПК из ближайшего ашана и пребывает в полной уверенности что у всего остального человечества точно такая же железная конфигурация.
    $ echo $TERM
    dumb
    это про тебя
     
     
  • 4.30, Ordu (ok), 08:43, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > "... возможности "красивого" вывода в консоль никому особо не нужны. А цветной
    > текст выводить в консоль -- много ума не нужно... " откуда
    > мамы таких аналитиков достают?
    > Сидит крендель за ПК из ближайшего ашана и пребывает в полной уверенности
    > что у всего остального человечества точно такая же железная конфигурация.
    > $ echo $TERM
    > dumb
    > это про тебя

    Хы. Ты точно когда показывал пальцем, не перепутал направление? Мне почему-то кажется, что ты не осилил прочитать мой коммент целиком, прежде чем лезть с критикой типа "демонстрация выдающихся знаний".

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру