F # на Linux Mono с полной статической компиляцией - PullRequest
4 голосов
/ 15 сентября 2011

Я хотел бы иметь возможность запускать код, написанный на F #, в системе Linux (Debian), но вряд ли я смогу установить Mono на него.Есть ли способ скомпилировать F #, чтобы он был полностью статичным и не зависел от Mono?В основном просто получаю исполняемый двоичный файл, который я могу запустить, как и любой другой двоичный файл Linux?

Ответы [ 2 ]

4 голосов
/ 16 сентября 2011

Даже на урезанном аккаунте вы можете скомпилировать свою собственную версию Mono - это не особенно сложно, см. http://www.mono -project.com / Compiling_Mono .Есть несколько зависимостей, но их нетрудно найти.Вам нужно будет поставить префикс для большинства ваших текущих вызовов с моно, например mono myapp.exe вместо ./myapp.exe

3 голосов
/ 15 сентября 2011

Попробуйте AOT .Но будьте осторожны с его ограничениями.

Обновление:

Мне кажется, я слишком быстро набросился на ответ и недостаточно глубоко погрузился, чтобы повернуть егово что-то полезное.AOT предварительно скомпилирует код в разделяемые библиотеки, при правильных условиях это может повысить производительность.

Тем не менее, если у вас есть требование вообще не устанавливать моно среду выполнения на клиентском компьютере (почему?), Я думаю, вам следует попробовать mkbundle / mkbundle2 .Это создаст огромный автономный исполняемый файл (C # Hello World + deps сгенерировал файл размером около 2,5 МБ для моей машины ... С -z я получил около 900 КБ).Вы можете попробовать объединить его с Linker для дальнейшего удаления неиспользуемых частей библиотек, от которых зависит ваше приложение.

Что касается вашего второго вопроса, то компилятор F # сгенерирует CIL как и любой другой компилятор .NET.Так что, это не должно иметь значения.Тем не менее, если ваше приложение содержит либо инструкции IL, которые еще не поддерживаются моно AOT-компилятором (например, вам нужен mkbundle2 для обработки обобщенных типов), либо зависимости от внешних связанных библиотек, которые вы не можете установить в свой Debian, вам не повезло.Думаю, вам придется самостоятельно выполнить несколько проб и ошибок.

...