Re: Свой браузер на C++
От: okman Беларусь https://searchinform.ru/
Дата: 11.12.11 08:16
Оценка:
Здравствуйте, graviton9, Вы писали:

G>Хочу написать свой браузер причем с нуля в инете везде советуется встроенная в visual studio тулза CppWebBrowser но мне это не устраивает. Опыт у меня достаточно. С чего начать какие функции, апи, книги статии и тгд посоветуйте.


Мой рецепт будет традиционен и зануден — как минимум, обложиться всякими RFC и
официальными спецификациями HTML/CSS/Javascript/TCP+HTTP, начиная с самых ранних
версий, и, достигнув в их штудировании некоторого понимания и зрелости, пробовать
писать отдельные компоненты движка рендеринга, сравнивая результаты их работы с
работой других популярных браузерных движков. Кстати, глубокое знакомство с
внутренним устройством таких движков, — я имею в виду по меньшей мере чтение их
исходного кода и комментариев, — может оказаться очень полезным.
Перед тем, как сделать что-то хорошее, посмотри, как это сделано у других.

Если интерес к этой задаче не угаснет хотя бы в течение первых двух-трех лет,
и будет кто-то, кто согласится спонсировать весь этот инженерно-костыльный кошмар, то
вполне можно написать нечто, умеющее более-менее нормально отображать веб-страницы.
Не все, конечно, но процентов 60-70 точно. При этом я даже не заикаюсь о поддержке
HTTPS/FTP, прокси-серверов, кэширования, Flash, AJAX и т.д.

А еще придется столкнуться с массой вещей, которые будут бесить и выводить из себя.
Например, обилие реализаций, нахально не следующих стандартам, и соответствующее
обилие браузерных костылей, чтобы такие реализации поддерживать.

При этом количество багов и производительность, скорее всего, окажутся такими, что
нужно будет постоянно бороться с мыслями бросить все и засесть за вторую версию.
Re: Свой браузер на C++
От: uzhas Ниоткуда  
Дата: 11.12.11 12:49
Оценка: :)
Здравствуйте, graviton9, Вы писали:

G>Привет.

проще всего устроиться на работу в мелкософт или гугл: там и название браузеру уже придумали
Re[4]: Свой браузер на C++
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.12.11 14:02
Оценка: 2 (1)
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, samius, Вы писали:


CS>>>В зависимости от опыта написать HTML/CSS rendering engine это примерно от 6 до 18 месяцев.

S>>Я бы не стал ограничивать сверху 18-и месяцами без оговорки относительно поддерживаемых фич HTML/CSS, т.к. уверен, что за 18 человеко-месяцев нереально реализовать все фичи разметки, поддерживаемые современными браузерами в среднем по больнице. Проблема так же в том, что разные браузеры реализуют разные фичи по-разному, и время еще уйдет на то, что бы разобраться, какой вариант реализации той или иной фичи лучше соответствует спецификации (или ее частной трактовке).

CS>Технически сие возможно.

Конечно, ведь технически нас ограничивает лишь скорость ввода исходников через интерфейс автор/компьютер. И скорость компиляции
CS>Я например могу за 18 месяцев сделать нечто на уровне современных Gecko или WebKit.
CS>Имеется ввиду HTML/CSS rendering CSS 2.1, т.е. до уровня ACID2 теста.
Неплохо! Но вот FF/NoScript для 100% прохождения ACID2 требует разрешить выполнять скрипты. Т.е. к HTML/CSS надо добавлять видимо JS/DOM? Либо оговаривать степень выполнения ACID2.

Не, я, конечно, верю в такой сценарий, когда некий разработчик, написав за 36 месяцев нечто подобное, утверждает, что версию 2.0 он сделает с нуля за 18 месяцев. Реальный такой сценарий

CS>>>Начальное планирование и архитекура — критичны. На переделывать хотелки может не хватить.

S>>Вероятность разработать архитекту, которую не придется переделывать, до начала кодирования, человеком, который задает вопрос, с чего начать, да еще и с грузом дополнительных хотелок, ради которых затевается разработка своей разметки — полагаю что она невелика.

CS>Это да. Но скажем свой BlockNote я писал 9 месяцев. Там CSS зачаточный, но то по условию задачи.

CS>И с нуля вообще. Правда был опыт написания WYSIWYG редакторов.
У мну обратная ситуация. Сейчас как раз 18-ый месяц беременности разметчиком HTML/CSS. Он далек от ACID2, хотя это и не требовалось. Зато умеет некоторые специфические и очень нужные заказчику фишки. Т.е. после того, как я немного поварился в предмете, я могу сделать утверждение о том что справлюсь со своим BlockNote за 8 месяцев (не факт, на самом деле что справлюсь, но думать я так могу) Опять таки, надо оговаривать набор фич, потому как все заявленные фичи BlockNote мне в одну каску не осилить и за 18 месяцев.

CS>А вообще дорогу осилит идущий.

Во всяком случае у него есть на это шанс!
Re[2]: Свой браузер на C++
От: graviton9  
Дата: 11.12.11 15:43
Оценка: :)
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, graviton9, Вы писали:


G>>Привет.

U>проще всего устроиться на работу в мелкософт или гугл: там и название браузеру уже придумали
Спасибо всем за советы. Просто есть желания написать серьезный проект до этого написал норм процессный менеджер и на 40% написал файл менеджер (после того как понял как все остальное реализовать пропал интерес). И вот как -то на форуме посоветовали написать еще и браузер (видимо пошутили) и я подумал включить браузер в функциональность своего файл-менеджера.
Re[3]: Свой браузер на C++
От: DorfDepp  
Дата: 11.12.11 16:18
Оценка: 1 (1)
Здравствуйте, graviton9, Вы писали:

G>Речь не идет о написании браузера типо chrome, mozzila, opera..... имею ввиду простенкий браузер для отображения страниц


Для "отображения страниц" нужно освоить, как минимум, HTML и CSS, спецификации которых весьма путанны и неоднозначны, к тому же существуют разные версии. Потом еще нужно сделать восстановление после возникших ошибок парсинга. И еще тысяча вещей.

Одному человеку это не под силу.
Re[4]: Свой браузер на C++
От: graviton9  
Дата: 11.12.11 18:14
Оценка:
Здравствуйте, DorfDepp, Вы писали:

DD>Здравствуйте, graviton9, Вы писали:


G>>Речь не идет о написании браузера типо chrome, mozzila, opera..... имею ввиду простенкий браузер для отображения страниц


DD>Для "отображения страниц" нужно освоить, как минимум, HTML и CSS, спецификации которых весьма путанны и неоднозначны, к тому же существуют разные версии. Потом еще нужно сделать восстановление после возникших ошибок парсинга. И еще тысяча вещей.


DD>Одному человеку это не под силу.

Спасибо за ответы. Просто на одном форуме посоветовали (видимо пошутили). Просто после процессного менеджера и файл менеджера (закончил на 40 % примерно) хотелось что то посерезнее, кстати что посоветуйте напистаь ?
Re[5]: Свой браузер на C++
От: anonymouss  
Дата: 11.12.11 18:32
Оценка: 1 (1) :)
Здравствуйте, graviton9, Вы писали:

G>Здравствуйте, DorfDepp, Вы писали:


DD>>Здравствуйте, graviton9, Вы писали:


G>>>Речь не идет о написании браузера типо chrome, mozzila, opera..... имею ввиду простенкий браузер для отображения страниц


DD>>Для "отображения страниц" нужно освоить, как минимум, HTML и CSS, спецификации которых весьма путанны и неоднозначны, к тому же существуют разные версии. Потом еще нужно сделать восстановление после возникших ошибок парсинга. И еще тысяча вещей.


DD>>Одному человеку это не под силу.

G>Спасибо за ответы. Просто на одном форуме посоветовали (видимо пошутили). Просто после процессного менеджера и файл менеджера (закончил на 40 % примерно) хотелось что то посерезнее, кстати что посоветуйте напистаь ?

Тут главное, не размениваться на мелочи. Лучше сразу начинать писать свою ось. Тем более что есть масса положительных примеров: Таненбаум, Торвальдс.
Re[5]: Свой браузер на C++
От: c-smile Канада http://terrainformatica.com
Дата: 11.12.11 19:30
Оценка: 2 (1)
Здравствуйте, мыщъх, Вы писали:

