Найти тему

Mono и язык программирования Oxygene

Не люблю отступать ))) Даже если результат мне не нужен. Ранее я уже попытался скрестить Object Pascal (точнее, Oxygene) с Mono. Не вполне удачно, потому что последние версии компиляторов Oxygene не стыкуются с Mono (ну или я не знаю, как это сделать).

Но я уже не мог остановиться ))) Поэтому нашёл старую версию компилятора Oxygene. Потратил на это кучу времени - не так это просто оказалось. На официальном сайте старых версий нет. Поэтому пришлось побродить по просторам Интернета. Ссылку не даю, поскольку, как я уже сказал, это не официальный сайт. Файл установщика, который я скачал, называется RemObjects Oxygene - 7.0.71.1477_Downloadly.ir.exe. В оригинале, возможно, он называется по-другому.

Процесс установки - обычный для Windows. При установке этот компилятор автоматически прикручивается к Mono, так что никаких дополнительных действий для компиляции из Mono не потребуется. После установки в папке C:\Program Files (x86)\RemObjects Software\Elements\Bin (если до этого вы установили новую версию Water) появляется файл Oxygene.exe.

Однако, поскольку это более старая версия, то код, который мы использовали здесь, компилироваться не будет. Правильно будет так:

namespace hello;
interface
type
App = class
public
class method Main;
end;
implementation
class method App.Main;
begin
WriteLn('Hello World on Object Pascal and Mono!');
end;
end.

Пишем этот текст в любом текстовом редакторе (например, в Блокноте) и сохраняем куда-нибудь с именем hello.pas. У меня этот файл будет в папке D:\MYPROG\_TEST\MONO\PASCAL. Теперь можно запустить Mono и скомпилировать программу:

После компиляции в той же папке появится файл hello.exe. Но на этом ваши мучения не закончились. Если теперь вы запустите этот файл в Mono, то он не будет выполнен:

-2

Здесь вам радостно сообщают, что версия .NET RunTime, которая используется программой, недоступна. Это сообщение будет даже в том случае, если соответствующие библиотеки установлены на компьютере. А всё это потому, что по умолчанию всегда используются последние версии .NET (на сегодня это 7.0, а 8.0 уже на тестировании, поэтому запуск программы через cmd тоже ни к чему не приведёт), а в Mono, судя по всему, это версия 4. Седьмая же версия компилятора Oxygene использует более старые версии .NET (точно не знаю, какие).

В общем, вам придётся в том же каталоге, где находится созданный нами hello.exe, создать текстовый файл hello.runtimeconfig.json, и записать туда следующее:

{
"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "1.1.2"
}
}
}

Таким образом мы указываем среде исполнения, что надо использовать конкретную версию .NET (в моём случае 1.1.2 - я перестраховался))). Но также надо понимать, что все необходимые файлы для этой версии должны быть установлены на компьютере.

Однако и в этом случае через Mono вы не сможете запустить эту программу. Потому как надо ещё заставить Mono использовать именно эту версию .NET. И я пока не разобрался, как это сделать.

Но проверить работоспособность программы всё-таки можно через dotnet. Для этого в командной строке наберите:

dotnet hello.exe

То есть скомпилированная программа всё-таки работает:

-3

Правда, она не запускается в среде Mono (ну это, скорее всего, я ещё не разобрался с конфигурацией).

Ну и вывод, конечно, напрашивается простой - нафиг-нафиг… Слишком много заморочек, чтобы писать программы для Mono на любимом языке. Уж лучше использовать туже Lazarus под Linux (или другие системы), ну или просто писать на C#.

Третий вариант - купить Water. Но это дорогое удовольствие - 799 баксов. И я уж точно найду лучшее применение этим деньгам.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.