А чи не замислювалися ви, що вузьке місце під час розробки чого завгодно — це програміст? Хай би як швидко ви не друкували на клавіатурі, усе одно сучасні компілятори компілюють набагато швидше. Мало хто знає, що оптимізація програм полягає не в тому, щоб програми швидко працювали на процесорі, а в тому, щоб кінцевому користувачеві було комфортно працювати за компʼютером. Пропоную вам прототип паралельного компілятора, який компілює вихідний текст саме в той момент, коли ви його пишете.

Спочатку вихідний файл порожній (див. рис. нижче), так само обʼєктна модель теж порожня.

image

У міру того, як ви набираєте текст програми, у паралельних потоках компілятор аналізує введений текст, перевіряє синтаксис, створює необхідні внутрішні обʼєкти (див. рис. нижче). Наприклад, підключення заголовкових файлів — це цілком самостійний фрагмент програми, і компілятор одразу підключає необхідні простори імен, ідентифікатори та інше. Це відображається в консолі повідомленням «Бібліотеки успішно включено», а відповідні рядки в редакторі мають зелененький фон — «усе ок».

image

У процесі написання коду компілятор робить різні підказки. У цьому прикладі в момент введення останнього рядка компілятор зустрів невідомий ідентифікатор. Одразу ж пишеться повідомлення в консоль із пропозицією задекларувати цей обʼєкт локально, глобально або як параметр. Також компілятор повідомляє, що визначення функції f1 ще не завершено. Відповідні рядки коду підсвічуються червоненьким. На рисунку нижче показано результат автоматичного визначення обʼєкта.

image

У момент написання останніх рядків програми (див. рис. нижче) компілятор визначив, що поточний вихідний файл не містить помилок і є завершеним. У консолі повідомляється, що файл не містить помилок, а також інформація про те, що функцію f1 успішно визначено.

image

Такий компілятор не потребує кнопки «Компілювати», бо синтаксичний аналіз, побудова внутрішніх обʼєктів і генерація обʼєктного коду відбуваються у фонових паралельних потоках. Якщо вже зараз такі популярні 2-, 4-ядерні процесори, то чому б не зробити такий подарунок програмістам.

Відповіді на деякі запитання.

Питання: а чи не буде це гальмувати, чи не буде постійно тріщати вінчестер? Відповідь: якщо грамотно спроєктувати й реалізувати, то не буде. Йдеться не про повну перекомпіляцію всього файла під час введення чергового символу, а про інкрементальну компіляцію, коли перекомпілюється (або докомпілюється) блок, рядок або навіть вираз вихідного файла. Ці фрагменти досить малі, щоб бути обробленими за лічені мілісекунди.

Питання: а що ж робити, якщо мені трапився вже готовий проєкт? Відповідь: під час відкриття проєкту почати компілювати його у фоні, показуючи прогрес у консолі.

Питання: де можна завантажити такий компілятор або середовище розробки? Відповідь: мені такі компілятори не відомі. Це лише ідея, як було б зручно з боку користувача. Частково така функціональність реалізована в IntelliSence у Microsoft Visual Studio, коли обʼєкти аналізуються на льоту, підкреслюються невідомі ідентифікатори.

Питання: а якщо програми немає, то де ти робив скриншоти? Відповідь: скриншоти зроблено у Візіо 2007.

Якщо ще будуть запитання в коментарях, то оновлю пост і допишу відповіді.