Встраивание:моно против Луа
-
05-09-2019 - |
Вопрос
Мне интересно услышать об опыте людей по внедрению mono (реализации .NET с открытым исходным кодом) в приложение C/C++.Как распространять такое приложение и каковы зависимости?Я тестировал OS X, и mono представляет собой огромную структуру (сотни МБ).Нужна ли всем пользователям моего приложения эта большая структура, или ее можно урезать или все скомпилировать в основной исполняемый файл.
Раньше у меня был опыт внедрения Lua в приложение на C++, и это работает очень хорошо, потому что я могу статически связать весь интерпретатор Lua с моим основным исполняемым файлом.Поэтому у меня нет внешних зависимостей.Можно ли сделать что-то подобное с моно?
Есть ли здесь пользователи Lua, которые могут прокомментировать, как они нашли моно по сравнению с Lua?
ПС:Под встраиванием я подразумеваю приложение C++, которое инициализирует моно-среду, загружает сборку .NET и выполняет ее, а затем обеспечивает связь между, скажем, кодом C# в сборке и методами C++ в основном исполняемом файле.
Решение
Вероятно, вам также стоит взглянуть на Mono Маленький след страница, описывающая, как можно встроить меньшую среду выполнения.Черт возьми, они делают это сами с Лунный свет.
Надеюсь, это поможет.
Другие советы
Это вопрос двухлетней давности.Так что сейчас ситуация может измениться.
Для меня самым важным моментом был GC.Я встроил Lua для интерактивных приложений и игр, потому что требовался инкрементальный сборщик мусора.В настоящее время Lua 5.1 имеет точный инкрементный сборщик мусора, но я не смог найти никаких доказательств инкрементального или точного сбора мусора в Mono.Таким образом, память будет утекать (даже если она очень маленькая!), а приложения будут периодически работать с ошибками.
Люди говорят, что паузу GC можно решить, настроив некоторые параметры и объединив объекты, но, по моему опыту, это никогда быть решено без каких-либо распределение нагрузки GC по времени подход в GC.Generational GC — это один из алгоритмов распределения, но он слишком груб и почти бесполезен.
Потому что вы не можете контролировать шаблон времени жизни или повторно использовать экземпляр, объединяя объекты, используемые в коде, который не принадлежит вам.(например, базовая библиотека классов)
Поэтому я не рекомендую платформу C# (Mono или .NET, по крайней мере, пока) для интерактивных/(мягких) приложений реального времени.
Редактировать
Я не знаю, представлен ли какой-либо инкрементный/параллельный сборщик мусора в Mono или .NET.Если вы уверены, что они предлагают такой тип GC, конечно, его можно использовать :)