Власна платформа. Частина 0.2 Теорія. Інтерпретатор CHIP8

Введення
Здрастуй, світ! Сьогодні у нас переклад специфікації мови CHIP8. Це стаття містить тільки теоретичну частину.
*COSMAC ELF у всій красі*COSMAC ELF
Що таке CHIP8?
CHIP8 це інтерпретується в microsoft мова програмування, який був розроблений Джозефом Вейзбекером (прим. переклад Joseph Weisbecker) в сімдесятих для використання в RCA COSMAC VIP. В подальшому був використаний COSMAC ELF, Telmac 1800, ETI 660, DREAM 6800. Тридцять одна (35?) інструкція давали можливості для виведення простого звуку, монохромного графіки в дозволі на 64 32 пікселя, а також дозволяло використовувати 16 кнопок. Сьогодні CHIP-8 часто використовується для навчання базовим навиком емуляції (не інтерпретації). Інтерпретатори CHIP-8 часто помилково називають емуляторами. Це пов'язано з фактом великої схожості CHIP-8 з комп'ютером.

Читати далі →

Сім видів інтерпретаторів віртуальної машини. У пошуках самого швидкого

Всі проблеми в області Computer Science можуть бути вирішені введенням додаткового рівня побічності. За винятком одного: занадто великого числа рівнів побічності.
All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection.
Програмні інтерпретатори відомі своєю невисокою швидкістю роботи. У цій статті я розповім, як їх можна прискорити.
Я давно вже хотів детальніше зупинитися на створенні інтерпретаторів. Прямо таки обіцяв, у тому числі самому собі. Проте серйозний підхід вимагав використання більш-менш реалістичного коду для прикладів, а також проведення вимірювань продуктивності, що підтверджують (а іноді і спростовують) мої аргументи. Але нарешті-то я готовий представити поважній публіці результати, причому навіть трохи більш цікаві, ніж збирався.
У даній статті буде описано сім способів побудови програмної ВМ для однієї гостьової системи. Від самих повільних ми проследуем більш швидким, по черзі позбавляючись від різних «неэффективностей» в коді, і в кінці порівняємо їх роботу на прикладі однієї програми.
Тих, хто не боїться ассемблерних лістингів, поцяткованого макросами коду на Сі, рясно хімічного адресної арифметикою, goto і навіть longjmp, а також програм, що використовують копіпаст в ім'я швидкості або навіть створюють шматки самих себе, прошу просимо під кат.

Читати далі →

Асемблер для задач моделювання. Частина 1: гостьовий асемблер

Instructions, registers, and assembler directives are always in UPPER CASE to remind you that assembly programming is a fraught endeavor
golang.org/doc/asm
На Хабре так і в Інтернеті в цілому є досить багато інформації про використання мов асемблера для різних архітектур. Перегорнувши доступні матеріали, я виявив, що найчастіше освітлювані в них області використання асемблера і споріднених технологій наступні:
  1. Вбудовувані (embedded) системи.
  2. Декомпіляція, зворотна розробка (reverse engineering), комп'ютерна безпека.
  3. Високопродуктивні обчислення (HPC) і оптимізація програм.
І звичайно ж, в кожній з цих областей існують специфічні вимоги, а значить свої поняття про інструменти і «свій» асемблер. Эмбедщики дивляться в код через редактор і дебагер, реверс-інженери бачать його в декомпиляторах начебто IDA і radare2 і отладчиках ICE, а HPC-специ — через профилировщики, такі як Intel® VTune™ Amplifier,
xperf
або
perf
.
І мені захотілося розповісти про ще однієї області програмування, в якій ассемблеры часті супутники. А саме — про їх роль при розробці програмних моделей обчислювальних систем, в народі іменованих симуляторами.

Читати далі →

Типи даних наносять удар у відповідь

Це друга частина моїх роздумів на тему «Python, яким би я хотів його бачити», і в ній ми більш детально розглянемо систему типів. Для цього нам знову доведеться заглибитися в особливості реалізації мови Python і його інтерпретатора CPython.

Якщо ви програміст на мові Python, для вас типи даних завжди залишалися за кадром. Вони десь там існують самі по собі і як там взаємодіють один з одним, але найчастіше ви замислюєтеся про їх існування лише коли виникає помилка. І тоді виняток говорить вам, що якийсь із типів даних веде себе не так, як ви від нього чекали.

Python завжди пишався своєю реалізацією системи типів. Я пам'ятаю, як багато років тому читав документацію, в якій був цілий розділ про переваги качиної типізації. Давайте начистоту: так, в практичних цілях качина типізація — хороше рішення. Якщо ви нічим не обмежені і немає потреби боротися з типами даних по причині їх відсутності, ви можете створювати дуже красиві API. Особливо легко на Python виходить вирішувати повсякденні завдання.

Практично всі API, які я реалізовував на Python, не працювали в інших мовах програмування. Навіть така проста річ, як звичайний клікабельний інтерфейс просто не працює в інших мовах, і основна причина в тому, що вам доводиться безупинно боротися з типами даних.

Не так давно піднімалося питання додавання статичної типізації в Python, і я щиро сподіваюся, що крига нарешті скресла. Постараюся пояснити, чому я проти явної типізації, і чому сподіваюся, що Python ніколи не піде цим шляхом.


Читати далі →