А не задумывались ли вы, что узкое место при разработке чего-либо — это программист? Как бы вы быстро не печатали на клавиатуре, всё равно современные компиляторы компилируют намного быстрее. Мало кто знает, что оптимизация программ заключается не в том, чтобы программы быстро работали на процессоре, а в том, чтобы конечному пользователю было комфортно работать за компьютером. Предлагаю вам прототип параллельного компилятора, который компилирует исходный текст в тот самый момент, когда вы его пишите.

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

image

По мере того, как вы набираете текст программы, в параллельных потоках компилятор анализирует введенный текст, проверяет синтаксис, создает необходимые внутренние объекты (см. рис. ниже). Например, подключение заголовочных файлов — это вполне самостоятельный фрагмент программы, и компилятор сразу подключает необходимые пространства имен, идентификаторы и прочее. Это отражается в консоли сообщением «Библиотеки успешно включены», а соответствующие строки в редакторе имеют зелененький фон — «всё ок».

image

В процессе написания кода компилятор делает различные подсказки. В этом примере, в момент ввода последней строки компилятор встретил неизвестный идентификатор. Сразу же пишется сообщение в консоль с предложением задекларировать этот объект локально, глобально или как параметр. Также компилятор сообщает, что определение функции f1 ещё не завершено. Соответствующие строки кода подсвечиваются красненьким. На рисунке ниже показан результат автоматического определения объекта.

image

В момент написания последних строк программы (см. рис. ниже), компилятор определил, что текущий исходный файл не содержит ошибок и является завершенным. В консоли сообщается, что файл не содержит ошибок, а также информация о том, что функция f1 успешно определена.

image

Такой компилятор не нуждается в кнопке «Компилировать», потому что синтаксический анализ, построение внутренних объектов и генерация объектного кода происходит в фоновых параллельных потоках. Раз уж сейчас так популярны 2-, 4-ядерные процессоры, то почему бы не сделать такой подарок программистам.

Ответы на некоторые вопросы.

Вопрос: а не будет ли это тормозить, не будет ли трещать постоянно винчестер? Ответ: если грамотно спроектировать и реализовать, то не будет. Речь идет не о полной перекомпиляции всего файла при вводе очередного символа, а об инкрементальной компиляции, когда перекомпилируется (или докомпилируется) блок, строчка или даже выражение исходного файла. Эти фрагменты достаточно малы, чтобы быть обработанными за считанные миллисекунды.

Вопрос: а как же быть, если мне попался уже готовый проект? Ответ: при открытии проекта начать его компилировать в фоне, показывая прогресс в консоли.

Вопрос: где можно скачать такой компилятор или среду разработки? Ответ: мне такие компиляторы не известны. Это только идея, как было бы удобно со стороны пользователя. Частично такая функциональность реализована в IntelliSence в Microsoft Visual Studio, когда на лету анализируются объекты, подчеркиваются неизвестные идентификаторы.

Вопрос: а если нет программы, то где ты делал скриншоты? Ответ: скриншоты сделаны в Визио 2007.

Если ещё будут вопросы в комментариях, то обновлю пост и допишу ответы.