М>Здравствуйте, c-smile, Вы писали:


CS>>Здравствуйте, samius, Вы писали:


CS>>Технически сие возможно. Я например могу за 18 месяцев сделать нечто на уровне современных Gecko или WebKit.

М>мне неизвестен ни один браузер, написанный с нуля. в том же фоксе чужих библиотек до черта (не считая наследия нетшкафа). так что эта возможность чисто теоритическая и ни разу не подкрепленая практикой.

Для рендеринга HTML/CSS в принципе достаточно JPG,PNG,GIF + стандартные примитивы windows.
Для поддержки <canvas> нужно что-то типа AGG,cairo,GDI+ ну и для <video> что-то соответсвующее.

Т.к. FF мултиплатформенный то ему требуется набор библиотек для фактической эмуляции windows API на разных платформах. Тот же pango вместо uniscribe и пр.

CS>>Имеется ввиду HTML/CSS rendering CSS 2.1, т.е. до уровня ACID2 теста.

М>со стандартными библиотеками и ничем другим? помилуйте.

Да, до уровня ACID2 кроме JPG,PNG,GIF и стандартных библиотек (std, C++11 или моей tool) больше ничего не надо.
За год. Но опять же с высоты своего собственного опыта (5 написанных версий HTML/CSS + все спеки вдоль и поперек и не раз).

Да, для того чтобы сделать именно browser — устойчивый error handling для страниц from Web wilderness + browser chrome (UI) + плюшки типа transition/animations + scripting (готовый V8 например)
нужно больше. Но это уже задача для команды из 4-5 человек и примерно двух лет в целом.
Утверждаю что за два года можно написать browser общего назначения класса GC или FF.

CS>>А вообще дорогу осилит идущий.

М>это если есть цель. если цели нет. непонятно куда идти и зачем, то ни идущий, ни бегущий дороги не осилят, ибо нет цели.

Предполагается что дорога в данном случае это нечто что идет из пункта А в пункт Б. Я ж про это и говорил — как минимум пункт Б должен быть известен. И также пункты питания в дороге.
Желательно также иметь промежуточный пункт А-bis где-нить на Карибах. В котором нужно остановиться и еще раз все оценить. И решить может надо со всем хозяйством двигаться в пункт В вообще.
Т.е. архитектура должна быть модульной. Из блоков собранных по дороге по-хорошему нужно иметь возможность собрать что-то еще. Но это уже так — из области завихрений здравого смысла.
Re[6]: Свой браузер на C++
От: мыщъх США http://nezumi-lab.org
Дата: 11.12.11 20:07
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, мыщъх, Вы писали:


CS>Для рендеринга HTML/CSS в принципе достаточно JPG,PNG,GIF + стандартные примитивы windows.

если мы говорим за api винды, то бразуер можно и за неделю написать. чем отличается браузерное api от средств работы с графическими файлами?
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[5]: Свой браузер на C++
От: c-smile Канада http://terrainformatica.com
Дата: 11.12.11 20:16
Оценка: 2 (1)
Здравствуйте, samius, Вы писали:

S>Неплохо! Но вот FF/NoScript для 100% прохождения ACID2 требует разрешить выполнять скрипты. Т.е. к HTML/CSS надо добавлять видимо JS/DOM? Либо оговаривать степень выполнения ACID2.


ACID2 это сугубый тест CSS и совсем чуть HTML. Скрипт там не требуется.

S>Не, я, конечно, верю в такой сценарий, когда некий разработчик, написав за 36 месяцев нечто подобное, утверждает, что версию 2.0 он сделает с нуля за 18 месяцев. Реальный такой сценарий


