Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Подскажите пожалуйста, на каком языке такое реализовать ?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.073 c
11-1182871715
Robt
2007-06-26 19:28
2013.03.22
снова TrackBar


15-1342500894
Peter_Evil
2012-07-17 08:54
2013.03.22
ошибку: CommandText does not return a result set


3-1282479566
larsp
2010-08-22 16:19
2013.03.22
Имеется приложение, работающее с FB через BDE.


1-1299075890
pvr
2011-03-02 17:24
2013.03.22
Заполнение странички с помощью TWebBrowser


15-1340220153
Дмитрий С
2012-06-20 23:22
2013.03.22
Посоветуйте алгоритм контрольной цифры.