хром сейчас на всех платформах по дефолту собирается с помощью ninja. Разве что на ios, кажется, используется xcodebuild, но не уверен. От всего остального сейчас отказываются. А с переходом от gyp к gn других вариантов кроме ninja не останется вовсе.
У вас немножко неверные данные. Хромиум с нуля собирается за полтора часа на i7 16GB RAM, чуть больше чем за час на 2x Xeon (по 16 ядер) 32GB RAM или чуть меньше двух часов на i5 16GB RAM (все с SSD). За час можно собрать только с distcc или dist-clang с билд-фермой. А релизный некомпонентный билд с LTO может линковаться только минут сорок в некоторых случаях. На i3 с HDD я как-то ждал сборки >8 часов и не дождался, прервал.
Пожалуйста уберите try/catch вокруг чтения файла. Он там бесполезен. Вы используете только функции libc, которые не бросают исключения. Единственная ошибка, которую в этом коде еще можно было бы получить — ошибка выделения памяти, что в текущем виде все равно приведет к segmentation fault, а не к исключению. Тот кусок стоило написать как-то так:
Сафари в последнем релизе так делать стал, раньше там тоже был один профиль на все инкогнито вкладки. Но не скажу, что от этого стало удобнее. Да, часть кейсов благодаря этому упростились, но часть наоборот стала сильно сложнее.
Заголовок окна — действительно обычная не клиентская область, поэтому там можно использовать системные функции рисования (и то, это как правило не используется, потому что рисовать через toolkit views заметно проще, так как приходится писать меньше кода и портируемость есть из коробки.
Я не знаю, как именно это реализовано в FF, но в хромиумных браузерах контент рисуется в отдельном процессе рендеринга, и приезжает в основной процесс в виде готовых картинок-квадов. Основной процесс просто отрисовывает эти квады в правильных местах экрана. И встроить в эту схему системные контролы уже практически не реально. Можно пытаться визуально мимикрировать под них, но для этого придется поддерживать контролы для каждой отдельной версии каждой поддерживаемой операционки и еще как-то согласовывать это с установленными у пользователя темами. Поддерживать две с половиной версии шапки окна для разных версий Windows (а еще не забываем про hidpi) — уже большая головная боль, а если так будет с каждым контролом — получится очень много работы практически на пустом месте и с минимальной пользой.
Именно так. Aura сильно улучшила отрисовку интерфейса, а также упростила разработку — теперь ui код пишется один для Windows и Linux. Но добились этого ценой отказа от нативной отрисовки в пользу openGL/DirectX, из-за чего рисовать нативные контролы стало невозможно.
Поддерживаю, начинать надо с понимания работы компьютера на низком уровне, и лучше чем ассемблер в этом ничто не поможет. Лично видел много примеров, когда люди банальные указатели в C не могли понять, пока до ассемблера не спускались и о C ABI не узнали.
Ну вот на практике гораздо удобнее использовать простые редакторы, чем десять раз на дню переиндексировать половину проекта, когда список нужных модулей меняется.
Забыт аргумент, который лично я всегда привожу против использования навороченных IDE. Если исходники в проекте измеряются гигабайтами, количество файлов сотнями тысяч, а время сборки часами, то очень быстро начинаешь люто ненавидеть все умные семантические автодополнения и прочие фичи полноценных IDE, потому что, не справляясь с объемами кода, они начинают сильно тормозить даже на топовых компах.
Мой изначальный посыл в том, что Yaml — на любителя, и JSON с комментариями может быть гораздо удобнее.
Собственно на js и так есть транслятор из коробки:
JSON.parse(JSON.minify(text))
Для других языков существуют специальные парсеры (как тот же jsoncpp).
А вот что касается трансляции в другии форматы с сохранением комментариев, имхо, во-первых, проблема надуманная, так как автоматически сгенерированное и не должно содержать комментариев, во-вторых, js не самый подходящий язык для подобных действий.
Ну а само решение проблемы — красивое, потому что короткое и всего одной регуляркой, но не поддерживаемое. Хотя, если вынести части регулярки в define секцию и дать им символьные имена, можно добиться гораздо большей читаемости и поддерживаемости, но труЪ кулл-хацкеры так не делают, да.
То есть сначала сделать разбор в лексемы, а синтаксический анализатор использовать такой, при генерации которого использовалась запись грамматики, в соответствии с которой порядок элементов в словаре будет обратный.
Если не брать во внимание возможность того, что ключи в словаре могут повторяться (а с чего бы собственно это предусматривать?), то как именно писать — без разницы и скорее дело привычки того, кто пишет грамматику для лексического анализатора.
Это явное UB? Я не удивляюсь, что там прирост скорости вдвое, там компилятор имел право вообще пол системы снести во время трансляции.
Упрощенный пример и предупреждение: codepad.org/U2jK5eIo
Я не знаю, как именно это реализовано в FF, но в хромиумных браузерах контент рисуется в отдельном процессе рендеринга, и приезжает в основной процесс в виде готовых картинок-квадов. Основной процесс просто отрисовывает эти квады в правильных местах экрана. И встроить в эту схему системные контролы уже практически не реально. Можно пытаться визуально мимикрировать под них, но для этого придется поддерживать контролы для каждой отдельной версии каждой поддерживаемой операционки и еще как-то согласовывать это с установленными у пользователя темами. Поддерживать две с половиной версии шапки окна для разных версий Windows (а еще не забываем про hidpi) — уже большая головная боль, а если так будет с каждым контролом — получится очень много работы практически на пустом месте и с минимальной пользой.
Собственно на js и так есть транслятор из коробки:
Для других языков существуют специальные парсеры (как тот же jsoncpp).
А вот что касается трансляции в другии форматы с сохранением комментариев, имхо, во-первых, проблема надуманная, так как автоматически сгенерированное и не должно содержать комментариев, во-вторых, js не самый подходящий язык для подобных действий.
Ну а само решение проблемы — красивое, потому что короткое и всего одной регуляркой, но не поддерживаемое. Хотя, если вынести части регулярки в define секцию и дать им символьные имена, можно добиться гораздо большей читаемости и поддерживаемости, но труЪ кулл-хацкеры так не делают, да.
Сравните разницу в фрагменте:
Обратный порядок:
Прямой порядок:
Если не брать во внимание возможность того, что ключи в словаре могут повторяться (а с чего бы собственно это предусматривать?), то как именно писать — без разницы и скорее дело привычки того, кто пишет грамматику для лексического анализатора.
yacc/bison: