Skip to content

Instantly share code, notes, and snippets.

View pozitronik's full-sized avatar
🇬🇪
Loving Georgia

Pavel Dubrovsky pozitronik

🇬🇪
Loving Georgia
View GitHub Profile

Presto изнутри: как устроен движок Opera 12 — и стоит ли его воскрешать

Большой технический разбор браузерного движка Presto — того самого, на котором работала Opera вплоть до версии 12.15. Исходники движка утекли в сеть в 2017 году; я взял этот архив, собрал его под современным Linux и Windows и провёл несколько недель, разбираясь, как он устроен. Ниже — подробная карта движка: архитектура и инженерные узоры, система сборки, JavaScript-движок Carakan, интерфейс браузера и его неотделимость от движка, модель потоков, поддержка 32 и 64 бит, внутренние идиомы, тесты, самые честные комментарии разработчиков — и развёрнутые ответы на вопросы, которые задаёт каждый, кто видит такой код: можно ли его причесать по канонам чистой архитектуры, не переписать ли всё на Rust, что и в каком порядке стоит улучшать — и врали ли в Opera, когда отказывались открыть исходники, ссылаясь на их «плохое состояние».


Зачем вообще смотреть на мёртвый движок

Сегодня существует ровно три живых браузерных движка, способны

@pozitronik
pozitronik / you_suck.txt
Created May 10, 2023 08:21
Говним Пашу💩💩💩
💩Здесь мы оставляем анонимные комментарии о том, что я делал плохо, не так, неправильно или просто мог бы лучше.
---
@pozitronik
pozitronik / BadgeWidget.php
Last active February 26, 2021 11:43
Ещё код на изучение
<?php
declare(strict_types = 1);
namespace pozitronik\widgets;
use pozitronik\helpers\Utils;
use pozitronik\helpers\ArrayHelper;
use pozitronik\helpers\ReflectionHelper;
use Throwable;
use yii\base\DynamicModel;
@pozitronik
pozitronik / AuthHelper.php
Created February 18, 2021 10:21
Кусок кода на анализ
<?php
namespace app\components\helpers;
use Yii;
use yii\db\Query;
use yii\db\Exception;
/**
@pozitronik
pozitronik / CachedQuery.php
Last active May 14, 2020 11:02
experimental query cache model
<?php
declare(strict_types = 1);
namespace app\modules\targets\stubs;
use Yii;
use yii\db\ActiveQuery;
use yii\db\Query;
/**
@pozitronik
pozitronik / SQueue.php
Created May 23, 2019 11:10
Простая очередь сообщений, работающая через кеш (тупо для того, чтобы не завязываться на отдельную реализацию механик, которые уже есть в кеше).
<?php
declare(strict_types = 1);
namespace app\models\core;
use Yii;
use yii\base\Model;
/**
* Class SQueue
@pozitronik
pozitronik / ChunkedFileStream.pas
Last active January 10, 2018 12:12
ChunkedFileStream prototype
unit ChunkedFileStream;
interface
uses System.Classes, System.SysUtils;
type
TChunkedFileStream = class(TFileStream)
private