Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПодскажите пожалуйста, на каком языке такое реализовать ? Найти похожие ветки
← →
mechanic (2012-08-26 03:20) [0]Необходимо сгенерировать листинг программы (вернее библиотеки), далее скомпилировать например в dll и подгрузить в выделеную область памяти, чтобы потом можно было вызвать из библиотеки несколько функций.
Сгенерировать, припустим, исходный код я могу и в Delphi. Потом запускаем в отдельном процессе компилятор (желательно фришный, тот же gcc например). А потом что делать ?
Delphi умеет делать динамическую линковку ? Или с помощью какого языка или среды такое проще всего соорудить ?
← →
Германн © (2012-08-26 03:24) [1]
> mechanic (26.08.12 03:20)
>
> Необходимо сгенерировать листинг программы (вернее библиотеки),
> далее скомпилировать например в dll и подгрузить в выделеную
> область памяти, чтобы потом можно было вызвать из библиотеки
> несколько функций.
>
Учебная задача?
← →
Inovet © (2012-08-26 09:15) [2]> [0] mechanic (26.08.12 03:20)
> Delphi умеет делать динамическую линковку ?
Ты про DLL? - Странный вопрос. А почему бы ей запретили это?
← →
Dimka Maslov © (2012-08-26 10:24) [3]Delphi умеет всё ибо имеет полный доступ ко всем функциям вынь-апи напрямую без оболочек и прочих костылей. Поэтому в ней доступны даже такие функции как LoadLibrary и FreeLibrary.
← →
Студент (2012-08-26 14:28) [4]JavaScript? Python?
Текст подгружаешь и запускаешь на движке языка.
← →
Студент (2012-08-26 14:31) [5]Студент (26.08.12 14:28) [4]
Еще Lua
← →
Дмитрий С © (2012-08-26 16:01) [6]
> JavaScript? Python?
JScript на винде вообще легко.
← →
mechanic (2012-08-26 16:03) [7]Это не учебная задача.
Это небольшая самописная програмка по механике.
Строиться кинематическая схема, описываются уравнения движения для каждого узла и сегмента и проводятся вычисления. В данный момент это все работает используя постфиксное преобразование формул. Проблема в быстродействии. Когда формулу вбиваешь напрямую для конкретной схемы - скорость возрастает чуть ли не в десять раз.
> Студент (26.08.12 14:28) [4]
> JavaScript? Python? Еще Lua
Java пробовали, гораздо медленнее Delphi, причем с жуткожрущим память фреймверком. Lua думаю будет такой же как и Ява.
Python может быть, пишут что скомпилированый код не сильно отличается по быстродействию от нативного.
← →
Inovet © (2012-08-26 16:09) [8]Как вариант
http://www.paxcompiler.com/
← →
Дмитрий С © (2012-08-26 16:24) [9]
> Проблема в быстродействии.
А не пробовали оптимизировать вычислитель формулы? Как то занимался такой задачей, оптимизировал все что только можно.
← →
Inovet © (2012-08-26 16:29) [10]> [9] Дмитрий С © (26.08.12 16:24)
> А не пробовали оптимизировать вычислитель формулы?
Кстати, да. Мне удвалаось получить примерно в 2 раза меньшее быстродействие в сравнении с нативным.
← →
Студент (2012-08-26 20:12) [11]mechanic (26.08.12 16:03) [7]
Java != JavaScript два абсолютно разных языка под разные нужды.
← →
Дмитрий С © (2012-08-27 13:01) [12]
> Кстати, да. Мне удвалаось получить примерно в 2 раза меньшее
> быстродействие в сравнении с нативным.
Вот-вот. Следующим этапом у меня было компилирование разобранной формулы в машинный код, но так и не реализовал.
← →
mechanic (2012-08-28 10:07) [13]
> Inovet © (26.08.12 16:09) [8]
> Как вариант
> http://www.paxcompiler.com/
Большое спасибо, попробую разобраться. Хотя сначала я хотел использовать компилятор от фрипаскаля, но пока не разобрался толком с лицензией.
> Дмитрий С © (26.08.12 16:24) [9]
> А не пробовали оптимизировать вычислитель формулы? Как то занимался такой задачей, оптимизировал все что только можно.
Пробовали.
Но довольно тяжело оптимизировать это:
if func = "SIN" then result := sin(value);
> Вот-вот. Следующим этапом у меня было компилирование разобранной формулы в машинный код, но так и не реализовал.
Вот мы и хотим это реализовать, скомпилировав формулу в dll :)
> Студент (26.08.12 20:12) [11]
> Java != JavaScript два абсолютно разных языка под разные нужды.
Если в данной ситуации по скорости работы эти два абсолютно разных языка будут показывать близкие результаты быстродействия - то разницы между ними нет.
← →
Inovet © (2012-08-28 10:16) [14]> [13] mechanic (28.08.12 10:07)
> Но довольно тяжело оптимизировать это:
>
> if func = "SIN" then result := sin(value);
Кто же так оптимизирует. При выполнении всё уже должно быть разобрано.
← →
AV © (2012-08-28 10:26) [15]производную ищем?
← →
Дмитрий С © (2012-08-28 10:44) [16]
> Кто же так оптимизирует. При выполнении всё уже должно быть
> разобрано.
>
Кстати, а я не помню. Ведь действительно еще на этапе разбора можно подставить адрес функции, вместо ее имени.
← →
Inovet © (2012-08-28 10:58) [17]> [16] Дмитрий С © (28.08.12 10:44)
> Кстати, а я не помню. Ведь действительно еще на этапе разбора
> можно подставить адрес функции, вместо ее имени.
Я делал два стека: для вызовов и для данных В первом указатели на фунции, во втором константы из исходника и фунции затем со вторым работают - могут добавлять, удалять и прочее. Делал, правда, на C++Builder с STL, а в STL при отключенных отладочных опциях и включенной оптимицации много чего из функций работы с контейнерами становится inline т.е. вызов функции заменяется на пару ассемблерных комманд, ну и скорость в разы увеличивалась в моём случае. На Делфи просто руками надо это реализовать. А при подходе автора о какой скорости может идти речь.
← →
Inovet © (2012-08-28 10:59) [18]> [15] AV © (28.08.12 10:26)
> производную ищем?
Откуда вывод?
← →
mechanic (2012-08-28 11:04) [19]Т.е. вы думаете перенос логики в отдельно скомпилированый модуль не поможет ?
← →
Inovet © (2012-08-28 11:12) [20]> [19] mechanic (28.08.12 11:04)
> Т.е. вы думаете перенос логики в отдельно скомпилированый
> модуль не поможет ?
Мы про другое тут говорим - о существующем подходе. А в отдельном будет обычный исполняемый код.
← →
mechanic (2012-08-28 12:44) [21]
> Inovet © (28.08.12 11:12) [20]
> Мы про другое тут говорим - о существующем подходе.
Ну так мы уже приняли решение отказаться от существующего подхода.
А по ресурсам будет одинаково, что попытаться оптимизировать старый алгоритм, что разработать новый.
← →
Дмитрий С © (2012-08-28 12:48) [22]
> А по ресурсам будет одинаково, что попытаться оптимизировать
> старый алгоритм, что разработать новый.
Зато придется с собой компилятор таскать, и компилироваться будет долго.
← →
Inovet © (2012-08-28 13:10) [23]> [22] Дмитрий С © (28.08.12 12:48)
> Зато придется с собой компилятор таскать
По ссылке выше PaxCompiler, он встраиваемый, машинный код правда у него специфический, зато видны функции и переменные хост и скрипта причем в обе стороны.
← →
Inovet © (2012-08-28 13:15) [24]> [23] Inovet © (28.08.12 13:10)
Комилируется долго, может разработчик улучил уже. Но можно сохранить скомпилированный результат в файл и загрузить потом, только ещё надо вместе сохранить таблицу функций из хоста с идентификаторами, потом загружать без компиляции, но до первой перекомпиляции хоста.
← →
mechanic (2012-08-28 15:51) [25]
> Дмитрий С © (28.08.12 12:48) [22]
> Зато придется с собой компилятор таскать, и компилироваться будет долго.
Таскать компилятор - не проблема.
Долгая компиляция, долгая только стравнительно. При времени выполнения одного расчета в 2-4 часа, компиляция 2-5 минут - это мгновенно.
← →
Дмитрий С © (2012-08-28 17:05) [26]
> mechanic (28.08.12 15:51) [25]
А паралелить собираешься?
← →
mechanic (2012-08-28 17:38) [27]
> Дмитрий С © (28.08.12 17:05) [26]
> А паралелить собираешься?
Пока такой задачи на ставлю. В организации 90% компьютеров - одноядерные :\
← →
Дмитрий С © (2012-08-28 18:03) [28]Попробуй фрипаскалем. Поставь его (или его гуи версию lazarus) и сделай там проект DLL ки, в котором потом будешь подставлять свою формулу и компилируй его этим самым FP.
← →
AV © (2012-08-29 11:37) [29]2 Inovent
Да просто в универе решали такую
Вбивается там, пусть,y=1+sin(x)/1-cos(x) , должно ответить производной y"= ( cos(x)*(1-cos(x)) - sin(x)*sin(x) ) / ( 1-cos(x))^2 )
Решается относительно легко через рекурсию
← →
wl © (2012-08-29 22:09) [30]почему никто не вспомнил про .NET?
навскидку - в язык встроен компилятор с исходного языка в IL.
IL - это уже не интерпретатор, JIT-компилятор во время запуска такой программы сделает из него native, не сильно хуже, чем если изначально на нативе писать
← →
Inovet © (2012-08-29 22:37) [31]> [30] wl © (29.08.12 22:09)
> почему никто не вспомнил про .NET?
Вспомнили, но предлагать не стали.
← →
Anatoly Podgoretsky © (2012-08-30 08:53) [32]> wl (29.08.2012 22:09:30) [30]
А .NET не язык.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.08 c