Modest — разработка открытого движка HTML рендера на «голом» Си12.09.2016 13:18
Всем привет! Меня зовут Александр Борисов и я разрабатываю Modest — открытый движок HTML-рендера на «голом» Си без использования внешних зависимостей (далее движок). Сразу хочется пояснить, что значит «без внешних зависимостей» — весь код пишется с нуля, код ни где не заимствован.
После моей последней публикации прошло не мало времени. За это время многое изменилось и я хочу поделиться с вами достижениями в разработке.
О Проекте
Основная идея проекта заключается в его неприхотливости, а это значит:
— Возможность скомпилировать/установить на любом устройстве где есть Си
— Скорость работы
— Минимально возможное потребление ресурсов
Один из конечных продуктов данной разработки является по настоящему быстрый, лёгкий, полнофункциональный браузер.
Обо всём по порядку
Возможность скомпилировать/установить на любом устройстве где есть Си
Идея заключается не только в том, чтобы иметь возможность скомпилировать/установить на любой железке, ведь Си есть практически везде, но и иметь возможность подключить движок к другому языку программирования раскрывая для этого языка полный спектр API движка. Говоря проще, иметь возможность легко сделать binding (обвязку) для вашего языка программирования.
Что же нам дадут обвязки на других языках?
Простое и понятное API движка даст нам возможность напрямую работать с HTML Tree, CSS, Render Tree/Layers (Дерево отрисовки/слои) через наш любимый язык программирования, без использования JavaScript.
На практике это будет означать следующее:
Высокая скорость доступа, создания, изменения элементов/слоёв.
Лёгкость создания интерфейсов, игр, приложений через знакомый вам язык программирования с использованием всех возможностей HTML/DOM Events/CSS.
Более того, я пошёл дальше и протестировал следующее
Сразу оговорюсь, что это лишь эксперимент, зачем оно в жизни так может понадобиться не ясно, но сделать можно.
Берём готовую обвязку для Perl и меняем её
Добавляем в обработку тега script тип Perl:
Разбираем хтмл в Perl
Когда парсер встречает тег script с типом Perl то он выполняет этот код в текущем интерпретаторе
Скрипт на Perl получился такой:
use utf8;
use strict;
use warnings;
use HTML::MyHTML::Fun;
my $html = q~
text
footer
~;
# parse HTML
my $myhtml = HTML: MyHTML→new (MyHTML_OPTIONS_DEFAULT, 1);
my $tree = $myhtml→new_tree ();
$myhtml→parse ($tree, MyHTML_ENCODING_UTF_8, $html);