А что конкретно тебя смущает? Да, я знаю как сделать эффектвный и расширямый DOM, я знаю как парсить и представлять в памяти CSS оптимально и с учетом дальнейших расширений.
Т.е. технически 9 месяцев на DOM и CSSOM и девять месяцев на layout managers коих в HTML/CSS в общем-то три: vertical block flow, inline (text) flow, table flow. Плюс рядом floats и position:absolute.
Совершенно реально. Еще и много, если времени на "снег башка попадет" не тратить (т.е. есть реальный опыт).
Re[7]: Свой браузер на C++
От: c-smile Канада http://terrainformatica.com
Дата: 11.12.11 20:22
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Здравствуйте, c-smile, Вы писали:


CS>>Здравствуйте, мыщъх, Вы писали:


CS>>Для рендеринга HTML/CSS в принципе достаточно JPG,PNG,GIF + стандартные примитивы windows.

М>если мы говорим за api винды, то бразуер можно и за неделю написать. чем отличается браузерное api от средств работы с графическими файлами?

Под Windows API я имею ввиду не COM интерфейсы типа IWebBrowse а так называемый plain windows API из kernel.dll, gdi.dll и user.dll
Re[6]: Свой браузер на C++
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.12.11 06:52
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, samius, Вы писали:


S>>Неплохо! Но вот FF/NoScript для 100% прохождения ACID2 требует разрешить выполнять скрипты. Т.е. к HTML/CSS надо добавлять видимо JS/DOM? Либо оговаривать степень выполнения ACID2.


CS>ACID2 это сугубый тест CSS и совсем чуть HTML. Скрипт там не требуется.

Как тогда объяснить то что FF не выполняет ACID2 до конца с заблокированными скриптами?

S>>Не, я, конечно, верю в такой сценарий, когда некий разработчик, написав за 36 месяцев нечто подобное, утверждает, что версию 2.0 он сделает с нуля за 18 месяцев. Реальный такой сценарий


CS>А что конкретно тебя смущает? Да, я знаю как сделать эффектвный и расширямый DOM, я знаю как парсить и представлять в памяти CSS оптимально и с учетом дальнейших расширений.

Хорошо, когда знаешь как. Т.е. либо уже писал, либо еще что. Остается лишь записать решение. В таком случае, можно уложиться и в меньшее время.
CS>Т.е. технически 9 месяцев на DOM и CSSOM и девять месяцев на layout managers коих в HTML/CSS в общем-то три: vertical block flow, inline (text) flow, table flow. Плюс рядом floats и position:absolute.
CS>Совершенно реально. Еще и много, если времени на "снег башка попадет" не тратить (т.е. есть реальный опыт).
Много времени как раз нужно на "снег башка попадет". Например, vertical-align в разных движках выглядит похожим лишь в первом приближении. Но ни один движек в точности не соответствует спецификации, в той трактовке, в которой я ее понимаю. Везде какие-то расхождения. Еще пример: по каким правилам переносить border-ы inline non-replaced боксов? Будут ли они переноситься отдельно от содержимого? Или нет? Спека не дает ответ на этот вопрос, а движки браузера ведут себя по-разному. Хорошо, когда знаешь как поступить, и остается записать решение.
Еще пример — GDI портачит с Font matching-ом. Т.е. согласно спеке CSS, Font-matching должен работать строго указанным способам, а через GDI невозможно даже узнать, есть ли глиф для некоторого codepoint-а в данном fontface-е. У GDI все есть. Т.е. он достанет глиф из какого-то другого фейса, ты об этом и не узнаешь.
Даже грамматика CSS местами неоднозначна. Я закидывал вопросы на rsdn, местами мне объяснили, местами нет. Кстати, ты кажется учавствовал в обсуждении.
Итого, время как раз уходит на то, что прямо по рельсам спецификации не проехать. Все время надо где-то искать брод, объезд, облет, компромиссы...
Но да, если знаешь ответы на все вопросы, то остается лишь записать решение.
Re[3]: Свой браузер на C++
От: lgb Канада  
Дата: 12.12.11 17:15
Оценка: 3 (1)
Здравствуйте, graviton9, Вы писали:

G>Спасибо всем за советы. Просто есть желания написать серьезный проект до этого написал норм процессный менеджер и на 40% написал файл менеджер (после того как понял как все остальное реализовать пропал интерес).


Игрушку напиши.

G>И вот как -то на форуме посоветовали написать еще и браузер (видимо пошутили) и я подумал включить браузер в функциональность своего файл-менеджера.


