Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.095 c
2-1341408918
%s
2012-07-04 17:35
2013.03.22
вывод даты


2-1333615730
Yl2011
2012-04-05 12:48
2013.03.22
Использование TCanvas для определения размера шрифта


2-1332000787
alexdn
2012-03-17 20:13
2013.03.22
Компонент TRichEdit


15-1343757442
brother
2012-07-31 21:57
2013.03.22
Диск есть, а вот его нет!


2-1338983806
iMain
2012-06-06 15:56
2013.03.22
Client WebService





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский