home.social

#байткод — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #байткод, aggregated by home.social.

  1. Сделаем Python безопасным… снова

    Все мы любим Python за то, что он дает нам свободу: динамическую типизацию, кроссплатформенность, огромное количество библиотек и многое другое. Но зачастую эта свобода становится кошмаром для security‑инженеров и архитекторов, когда речь заходит о высоконагруженных системах с серьезными требованиями к безопасности. В этой статье мы поговорим о том, как перехватить выполнение Python‑кода, запретить опасные вызовы и построить систему контрактов без изменения исходников.

    habr.com/ru/companies/otus/art

    #Python #безопасность_Python #audit_hook #syssettrace #AST #байткод #статический_анализ #песочница #eval #runtimeконтроль

  2. Сделаем Python безопасным… снова

    Все мы любим Python за то, что он дает нам свободу: динамическую типизацию, кроссплатформенность, огромное количество библиотек и многое другое. Но зачастую эта свобода становится кошмаром для security‑инженеров и архитекторов, когда речь заходит о высоконагруженных системах с серьезными требованиями к безопасности. В этой статье мы поговорим о том, как перехватить выполнение Python‑кода, запретить опасные вызовы и построить систему контрактов без изменения исходников.

    habr.com/ru/companies/otus/art

    #Python #безопасность_Python #audit_hook #syssettrace #AST #байткод #статический_анализ #песочница #eval #runtimeконтроль

  3. Сделаем Python безопасным… снова

    Все мы любим Python за то, что он дает нам свободу: динамическую типизацию, кроссплатформенность, огромное количество библиотек и многое другое. Но зачастую эта свобода становится кошмаром для security‑инженеров и архитекторов, когда речь заходит о высоконагруженных системах с серьезными требованиями к безопасности. В этой статье мы поговорим о том, как перехватить выполнение Python‑кода, запретить опасные вызовы и построить систему контрактов без изменения исходников.

    habr.com/ru/companies/otus/art

    #Python #безопасность_Python #audit_hook #syssettrace #AST #байткод #статический_анализ #песочница #eval #runtimeконтроль

  4. Сделаем Python безопасным… снова

    Все мы любим Python за то, что он дает нам свободу: динамическую типизацию, кроссплатформенность, огромное количество библиотек и многое другое. Но зачастую эта свобода становится кошмаром для security‑инженеров и архитекторов, когда речь заходит о высоконагруженных системах с серьезными требованиями к безопасности. В этой статье мы поговорим о том, как перехватить выполнение Python‑кода, запретить опасные вызовы и построить систему контрактов без изменения исходников.

    habr.com/ru/companies/otus/art

    #Python #безопасность_Python #audit_hook #syssettrace #AST #байткод #статический_анализ #песочница #eval #runtimeконтроль

  5. TTF-DOOM: как я запустил 3D-рейкастер внутри TrueType-шрифта

    Каждый, кто хоть раз заглядывал на Hacker News или r/ItRunsDoom, знает традицию: DOOM должен работать на всём. PDF-файлы, SQL-запросы, кишечные бактерии, тест на беременность - список бесконечен, и каждый новый порт абсурднее предыдущего Но я задался вопросом: а можно ли запустить DOOM внутри шрифта? Оказалось, что можно. И вот как.

    habr.com/ru/articles/1020668/

    #doom #truetype #font #raycasting #hinting #javascript #creative_coding #turingcomplete #байткод #компилятор

  6. TTF-DOOM: как я запустил 3D-рейкастер внутри TrueType-шрифта

    Каждый, кто хоть раз заглядывал на Hacker News или r/ItRunsDoom, знает традицию: DOOM должен работать на всём. PDF-файлы, SQL-запросы, кишечные бактерии, тест на беременность - список бесконечен, и каждый новый порт абсурднее предыдущего Но я задался вопросом: а можно ли запустить DOOM внутри шрифта? Оказалось, что можно. И вот как.

    habr.com/ru/articles/1020668/

    #doom #truetype #font #raycasting #hinting #javascript #creative_coding #turingcomplete #байткод #компилятор

  7. TTF-DOOM: как я запустил 3D-рейкастер внутри TrueType-шрифта

    Каждый, кто хоть раз заглядывал на Hacker News или r/ItRunsDoom, знает традицию: DOOM должен работать на всём. PDF-файлы, SQL-запросы, кишечные бактерии, тест на беременность - список бесконечен, и каждый новый порт абсурднее предыдущего Но я задался вопросом: а можно ли запустить DOOM внутри шрифта? Оказалось, что можно. И вот как.

    habr.com/ru/articles/1020668/

    #doom #truetype #font #raycasting #hinting #javascript #creative_coding #turingcomplete #байткод #компилятор

  8. TTF-DOOM: как я запустил 3D-рейкастер внутри TrueType-шрифта

    Каждый, кто хоть раз заглядывал на Hacker News или r/ItRunsDoom, знает традицию: DOOM должен работать на всём. PDF-файлы, SQL-запросы, кишечные бактерии, тест на беременность - список бесконечен, и каждый новый порт абсурднее предыдущего Но я задался вопросом: а можно ли запустить DOOM внутри шрифта? Оказалось, что можно. И вот как.

    habr.com/ru/articles/1020668/

    #doom #truetype #font #raycasting #hinting #javascript #creative_coding #turingcomplete #байткод #компилятор

  9. Blueprint VM изнутри: ~80 инструкций, которые двигают вашу игру

    Каждый раз, когда вы соединяете ноды в Blueprint и нажимаете Play, Unreal Engine запускает маленький процессор. У него свои инструкции, свой стек, своя защита от бесконечных циклов. Он написан в ~4000 строках C++ и живёт в одном файле. Через него проходит каждый Event Tick, каждый Event BeginPlay, каждый вызов Blueprint-функции. Этот процессор - Blueprint VM (Virtual Machine). И сегодня мы разберём его по винтикам.

    habr.com/ru/articles/1008012/

    #Blueprint #виртуальная_машина #байткод #UE5 #Blueprint_VM #ScriptCore #K2Node #игровые_движки #интерпретатор #Unreal_Engine

  10. Blueprint VM изнутри: ~80 инструкций, которые двигают вашу игру

    Каждый раз, когда вы соединяете ноды в Blueprint и нажимаете Play, Unreal Engine запускает маленький процессор. У него свои инструкции, свой стек, своя защита от бесконечных циклов. Он написан в ~4000 строках C++ и живёт в одном файле. Через него проходит каждый Event Tick, каждый Event BeginPlay, каждый вызов Blueprint-функции. Этот процессор - Blueprint VM (Virtual Machine). И сегодня мы разберём его по винтикам.

    habr.com/ru/articles/1008012/

    #Blueprint #виртуальная_машина #байткод #UE5 #Blueprint_VM #ScriptCore #K2Node #игровые_движки #интерпретатор #Unreal_Engine

  11. Blueprint VM изнутри: ~80 инструкций, которые двигают вашу игру

    Каждый раз, когда вы соединяете ноды в Blueprint и нажимаете Play, Unreal Engine запускает маленький процессор. У него свои инструкции, свой стек, своя защита от бесконечных циклов. Он написан в ~4000 строках C++ и живёт в одном файле. Через него проходит каждый Event Tick, каждый Event BeginPlay, каждый вызов Blueprint-функции. Этот процессор - Blueprint VM (Virtual Machine). И сегодня мы разберём его по винтикам.

    habr.com/ru/articles/1008012/

    #Blueprint #виртуальная_машина #байткод #UE5 #Blueprint_VM #ScriptCore #K2Node #игровые_движки #интерпретатор #Unreal_Engine

  12. Blueprint VM изнутри: ~80 инструкций, которые двигают вашу игру

    Каждый раз, когда вы соединяете ноды в Blueprint и нажимаете Play, Unreal Engine запускает маленький процессор. У него свои инструкции, свой стек, своя защита от бесконечных циклов. Он написан в ~4000 строках C++ и живёт в одном файле. Через него проходит каждый Event Tick, каждый Event BeginPlay, каждый вызов Blueprint-функции. Этот процессор - Blueprint VM (Virtual Machine). И сегодня мы разберём его по винтикам.

    habr.com/ru/articles/1008012/

    #Blueprint #виртуальная_машина #байткод #UE5 #Blueprint_VM #ScriptCore #K2Node #игровые_движки #интерпретатор #Unreal_Engine

  13. ESPB — брат WASM. JIT всемогущий

    Доброе время суток! Так уж вышло, что написание статьи подоспело аккурат к празднику. И пока одни раздают поцелуи, а другие принимают в подарок долгожданные носки, я решил подготовить продолжение этой хардкорной разработки. Со времени первой публикации прошло ровно 3 месяца. За это время переработал многое: добавил полноценный JIT для Xtensa и RISC-V, внедрил кучу оптимизаций в транслятор. Все это старательно тестировал на чипах ESP32, ESP32-C3 и ESP32-C6 (последний — по остаточному принципу, запустил только основной тест, главная отладка шла на первых двух). Встречайте главные нововведения.

    habr.com/ru/articles/1002524/

    #ESP32 #WASM #ESPB #интерпретатор #транслятор #байткод

  14. sys.settrace: как устроены дебаггеры, coverage и profilers в Python

    Когда запускаешь pytest --cov код выполняется как обычно, но в конце появляется отчёт о покрытии. Как pytest узнаёт, какие строки выполнились? Ответ в sys.settrace , это низкоуровневый хук, который позволяет перехватывать каждый шаг интерпретатора. На этом механизме построены coverage.py, pdb, PyCharm debugger, hunters, и десятки других инструментов. Разберём, как это работает изнутри и почему трассировка устроена именно так.

    habr.com/ru/companies/otus/art

    #python #трассировка #интерпретатор_CPython #байткод #отладчик #покрытие_кода #профилирование

  15. sys.settrace: как устроены дебаггеры, coverage и profilers в Python

    Когда запускаешь pytest --cov код выполняется как обычно, но в конце появляется отчёт о покрытии. Как pytest узнаёт, какие строки выполнились? Ответ в sys.settrace , это низкоуровневый хук, который позволяет перехватывать каждый шаг интерпретатора. На этом механизме построены coverage.py, pdb, PyCharm debugger, hunters, и десятки других инструментов. Разберём, как это работает изнутри и почему трассировка устроена именно так.

    habr.com/ru/companies/otus/art

    #python #трассировка #интерпретатор_CPython #байткод #отладчик #покрытие_кода #профилирование

  16. sys.settrace: как устроены дебаггеры, coverage и profilers в Python

    Когда запускаешь pytest --cov код выполняется как обычно, но в конце появляется отчёт о покрытии. Как pytest узнаёт, какие строки выполнились? Ответ в sys.settrace , это низкоуровневый хук, который позволяет перехватывать каждый шаг интерпретатора. На этом механизме построены coverage.py, pdb, PyCharm debugger, hunters, и десятки других инструментов. Разберём, как это работает изнутри и почему трассировка устроена именно так.

    habr.com/ru/companies/otus/art

    #python #трассировка #интерпретатор_CPython #байткод #отладчик #покрытие_кода #профилирование

  17. sys.settrace: как устроены дебаггеры, coverage и profilers в Python

    Когда запускаешь pytest --cov код выполняется как обычно, но в конце появляется отчёт о покрытии. Как pytest узнаёт, какие строки выполнились? Ответ в sys.settrace , это низкоуровневый хук, который позволяет перехватывать каждый шаг интерпретатора. На этом механизме построены coverage.py, pdb, PyCharm debugger, hunters, и десятки других инструментов. Разберём, как это работает изнутри и почему трассировка устроена именно так.

    habr.com/ru/companies/otus/art

    #python #трассировка #интерпретатор_CPython #байткод #отладчик #покрытие_кода #профилирование

  18. Думал что дебаггер, а на деле HexEdit: Основы работы с опкодами и патчинга для начинающих

    Привет Хабр, и всем читающим! Сегодня разберемся в патчинге, в отличиях между ним и дебаггингом, и поймем как пользоваться hex-редактором для реверс-инжиниринга. (И да, я когда писал статью, перепутал термины Debugger и Hex-editor, и только под конец понял что стоит статью изменить, прошу учитывать) Дисклеймер важен, его пожалуйста прочитать обязательно! Ну и приятного чтения, господа :) Начать Исследование

    habr.com/ru/articles/991524/

    #реверсинжиниринг #дебаггинг #hexкоды #reverseengineering #опкоды #ассемблер #си #ghidra #байткод #hex_редакор

  19. Думал что дебаггер, а на деле HexEdit: Основы работы с опкодами и патчинга для начинающих

    Привет Хабр, и всем читающим! Сегодня разберемся в патчинге, в отличиях между ним и дебаггингом, и поймем как пользоваться hex-редактором для реверс-инжиниринга. (И да, я когда писал статью, перепутал термины Debugger и Hex-editor, и только под конец понял что стоит статью изменить, прошу учитывать) Дисклеймер важен, его пожалуйста прочитать обязательно! Ну и приятного чтения, господа :) Начать Исследование

    habr.com/ru/articles/991524/

    #реверсинжиниринг #дебаггинг #hexкоды #reverseengineering #опкоды #ассемблер #си #ghidra #байткод #hex_редакор

  20. Думал что дебаггер, а на деле HexEdit: Основы работы с опкодами и патчинга для начинающих

    Привет Хабр, и всем читающим! Сегодня разберемся в патчинге, в отличиях между ним и дебаггингом, и поймем как пользоваться hex-редактором для реверс-инжиниринга. (И да, я когда писал статью, перепутал термины Debugger и Hex-editor, и только под конец понял что стоит статью изменить, прошу учитывать) Дисклеймер важен, его пожалуйста прочитать обязательно! Ну и приятного чтения, господа :) Начать Исследование

    habr.com/ru/articles/991524/

    #реверсинжиниринг #дебаггинг #hexкоды #reverseengineering #опкоды #ассемблер #си #ghidra #байткод #hex_редакор

  21. Думал что дебаггер, а на деле HexEdit: Основы работы с опкодами и патчинга для начинающих

    Привет Хабр, и всем читающим! Сегодня разберемся в патчинге, в отличиях между ним и дебаггингом, и поймем как пользоваться hex-редактором для реверс-инжиниринга. (И да, я когда писал статью, перепутал термины Debugger и Hex-editor, и только под конец понял что стоит статью изменить, прошу учитывать) Дисклеймер важен, его пожалуйста прочитать обязательно! Ну и приятного чтения, господа :) Начать Исследование

    habr.com/ru/articles/991524/

    #реверсинжиниринг #дебаггинг #hexкоды #reverseengineering #опкоды #ассемблер #си #ghidra #байткод #hex_редакор

  22. [Перевод] 5 ключевых изменений в Python 3.14 глазами инженера

    Команда Python for Devs подготовила перевод статьи о ключевых изменениях в Python 3.14. Автор разбирает релиз через призму внутреннего устройства интерпретатора и производительности: свободная многопоточность, конкурентные интерпретаторы, удалённая отладка, инкрементальная сборка мусора и новый Tail Calling интерпретатор.

    habr.com/ru/articles/978836/

    #cpython #gil #производительность #интерпретатор #байткод

  23. [Перевод] Странности в исключениях JVM с точки зрения декомпилятора

    Некоторое время назад я немного поэкспериментировала, пытаясь научиться декомпилировать файлы классов Java более эффективно, чем позволяют традиционные инструменты, предназначенные для этого — например, Vineflower . В конце концов, я написала статью , в которой изложила мой подход к декомпиляции потока управления. Мои находки позволили значительно ускорить работу получившегося у меня прототипа. На тот момент я полагала, что этот метод не составит труда расширить и на декомпиляцию потока управления, возникающего при обработке исключений — то есть, что ему будут поддаваться блоки try…catch . В ретроспективе признаю: следовало ожидать, что это будет не так просто. Оказывается, здесь возникает множество пограничных случаев, варьирующихся от странного поведения javac до последствий, отражающихся на самой структуре JVM и формате файлов классов. Всё это – серьёзные осложнения. В данном посте я разберу все эти детали, расскажу, почему простые решения не работают, и на каком подходе я в итоге остановилась.

    habr.com/ru/articles/965922/

    #Java #JVM #байткод #исключения

  24. [Перевод] Странности в исключениях JVM с точки зрения декомпилятора

    Некоторое время назад я немного поэкспериментировала, пытаясь научиться декомпилировать файлы классов Java более эффективно, чем позволяют традиционные инструменты, предназначенные для этого — например, Vineflower . В конце концов, я написала статью , в которой изложила мой подход к декомпиляции потока управления. Мои находки позволили значительно ускорить работу получившегося у меня прототипа. На тот момент я полагала, что этот метод не составит труда расширить и на декомпиляцию потока управления, возникающего при обработке исключений — то есть, что ему будут поддаваться блоки try…catch . В ретроспективе признаю: следовало ожидать, что это будет не так просто. Оказывается, здесь возникает множество пограничных случаев, варьирующихся от странного поведения javac до последствий, отражающихся на самой структуре JVM и формате файлов классов. Всё это – серьёзные осложнения. В данном посте я разберу все эти детали, расскажу, почему простые решения не работают, и на каком подходе я в итоге остановилась.

    habr.com/ru/articles/965922/

    #Java #JVM #байткод #исключения

  25. [Перевод] Странности в исключениях JVM с точки зрения декомпилятора

    Некоторое время назад я немного поэкспериментировала, пытаясь научиться декомпилировать файлы классов Java более эффективно, чем позволяют традиционные инструменты, предназначенные для этого — например, Vineflower . В конце концов, я написала статью , в которой изложила мой подход к декомпиляции потока управления. Мои находки позволили значительно ускорить работу получившегося у меня прототипа. На тот момент я полагала, что этот метод не составит труда расширить и на декомпиляцию потока управления, возникающего при обработке исключений — то есть, что ему будут поддаваться блоки try…catch . В ретроспективе признаю: следовало ожидать, что это будет не так просто. Оказывается, здесь возникает множество пограничных случаев, варьирующихся от странного поведения javac до последствий, отражающихся на самой структуре JVM и формате файлов классов. Всё это – серьёзные осложнения. В данном посте я разберу все эти детали, расскажу, почему простые решения не работают, и на каком подходе я в итоге остановилась.

    habr.com/ru/articles/965922/

    #Java #JVM #байткод #исключения

  26. [Перевод] Странности в исключениях JVM с точки зрения декомпилятора

    Некоторое время назад я немного поэкспериментировала, пытаясь научиться декомпилировать файлы классов Java более эффективно, чем позволяют традиционные инструменты, предназначенные для этого — например, Vineflower . В конце концов, я написала статью , в которой изложила мой подход к декомпиляции потока управления. Мои находки позволили значительно ускорить работу получившегося у меня прототипа. На тот момент я полагала, что этот метод не составит труда расширить и на декомпиляцию потока управления, возникающего при обработке исключений — то есть, что ему будут поддаваться блоки try…catch . В ретроспективе признаю: следовало ожидать, что это будет не так просто. Оказывается, здесь возникает множество пограничных случаев, варьирующихся от странного поведения javac до последствий, отражающихся на самой структуре JVM и формате файлов классов. Всё это – серьёзные осложнения. В данном посте я разберу все эти детали, расскажу, почему простые решения не работают, и на каком подходе я в итоге остановилась.

    habr.com/ru/articles/965922/

    #Java #JVM #байткод #исключения

  27. ИИ кодинг не работает

    ИИ кодинг не работает Или как объяснить менеджменту, почему лучше перестать пушить внедрение ИИ в разработку Ниже я разбираю основные проблемы и приземляю их на реальные исследования

    habr.com/ru/articles/955666/

    #искусственный_интеллект #разработка #исследования_в_it #исследования_и_прогнозы_в_it #gpt #cursor #ai_coding #байткод #эффективность_разработки #внедрение_ии

  28. Мое видение универсального языка программирования

    Язык программирования, даже общего назначения, - это инструмент. Каждый язык хорош в решении задач своей сферы: C++ позволяет писать эффективные программы, Haskell - писать элегантный параллельный и математический код, C# - создавать программы на гибкой масштабируемой архитектуре. Современные языки заставляют нас мириться с их недостатками: отсутствие нужной системы типов, нехватка синтаксического сахара, отсутствие парадигмы X. Все хоть раз мечтали о языке, который удобен для решения любой задачи. Я расскажу о своих идеях по созданию универсального языка программирования. Плавно перейдем к идее языка-конструктора. Вас ждет погружение в модульную архитетуру, лямбда-исчисления, байткод, расширяемое программирование

    habr.com/ru/articles/942134/

    #универсальный #язык_программирования #компилятор #архитектура #dsl #модульность #парадигмы_программирования #байткод #llvm

  29. [Перевод] Как изменения в Python сделали старую оптимизацию бесполезной

    В мире оптимизаций Python часто приходится использовать уловки, которые с течением времени теряют свою актуальность. Одним из таких примеров является создание локальных псевдонимов для часто вызываемых функций — метода, который позволял ускорить выполнение кода в старых версиях Python. Однако с выходом CPython 3.11 ситуация кардинально изменилась. В этой статье мы рассмотрим, как изменения в механизме разрешения имен и новые улучшения в интерпретаторе сделали эту оптимизацию практически бесполезной, а также что это значит для разработчиков, продолжающих полагаться на старые трюки.

    habr.com/ru/companies/otus/art

    #python #оптимизация #производительность #CPython #разрешение_имен #Байткод #локальные_переменные #Глобальные_функции #Виртуальная_машина_Python

  30. [Перевод] Производительность интерпретатора Python 3.14 с оптимизацией хвостовых вызовов

    Примерно месяц назад проект CPython смерджил новую стратегию реализации интерпретатора байт-кода. Первоначальные результаты были очень впечатляющими , продемонстрировав среднее повышение производительности на 10-15% в широком спектре бенчмарков на различных платформах.

    habr.com/ru/companies/ruvds/ar

    #cpython #gcc #clang #интерпретаторы #байткод #бенчмарки #ruvds_переводы

  31. [Перевод] Производительность интерпретатора Python 3.14 с оптимизацией хвостовых вызовов

    Примерно месяц назад проект CPython смерджил новую стратегию реализации интерпретатора байт-кода. Первоначальные результаты были очень впечатляющими , продемонстрировав среднее повышение производительности на 10-15% в широком спектре бенчмарков на различных платформах.

    habr.com/ru/companies/ruvds/ar

    #cpython #gcc #clang #интерпретаторы #байткод #бенчмарки #ruvds_переводы

  32. [Перевод] Производительность интерпретатора Python 3.14 с оптимизацией хвостовых вызовов

    Примерно месяц назад проект CPython смерджил новую стратегию реализации интерпретатора байт-кода. Первоначальные результаты были очень впечатляющими , продемонстрировав среднее повышение производительности на 10-15% в широком спектре бенчмарков на различных платформах.

    habr.com/ru/companies/ruvds/ar

    #cpython #gcc #clang #интерпретаторы #байткод #бенчмарки #ruvds_переводы

  33. [Перевод] Производительность интерпретатора Python 3.14 с оптимизацией хвостовых вызовов

    Примерно месяц назад проект CPython смерджил новую стратегию реализации интерпретатора байт-кода. Первоначальные результаты были очень впечатляющими , продемонстрировав среднее повышение производительности на 10-15% в широком спектре бенчмарков на различных платформах.

    habr.com/ru/companies/ruvds/ar

    #cpython #gcc #clang #интерпретаторы #байткод #бенчмарки #ruvds_переводы

  34. Глобально оптимальный, восьмой и наиболее быстрый вид интерпретаторов байткода

    Совершать невозможное и раздавать пинки здравому смыслу — в этом и состоит жизнь членов Гуррен-Дана! (C) Камина Эта статья вступает в техническую полемику со статьей 2015 года за авторством Atakua , подходы из которой я и атакую. Atakua исследует 7 видов интерпретаторов байткода, но делает это без уважения - быстрейшей оказывается двоичная трансляция, которая, по сути, уже не интерпретатор байткода, а форма Ahead-Of-Time компилятора. Эта двоичная трансляция транслирует байткод в машинный код, представляющий собой цепочку вызовов скомпилированных сервисных процедур. Тех самых, что в интерпретаторе байткода отвечают за выполнение каждого опкода. Но Atakua не выжал из интерпретаторов байткода всю скорость которая возможна. Так что эта статья - туториал: как написать интерпретатор байткода, который может обгонять JIT/AOT-компиляцию по скорости. Интересно? Читайте дальше! Бенчмарк прилагается. Будет немного хардкора и ни одной сгенерированной нейросетью картинки!

    habr.com/ru/articles/856480/

    #interpreter #simulation #branch_prediction #threaded #binary_translation #jit #aot #tail_recursion #tail_call_optimization #байткод

  35. Глобально оптимальный, восьмой и наиболее быстрый вид интерпретаторов байткода

    Совершать невозможное и раздавать пинки здравому смыслу — в этом и состоит жизнь членов Гуррен-Дана! (C) Камина Эта статья вступает в техническую полемику со статьей 2015 года за авторством Atakua , подходы из которой я и атакую. Atakua исследует 7 видов интерпретаторов байткода, но делает это без уважения - быстрейшей оказывается двоичная трансляция, которая, по сути, уже не интерпретатор байткода, а форма Ahead-Of-Time компилятора. Эта двоичная трансляция транслирует байткод в машинный код, представляющий собой цепочку вызовов скомпилированных сервисных процедур. Тех самых, что в интерпретаторе байткода отвечают за выполнение каждого опкода. Но Atakua не выжал из интерпретаторов байткода всю скорость которая возможна. Так что эта статья - туториал: как написать интерпретатор байткода, который может обгонять JIT/AOT-компиляцию по скорости. Интересно? Читайте дальше! Бенчмарк прилагается. Будет немного хардкора и ни одной сгенерированной нейросетью картинки!

    habr.com/ru/articles/856480/

    #interpreter #simulation #branch_prediction #threaded #binary_translation #jit #aot #tail_recursion #tail_call_optimization #байткод

  36. Глобально оптимальный, восьмой и наиболее быстрый вид интерпретаторов байткода

    Совершать невозможное и раздавать пинки здравому смыслу — в этом и состоит жизнь членов Гуррен-Дана! (C) Камина Эта статья вступает в техническую полемику со статьей 2015 года за авторством Atakua , подходы из которой я и атакую. Atakua исследует 7 видов интерпретаторов байткода, но делает это без уважения - быстрейшей оказывается двоичная трансляция, которая, по сути, уже не интерпретатор байткода, а форма Ahead-Of-Time компилятора. Эта двоичная трансляция транслирует байткод в машинный код, представляющий собой цепочку вызовов скомпилированных сервисных процедур. Тех самых, что в интерпретаторе байткода отвечают за выполнение каждого опкода. Но Atakua не выжал из интерпретаторов байткода всю скорость которая возможна. Так что эта статья - туториал: как написать интерпретатор байткода, который может обгонять JIT/AOT-компиляцию по скорости. Интересно? Читайте дальше! Бенчмарк прилагается. Будет немного хардкора и ни одной сгенерированной нейросетью картинки!

    habr.com/ru/articles/856480/

    #interpreter #simulation #branch_prediction #threaded #binary_translation #jit #aot #tail_recursion #tail_call_optimization #байткод

  37. Глобально оптимальный, восьмой и наиболее быстрый вид интерпретаторов байткода

    Совершать невозможное и раздавать пинки здравому смыслу — в этом и состоит жизнь членов Гуррен-Дана! (C) Камина Эта статья вступает в техническую полемику со статьей 2015 года за авторством Atakua , подходы из которой я и атакую. Atakua исследует 7 видов интерпретаторов байткода, но делает это без уважения - быстрейшей оказывается двоичная трансляция, которая, по сути, уже не интерпретатор байткода, а форма Ahead-Of-Time компилятора. Эта двоичная трансляция транслирует байткод в машинный код, представляющий собой цепочку вызовов скомпилированных сервисных процедур. Тех самых, что в интерпретаторе байткода отвечают за выполнение каждого опкода. Но Atakua не выжал из интерпретаторов байткода всю скорость которая возможна. Так что эта статья - туториал: как написать интерпретатор байткода, который может обгонять JIT/AOT-компиляцию по скорости. Интересно? Читайте дальше! Бенчмарк прилагается. Будет немного хардкора и ни одной сгенерированной нейросетью картинки!

    habr.com/ru/articles/856480/

    #interpreter #simulation #branch_prediction #threaded #binary_translation #jit #aot #tail_recursion #tail_call_optimization #байткод

  38. [Перевод] Архитектура и реализация виртуальной машины CPython

    Для любого языка программирования, компилируемого в байт-код, самой интересной частью его реализации является виртуальная машина, где и происходит выполнение этого байт-кода. Поскольку это ключевой элемент работы языка, его реализация должна быть высокопроизводительной. Даже если вы не являетесь разработчиком компиляторов, изучение этих механизмов может дать новые идеи для оптимизации производительности. А если вы работаете с компиляторами, то вам всегда полезно изучать, как реализованы другие языки — чтобы почерпнуть детали, которые ранее могли быть вам неизвестны. В этой статье мы рассмотрим формат инструкций байт-кода в CPython, а также реализацию цикла его интерпретации, в котором происходит выполнение байт-кода.

    habr.com/ru/companies/otus/art

    #python #cpython #виртуальная_машина #байткод

  39. [Перевод] Дизайн и реализация виртуальной машины CPython

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

    habr.com/ru/companies/beget/ar

    #Python #cpython #виртуальная_машина #байткод

  40. ByteWeaver в Open Source: инструментирование байт-кода во имя великого блага

    Про байт‑код написано уже немало. Он везде, и никого этим не удивить: его генерирует компилятор, переупаковывает система сборки, «портит» обфускатор и изредка читают программисты. Естественно, для работы с байт‑кодом есть немало инструментов, которые используются в разных областях и на разных платформах. Среди них и ByteWeaver — инструмент для патчинга байт‑кода во время сборки, который может быть полезен разработчикам под Android. Меня зовут Александр Асанов. Я Android‑разработчик в OK, Tracer, ByteWeaver. В этой статье я разберу, что такое байт‑код, как и зачем с ним работать, расскажу о ByteWeaver и покажу примеры работы с байт‑кодом.

    habr.com/ru/companies/vk/artic

    #ByteWeaver #байткод #android #open_source #java #java_libs

  41. Python: как переменные работают на самом деле? Погружаемся в байткод и C

    Привет! Меня зовут Никита Соболев, я core-разработчик языка программирования CPython, а так же автор серии видео про его устройство. Сегодня я хочу рассказать, как на самом деле работают переменные в CPython. Под катом куча кишков питона и видео на 46 минут с дополнительными кишками питона (ни один настоящий питон не пострадал при написании данной статьи).

    habr.com/ru/articles/845314/

    #python #c #переменные #байткод #виртуальная_машина

  42. Схематично, простыми словами о внутреннем устройстве PHP (Zend Engine, OPCache, JIT)

    Данный пост нацелен на неопытных PHP-специалистов. От этой информации лучше программировать вы не станете. Ожидаемая польза: Мне когнитивно и морально легче, когда уменьшается «магия» с тем с чем работаешь. Может тебе тоже Возможно чуть-чуть реже статьи на хабре будут тебя отпугивать Объясню на 4 примерах — каждый лишь немного сложнее предыдущего. Пример 1: запуск программы, написанном на компилируемом языке (Go): в полной статье Пример 2: Запуск скрипта PHP без OPCache и JIT В интерпретируемых языках подразумевается, что выполнение программы будет осуществляться не сразу машинного кода. В случае PHP — запускается именно исходной код. Это означает, что каждый запуск программы система должна проанализировать исходный код и преобразовать его в понятный код для процессора (т.е. в машинный код). Вот схематично представил всю последовательность работы PHP скрипта без включенных OPCache и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах).ache** и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах). У нас привычный «исходный код» PHP (файл hello-world.php ): <?php echo "Hello world"; Опять идем по порядку, рассмотрим какие процессы происходят запустив команду: php hello-world.php Процесс №1 — Компиляция в байт-код Сначала исходный код обрабатывается Zend Compiler — это PHP компилятор . Первый из двух основных компонентов Zend Virtual Machine . В отличие от рассмотренного выше компилятора Go: задача PHP компилятора — преобразовать исходный код не в машинный код, а в код-посредник - байт-код ; процесс компиляции происходит при каждом запуске программы (вместо лишь единоразового - до запуска программы, как в примере с Go) В случае PHP этот байт-код назвали PHP OPCode . Байт-код — более низкоуровненный чем исходный код, содержащий набор команд для интерпретатора (об интерпретаторе в следующем пункте). Байт-код не может выполняться процессором напрямую. Чтобы посмотреть результат работы компилятора — сам байт-код — выполним команду: php -d opcache.opt_debug_level=0x20000 -d opcache.enable_cli=1 hello-world.php Получим: $_main: ; (lines=3, args=0, vars=0, tmps=1) ; (after optimizer) ; /hello-world.php:1-2 0000 EXT_STMT 0001 ECHO string("Hello World") 0002 RETURN int(1) Вначале видим $_main: — обозначает, что следующие строки относятся к функции main . Появление такой функции в байт-коде для глобальной области видимости PHP — занятная историческая особенность, дошедшая из других языков; Следующие 3 строки начинаются на ; — так обозначаются комментарии. Одна из целей — для дебаг-информации; Последние 3 строки — непосредственно код нашего приложения, который будет выполняться виртуальной машиной в следующем шаге. Процесс №2 — Выполнение байт-кода

    habr.com/ru/articles/844768/

    #PHP #zend_engine #opcache #jit #интепретатор #компилятор #байткод #машинный_код

  43. Схематично, простыми словами о внутреннем устройстве PHP (Zend Engine, OPCache, JIT)

    Данный пост нацелен на неопытных PHP-специалистов. От этой информации лучше программировать вы не станете. Ожидаемая польза: Мне когнитивно и морально легче, когда уменьшается «магия» с тем с чем работаешь. Может тебе тоже Возможно чуть-чуть реже статьи на хабре будут тебя отпугивать Объясню на 4 примерах — каждый лишь немного сложнее предыдущего. Пример 1: запуск программы, написанном на компилируемом языке (Go): в полной статье Пример 2: Запуск скрипта PHP без OPCache и JIT В интерпретируемых языках подразумевается, что выполнение программы будет осуществляться не сразу машинного кода. В случае PHP — запускается именно исходной код. Это означает, что каждый запуск программы система должна проанализировать исходный код и преобразовать его в понятный код для процессора (т.е. в машинный код). Вот схематично представил всю последовательность работы PHP скрипта без включенных OPCache и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах).ache** и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах). У нас привычный «исходный код» PHP (файл hello-world.php ): <?php echo "Hello world"; Опять идем по порядку, рассмотрим какие процессы происходят запустив команду: php hello-world.php Процесс №1 — Компиляция в байт-код Сначала исходный код обрабатывается Zend Compiler — это PHP компилятор . Первый из двух основных компонентов Zend Virtual Machine . В отличие от рассмотренного выше компилятора Go: задача PHP компилятора — преобразовать исходный код не в машинный код, а в код-посредник - байт-код ; процесс компиляции происходит при каждом запуске программы (вместо лишь единоразового - до запуска программы, как в примере с Go) В случае PHP этот байт-код назвали PHP OPCode . Байт-код — более низкоуровненный чем исходный код, содержащий набор команд для интерпретатора (об интерпретаторе в следующем пункте). Байт-код не может выполняться процессором напрямую. Чтобы посмотреть результат работы компилятора — сам байт-код — выполним команду: php -d opcache.opt_debug_level=0x20000 -d opcache.enable_cli=1 hello-world.php Получим: $_main: ; (lines=3, args=0, vars=0, tmps=1) ; (after optimizer) ; /hello-world.php:1-2 0000 EXT_STMT 0001 ECHO string("Hello World") 0002 RETURN int(1) Вначале видим $_main: — обозначает, что следующие строки относятся к функции main . Появление такой функции в байт-коде для глобальной области видимости PHP — занятная историческая особенность, дошедшая из других языков; Следующие 3 строки начинаются на ; — так обозначаются комментарии. Одна из целей — для дебаг-информации; Последние 3 строки — непосредственно код нашего приложения, который будет выполняться виртуальной машиной в следующем шаге. Процесс №2 — Выполнение байт-кода

    habr.com/ru/articles/844768/

    #PHP #zend_engine #opcache #jit #интепретатор #компилятор #байткод #машинный_код

  44. Схематично, простыми словами о внутреннем устройстве PHP (Zend Engine, OPCache, JIT)

    Данный пост нацелен на неопытных PHP-специалистов. От этой информации лучше программировать вы не станете. Ожидаемая польза: Мне когнитивно и морально легче, когда уменьшается «магия» с тем с чем работаешь. Может тебе тоже Возможно чуть-чуть реже статьи на хабре будут тебя отпугивать Объясню на 4 примерах — каждый лишь немного сложнее предыдущего. Пример 1: запуск программы, написанном на компилируемом языке (Go): в полной статье Пример 2: Запуск скрипта PHP без OPCache и JIT В интерпретируемых языках подразумевается, что выполнение программы будет осуществляться не сразу машинного кода. В случае PHP — запускается именно исходной код. Это означает, что каждый запуск программы система должна проанализировать исходный код и преобразовать его в понятный код для процессора (т.е. в машинный код). Вот схематично представил всю последовательность работы PHP скрипта без включенных OPCache и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах).ache** и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах). У нас привычный «исходный код» PHP (файл hello-world.php ): <?php echo "Hello world"; Опять идем по порядку, рассмотрим какие процессы происходят запустив команду: php hello-world.php Процесс №1 — Компиляция в байт-код Сначала исходный код обрабатывается Zend Compiler — это PHP компилятор . Первый из двух основных компонентов Zend Virtual Machine . В отличие от рассмотренного выше компилятора Go: задача PHP компилятора — преобразовать исходный код не в машинный код, а в код-посредник - байт-код ; процесс компиляции происходит при каждом запуске программы (вместо лишь единоразового - до запуска программы, как в примере с Go) В случае PHP этот байт-код назвали PHP OPCode . Байт-код — более низкоуровненный чем исходный код, содержащий набор команд для интерпретатора (об интерпретаторе в следующем пункте). Байт-код не может выполняться процессором напрямую. Чтобы посмотреть результат работы компилятора — сам байт-код — выполним команду: php -d opcache.opt_debug_level=0x20000 -d opcache.enable_cli=1 hello-world.php Получим: $_main: ; (lines=3, args=0, vars=0, tmps=1) ; (after optimizer) ; /hello-world.php:1-2 0000 EXT_STMT 0001 ECHO string("Hello World") 0002 RETURN int(1) Вначале видим $_main: — обозначает, что следующие строки относятся к функции main . Появление такой функции в байт-коде для глобальной области видимости PHP — занятная историческая особенность, дошедшая из других языков; Следующие 3 строки начинаются на ; — так обозначаются комментарии. Одна из целей — для дебаг-информации; Последние 3 строки — непосредственно код нашего приложения, который будет выполняться виртуальной машиной в следующем шаге. Процесс №2 — Выполнение байт-кода

    habr.com/ru/articles/844768/

    #PHP #zend_engine #opcache #jit #интепретатор #компилятор #байткод #машинный_код

  45. [Перевод] Байт-кодовые VM в неожиданных местах

    Отвечая на вопрос в Twitter, Ричард Хипп написал, почему SQLite использует байт-кодовую VM для исполнения операторов SQL. Вероятно, большинство людей ассоциирует байт-кодовые VM с языками программирования общего назначения, например, с JavaScript или Python. Но иногда их можно встретить в неожиданных местах! В статье я расскажу о тех, которые знаю.

    habr.com/ru/companies/ruvds/ar

    #ruvds_переводы #виртуальные_машины #bytecode #ebpf #байткод #winrar #truetype #postscript

  46. Обратный инжиниринг дешевой мини видеокамеры из семейства А9

    В данной статье речь пойдет о Wi-Fi мини видеокамере из семейства А9 от китайских производителей. Цель исследования этих камер – расширить возможность их применения, которая ограничена использованием только стандартных приложений для мобильных устройств на базе Android или iOS. По итогу представлен некоторый анализ дампа сетевого трафика между камерой и мобильным приложением, а на его основе предложен работающий код на Python.

    habr.com/ru/articles/810291/

    #камера_A9 #comпорт #байткод #байтовые_логи #mjpeg

  47. Обратный инжиниринг дешевой мини видеокамеры из семейства А9

    В данной статье речь пойдет о Wi-Fi мини видеокамере из семейства А9 от китайских производителей. Цель исследования этих камер – расширить возможность их применения, которая ограничена использованием только стандартных приложений для мобильных устройств на базе Android или iOS. По итогу представлен некоторый анализ дампа сетевого трафика между камерой и мобильным приложением, а на его основе предложен работающий код на Python.

    habr.com/ru/articles/810291/

    #камера_A9 #comпорт #байткод #байтовые_логи #mjpeg

  48. Обратный инжиниринг дешевой мини видеокамеры из семейства А9

    В данной статье речь пойдет о Wi-Fi мини видеокамере из семейства А9 от китайских производителей. Цель исследования этих камер – расширить возможность их применения, которая ограничена использованием только стандартных приложений для мобильных устройств на базе Android или iOS. По итогу представлен некоторый анализ дампа сетевого трафика между камерой и мобильным приложением, а на его основе предложен работающий код на Python.

    habr.com/ru/articles/810291/

    #камера_A9 #comпорт #байткод #байтовые_логи #mjpeg

  49. EVM opcodes: перестанем бояться байт-код

    Привет, Хабр! В этой статье я погружу вас подробнее в тему низкоуровневых машинных инструкций EVM. Будет описание, сколько стоят опкоды в единицах газа и где можно про это узнать. Еще посмотрим, как разбирать байткод на базе простого примера. Прежде чем читать эту статью, предлагаю вспомнить, что такое EVM и как она устроена, поэтому будет небольшое интро. Если же вы и так про это помните и знаете – то интро можно опустить:) Поехали!

    habr.com/ru/companies/metalamp

    #evm #opcodes #байткод #bytecode #operations #gas

  50. [Перевод] Сравнение производительности dict() и {} в Python

    Какое-то время назад, во время разбора кода мы обсудили выбор dict() вместо {} в новом коде на Python. Коллега утверждал, что dict() более читаем и чётче выражает цель, поэтому следует предпочесть его. Меня это не убедило, но в тот момент контраргуентов не нашлось, поэтому я воздержался. Это заставило меня задуматься: в чём разница между типом dict и литеральным выражением {} ? Давайте изучим этот вопрос.

    habr.com/ru/articles/788440/

    #словари #cpython #байткод