Я намагаюся краще зрозуміти, що потрібно, щоб компілятор міг зробити інтелектуальний вибір щодо одночасності від імені програміста. Я розумію, що існує багато складних аспектів цієї проблеми, наприклад:
- Забезпечення відсутності перегонових умов
Забезпечення одночасного запуску коду не матиме побічних ефектів, що впливають на смислове значення коду
Вирішити, чи варто накладні витрати на прядіння ниток, враховуючи ступінь паралельності, наявного в коді
Я розумію, що два основних проміжних представлення, які використовуються в сучасних компіляторах, є статичним єдиним призначенням для процедурних та об'єктно-орієнтованих мов та стилем продовження передачі функціональних мов. Розібратися з будь-якою з перерахованих вище проблем видається за допомогою цих проміжних форм важко. Навіть мови, які теоретично повинні мати найкращі шанси при автоматичній паралелізації (чисті функціональні мови, такі як Haskell з гарантією відсутності побічних ефектів), досягли обмеженого прогресу на цьому фронті.
Отже, моє запитання справді те, які проміжні уявлення використовувались для того, щоб спробувати вирішити цю проблему? Чи є інші уявлення, які були використані в академічних дослідженнях, про які я не знаю, які краще підходять до цього завдання? Чи є ця проблема тією, яку принципово доводиться вирішувати переднім кінцем компілятора, маніпулюючи абстрактним синтаксичним деревом, перш ніж компіляція досягне проміжного представлення?