Хотел бы я такую фичу. Вообще говоря, как по мне, математическая программа должна перемалывать числа. Объектный подход кушает очень много ресурсов, причём эти ресурсы в главном рассчитаны на универсальный подход к построению описания модели "математическая программа", чем на сами вычисления. Тому доказательство - тормоза в работе математических программ. Если пользователь что-то запрограммировал, то это интерпретируется - по-моему это одна из основных причин, почему инженеру всё-равно нужно изучать ЯВУ, чтобы получить _реальные_ результаты.
Так вот, мне кажется, что можно перевести код программы (функции) прямо в машинные команды. Хочу сам попробовать это сделать на примере функции implicitplot3d(). Если у меня будет доступ к нативной записи функции в виде ОПЗ, то я могу налету сгенерить код для процессора и всунуть её в неуправляемую dll как тело функции.
Я уже давно об этом подумывал, т.к. внутри программы нет способов заставить работать функцию с приемлемым качеством, т.е. с количеством треугольников у модели больше нескольких десятков тысяч. Никакая оптимизация не уберёт интерпретацию. Очень здорово, что низкоуровневая обработка доступна пользователю. Не знаю уж как автор догадался дать такую возможность пользователю, но это супер вещь.
План у меня очень простой:
Шаг 1. Пишу на ассемблере код алгоритма implicitplot3d(), причём, прежде чем работать с функцией нужно будет инициализировать массивы.
Шаг 2. Этот код компилируется в неуправляемую dll. Эта dll будет состоять из нескольких секций. Одна из секций (кода) будет содержать шаблон функции и точку входа для её вызова.
Шаг 3. Пишем плагин для SMath. Этот плагин должен перевести ОПЗ функции в опкод процессора. Вставить этот код в dll в то место, где находится шаблон. Потом инициализировать память для работы с функцией и вызвать функцию через механизм работы с неуправляемым кодом.
Вот так всё просто. Т.о. самые нудные вычисления будут выполняться на уровне ассемблера, а всё остальное - лишь обёртки для этого.
Думается мне, что такой механизм, но встроенный в код SMath, был бы очень интересен для практических целей. Ведь все эти красивости на самом деле никому не нужны. Реальные задачи грузят проц не по-детски. Можно было бы ввести галочку - "использовать откомпилированную версию". Не оптимизированную, а именно откомпилированную.
Ничего страшного в формате исполняемого файла нет, тем более по-началу можно сделать хитро как я предложил. Откомпилировать шаблон с алгоритмом, а изменяемую часть оставить в виде секции, которую можно заменять. Система пропустит такие вещи. В будущем можно было бы сделать это прозрачным для пользователя.
П.С. Но это на очень далёкое будущее. Только не думайте, что новые процессоры будут быстрее, памяти больше и тому прочая ерунда. Процы уже быстрее, а памяти не меряно... просто микрософт ищёт всё время чем же это всё занять, чтобы продажи не падали.... спираль однако.