Добрый день. Необходимо написать свой браузер, который бы работал на нескольких платформах (Windows, Linux, Mac, ?Android?, ...) и подобно Google Chrome (на базе WebKit, Chromium...) + возможность взаимодействия кода с javascript. Последнее время использовал c#, а если надо было, то mono.
1) Соответственно, встал вопрос по поводу языка/ide: писать для каждой платформы отдельно либо кроссплатформенно?
2) Предпочтительно второе, но на каких инструментах/языках?
Слышал про запуск .Net Core, однако не такой уж он и кроссплатформенный. Сейчас выбираю между c++ и java (ни того, ни другого не знаю). Но мне не нужно что либо изобретать. Идеальным вариантом было бы установить какой-нибудь Qt (слышал, но не пробовал), перетащить всякие элементы на форму (WebView, например) и написать код в обработчиках событий. Ну и, естественно, при сборке на другие платформы не морочиться с редактированием исходных кодов, желательно даже на мобильные платформы.
3) В какую сторону копать; что лучше изучать; в какой IDE (wysiwyg редакторе) работать и на каком языке; какой браузерный движок лучше и проще использовать?
Заранее спасибо))
p.s.
Прощу прощения, если допустил какие либо ошибки в терминологии, названиях и т.п.
RidgeA: просматривать сайт как в Google Chrome, но иметь возможность выполнения встроенного в страницу кода на локальной машине+всё это не в окне браузера, а в своём отдельном.
В Qt есть свой браузерный движок, его и используйте. Раз Qt, то лучше сразу на C++ делать, будет наиболее быстрый вариант. Но можно и на питоне или на чем-нибудь еще куда Qt портирован.
Спасибо за совет. Многие мне говорили то же самое, но потом добавляли, что проще будет использовать javafx+webview (ибо java выучить проще, нежели c++ с его аккуратно расставленными ловушками и заряженными ружьями). Как вы относитесь к этому?
Griboks: ловушки и ружья появляются, если что-то не понимаешь. Когда ясно как работает компилятор и какое средство языка для чего предназначено и как им пользоваться, то и патроны кончаются и ловушки пропадают. Не язык делает ловушки, а программист сам себе копает яму.
res2001, есть самопис гуевого прокси на Си++, естественно есть исходники, но я точно знаю, что в них есть ошибка и наверняка не одна, т.к. писалась она в юности, когда я не знал и не понимал всех тонкостей программирования на Си++. Более того я их и сейчас до конца не знаю. но тем не менее программа довольно успешно и стабильно работает, но есть одно НО. Она работает более-менее стабильно только на одном ядре. А вот как только ей выделяют 2 ядра она начинает стабильно глючить так скажем. Причем это вот очень жесткая закономерность. И вот мне было бы интересно ваше мнение по поводу того чего же я лично не понимаю в языке Си++. Готов предоставить эти исходники или даже выложить их на гитхаб, чтобы услышать компетентное мнение от вас. Может быть вам не составит труда указать на эти самые ловушки, ружья и патроны?
4ainik, Проблема, скорее всего, не в языке, а в том как вы работаете с разделяемыми ресурсами в параллельном режиме.
выделяют 2 ядра
Что вы подразумеваете под этой фразой?
Если многопоточность, то нужно синхронизировать доступ потоков к общим ресурсам.
Под общими ресурсами в этом случае в основном понимается общие области памяти используемые параллельными потоками (общие переменные). Если происходит одновременная запись из разных потоков в одну переменную - то результат операции не предсказуем. Общий подход к решению проблемы - минимизировать общие ресурсы, а там где их приходится использовать - пользоваться примитивами синхронизации.
По этой теме для С++ есть хорошая книга.
Еще под этой фразой можно понимать многопроцессность - это уже несколько другая история и проблемы там другие.
res2001, под термином "2 ядра" по имел ввиду процессор интел с технологией HT (Hyper Threading)". А насчет многопоточности вы вот сами как считаете прокси сервер может работать в однопоточном режиме? Я допускаю что самостоятельный ответ в данном случае может вызвать затруднение, поэтому ответом будет да, это многопоточное приложение и потоков может быть несколько десятков. При этом само понимаете какие сейчас сайты и сколько запросов в секунду приходится обрабатывать прокси....
Так что это все лирика, а вот ваш ответ насчет поставленного вопроса/предложения по codereview мне не понятен, так вы согласны дать свою экспертную оценку, хотя бы с высоты глубоких знаний Си++?
4ainik, В наше время трудно найти процессор с одним физическим ядром, разве что в виртуальной машине, поэтому и возник вопрос. В связи с этим не очень понятно причем здесь HT- несколько ядер может быть и без него.
У вас глюки начинаются только при включенном HT?
Абстрактный прокси сервер может работать в однопоточном режиме, почему бы и нет. Асинхронные операции ввода/вывода могут заметно увеличить производительность одного потока.
Codereview достаточно большого проекта "на общественных началах" я делать не готов.
Последние несколько лет я больше использую Си, а не С++. Конечно, стараюсь, по возможности, и плюсы не забывать.
4ainik, Нормальный код, имхо.
Я бы еще явно определил конструктор перемещения, а так же операции присваивания копированием и перемещением.
На счет review - если объем проекта не очень большой (условно до 5000 строк кода), посмотрю бесплатно. Смогу уделить время на выходных (суббота/воскресенье), не уверен что справлюсь за один раз - как пойдет. У меня в профиле есть почтовый адрес. Потребуется описание архитектуры проекта и полное описание ошибки.
конструктор перемещения, а так же операции присваивания копированием и перемещением
я примерно понимаю о чем идет речь, но вот это все не могли бы вы привести объявления (желательно с реализацией) этих конструкторов и операторов, а то я в этом "хромаю".
Перемещение актуально, если вы в проекте используете С++11 и выше. В С++03 еще не было семантики перемещения.
Вот тут рассказано о семантике перемещения и в разделе "Перегрузка для lvalue/rvalue" приведен класс со всеми нужными перегрузками.
В вашем случае можно и операции копирования и конструктор перемещения определить пустыми в секции private, как вы это сделали с не нужными конструкторами.
Вообще в С++11 и выше для таких целей есть спецификатор delete, который говорит компилятору, что не нужно генерировать метод "по умолчанию". Например:
Ваш вопрос некорректен, поэтому и ответы в основном будут либо троллинг либо бесполезные.
Причины некорректности:
1. Написание браузера - вещь непростая.
Чтобы взяться за написание браузера, который может хотя бы html+css, не говоря уж о js и какие-то плагины с flash, нужны знания множества технологий, глубокие знания языка. А вы пишете что пока не знаете ни C++ ни java, и C# видимо знаете мало.
2. Опять таки не знаете на чем писать, при этом уже хотите выбрать какой-то движок. Так посмотрите на чем написан движок, хотябы соберите его - узнаете, что для него нужно.
3. Вопрос про "wysiwyg редактор" очень смешной. Вы не собираетесь использовать отладчик вообще?
В общем рекомендация - если вы хотите просто скомпилить готовый движок, написать в справочной менюшке свой копирайт и сделать вид, что вы сделали браузер - пишите в чем угодно.
Если хотите писать реально свой браузер - сперва напишите что-то попроще, изучите язык. И тогда подобные вопросы просто исчезнут.
1) Вы путаете браузер с движком. Мне не надо писать свой движок: рендеринг html, интерпретатор js и прочее. Я хочу использовать готовый, добавив к нему всякие кнопочки, закладки, синхронизацию, сохранение файлов и т.д.
C# я знаю на столько, на сколько мне требуется. Я считаю, что потребности рождают инструменты, а не наоборот. Поэтому я и задаю здесь вопрос.
2) Chromium написан на С++, однако есть и, например, CEFSahrp. Мне же хочется добавить условный webview на форму и закодировать его окружение без головной боли и сборки исходников, как это делается в Visual Studio, к примеру.
3) Ясное дело, что собираюсь. Вы видели много IDE (редакторов) с конструктором, но без отладчика? А много ли IDE с отладчиком, но без конструктора? Поэтому первостепенным для меня является удобный конструктор интерфейса, а отладить код можно и в другом месте.
В общем, я хочу использовать готовый компонент для просмотра сайтов + закодировать взаимодействие js и веб-страницы в целом с моей программой.
P.S.
Я так понимаю, что вы разбираетесь в этой теме, поэтому пишу это пояснение, а не редактирую сам вопрос.
Интересовался данной темой, но понял, что это слишком долго и муторно делать.
Во первых: Конкуренция качественных браузеров очень большая
Во вторых: Необходимо знать очень много для разработки
PS: wysiwyg редактор для чего? как правило пишется всё в IDE, а там, как я знаю, такого нет, да и не особо нужно.
PS2: Недавно заинтересовался темой с Electron. Сам он работает на движке Chromium и используется технология Node.JS (Java scripts). По описанию очень функционален и имеет возможность кастомизации приложения с помощью хороших фреймворков (как CSS, так и JS фреймворках).
Дело в том, что браузер не представляет из себя конечную самоцель, а лишь является часть большего проекта.
Спасибо за наводку. Электрон рассматривался, как вариант. Однако он не подошёл, т.к. нет перспектив для мобильных платформ и по иным причинам. В идеале, необходимо написать свой простенький аналог Электрона на более... классическом языке. Вот и интересуюсь: на каком именно языке и с помощью каких IDE (конструкторов, виджетов и т.п)?
p.s.
Wysiwyg редактор - это, по сути, обычный визуальный конструктор интерфейса.
на ассемблере или на vba.
Первый хорош тем, что не содержит ничего лишнего (в т.ч. никакого синтаксического сахара - отличная диета заодно), а программы написанные на нем могут быть невероятно быстрыми и компактными. Тогда лучше купить самый современный процессор и писать под набор инструкций, который он поддерживает
Второй хорош тем, что прост в изучении и уже встроен в excel. Соответственно можно объединить excel с браузером.