Показать сообщение отдельно
Старый 16.12.2009, 17:19   #9
george
Newbie
 
Регистрация: 03.08.2009
Сообщений: 14
По умолчанию

Riper, Спасибо за продолжение дискуссии!
Про промежуточный язык я знаю, 5 лет работаю с .NET.
"Книга дракона" у меня на полке стоит в бумажном виде

У меня в работе немного по-другому. Опишу подробнее, идеи и критика очень приветствуется
Мы ориентируемся на запуск функциональных программ на различных параллельных системах (упростим задачу, пусть даже системах одной архитектуры, но с разными аппаратными ресурсами – например, числом ядер – ситуация сейчас вполне обычная).

--- небольшая мотивационная часть
Сейчас параллелизм в промышленном программировании в основном реализуется так: в качестве технологии программирования используется MPI, либо различные TBB, и прочие параллельные библиотеки с потоковой моделью. В функциональных языках F#, Haskell – по сути, те же самые потоки, только завуалированные (неготовые значения, преобразования в плоский параллелизм для одновременной обработки данных, например, в массиве несколькими потоками).
-- конец мотивационной части

При таком подходе исходный код программы имеет прямую связь с ресурсами вычислительной системы (создание потоков, например). Такие программы ресурсно-зависимые, и при переносе их на другую платформу могут работать неэффективно. Чтобы адаптировать программу, часто требуется модифицировать ее исходный код.
Это и есть основная проблема, к решению которой хочется подобраться.
Предполагается следующее: язык, который максимально абстрагирован от архитектуры - функциональный язык (минимальное число императивных конструкций, описывает только зависимости по данным без учета, как это будет оттранслировано в машинный код). На этом языке реализован прикладной алгоритм, некоторые вычисления.
Требуется оттранслировать этот язык в машинный код. Причем для разных архитектур. Или проинтерпретировать его на разных архитектурах.
По сути, это управление ресурсами целевой платформы для выполнения прикладной программы. Для цели управления ресурсами предполагается использовать некоторый язык. Он будет описывать, как ресурсы целевой платформы будут захватываться, использоваться и освобождаться. Ведь стратегий управления ресурсами достаточно много, мы можем по-разному их обслуживать.
Если это память, то освобождать/захватывать в разные моменты времени. Отсюда такие стратегии, как сборка мусора, использование регионов, ручное управление.
Если это процессорное время, то это то, как мы распределяем работу по процессорам и потокам.
Список можно продолжать.
Я сейчас работаю над описанием возможных операций над ресурсами, группировки операций в процесс, связи процесса с ресурсами. Над формированием концепции.
Но запрограммировать я пока ничего не могу. Я пока не представляю, как будет выглядеть этот язык управления ресурсами. Будет ли это некоторое декларативное описание того, как работать с ресурсами, или какие-нибудь атрибуты конструкций функционального языка (чего не хотелось бы), либо подпрограммы, императивно описывающие работу с ресурсами. Может, промежуточное представление будет генерироваться с использованием правил на этом языке.
Свой функциональный язык для опытов есть.
Ну вот так, вкратце

Собственно, это и есть проблема, советов по которой я попросил. Какие-то наработки есть, но как их воплотить в код? Если написать туфту, то надо ли оно? Если ждать, пока все прояснится и появится некоторое ТЗ на реализацию – можно окончания срока аспирантуры не дождаться.
P.S. Я не претендую на какую-то мега-новизну, просто несколько иной взгляд на задачу.
george вне форума   Ответить с цитированием
Реклама