Ну так и включи этот готовый CppWebBrowser в свой проект.
Re[3]: Свой браузер на C++
От: vsb Казахстан  
Дата: 14.12.11 04:01
Оценка:
Здравствуйте, graviton9, Вы писали:

G>Здравствуйте, uzhas, Вы писали:


U>>Здравствуйте, graviton9, Вы писали:


G>>>Привет.

U>>проще всего устроиться на работу в мелкософт или гугл: там и название браузеру уже придумали
G>Спасибо всем за советы. Просто есть желания написать серьезный проект до этого написал норм процессный менеджер и на 40% написал файл менеджер (после того как понял как все остальное реализовать пропал интерес). И вот как -то на форуме посоветовали написать еще и браузер (видимо пошутили) и я подумал включить браузер в функциональность своего файл-менеджера.

В Windows есть стандартный браузер Internet Explorer. Движок от него (грубо говоря — рабочую область) несложно использовать в своём приложении. Так вы получите качественный движок с минимальным вложением сил. Естественно это только для Windows. Ещё есть Webkit — движок, который используется в Safari, Google Chrome. Он в стандартной поставке Windows не идёт, но использовать его тоже никто не запрещает, просто дистрибутив вашего приложения будет занимать немного больше места. Ну и с портируемостью у этого движка тоже всё в порядке.

Писать свой браузер не стоит, если у вас нет финансирования лет на 5 вперёд. Да и тогда я бы очень хорошо подумал.
Re: Свой браузер на C++
От: A13x США  
Дата: 14.12.11 07:34
Оценка: :)
Здравствуйте, graviton9, Вы писали:

G>Привет. Хочу написать свой браузер причем с нуля в инете везде советуется встроенная в visual studio тулза CppWebBrowser но мне это не устраивает. Опыт у меня достаточно. С чего начать какие функции, апи, книги статии и тгд посоветуйте. Спасибо.


Предлагаю для начала написать свой компилятор и свою ось.
Re: Свой браузер на C++
От: eddiez  
Дата: 14.12.11 07:48
Оценка: 2 (1)
Помница, было такое задание на собеседовании в Spb Software. Тока нада было закодить простенький браузер за 1.5 часа на MFC — ну чтобы только текст из HTTP request'a корректно отображался с форматированием, картинки не обязательно. Спортивное программирование, my ass..
Re[7]: Свой браузер на C++
От: samius Япония http://sams-tricks.blogspot.com
Дата: 14.12.11 12:08
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, c-smile, Вы писали:


S>>>Неплохо! Но вот FF/NoScript для 100% прохождения ACID2 требует разрешить выполнять скрипты. Т.е. к HTML/CSS надо добавлять видимо JS/DOM? Либо оговаривать степень выполнения ACID2.


CS>>ACID2 это сугубый тест CSS и совсем чуть HTML. Скрипт там не требуется.

S>Как тогда объяснить то что FF не выполняет ACID2 до конца с заблокированными скриптами?

Прошу прощения, был невнимателен. Не разобрался, что именно блокирует NoScript в ACID2. А там <object>.
Re[2]: Свой браузер на C++
От: pkl  
Дата: 21.12.11 15:02
Оценка:
Здравствуйте, romankr, Вы писали:

R>Здравствуйте, graviton9, Вы писали:


G>>Привет. Хочу написать свой браузер причем с нуля в инете везде советуется встроенная в visual studio тулза CppWebBrowser но мне это не устраивает. Опыт у меня достаточно. С чего начать какие функции, апи, книги статии и тгд посоветуйте. Спасибо.


R>Я рекомендую взяться за Qt. Там есть Webkit, и вам не придется заниматься велосипедостроением. Подробнее, можете подсмотреть здесь — http://doc.qt.nokia.com/latest/qtwebkit-guide.html

R>http://doc.qt.nokia.com/latest/qwebview.html

Могу подогнать свой самодельный HTML-парсер, работающий с юникодом Рожает на выходе цепочку структур типа HTMLTag — имя тега + набор параметров. Умеет забивать болт на комментарии и яваскрипты.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.