По просьбе, выраженной в комментариях, попытался разобраться в том, как совместить Mono с Object Pascal. Здесь оказалось всё не так просто, хотя в описании Mono сказано, что она может работать с Object Pascal.
Дело в том, что по умолчанию в Mono есть только компилятор для C#. Для остальных языков надо устанавливать компиляторы, которые совместимы с Mono, то есть которые компилируют исходные коды не в исполняемые файлы, а в байт-коды.
Несмотря на то, что в этом примере мы получили ЕХЕ-файл, это не обычный ЕХЕ-файл Windows. Это файл, который содержит байт-код для выполнения в среде Mono. За счёт этого и достигается кроссплатформенность - если, например, на компьютере с Linux установлена Mono, то байт-код, сгенерированный в Mono на Windows, будет работать в среде Mono и на Linux, и на любой другой операционной системе.
В этом отличие Mono от кроссплатформенных компиляторов, таких как FreePascal - для каждой операционной системы (ОС) там свой компилятор, и для каждой ОС вам придётся компилировать программу именно на этой ОС. То есть вы не сможете скомпилировать программу в Windows, а запустить её в Linux. Поэтому FreePascal и/или Lazarus не подойдёт для Mono. Для Mono нужен компилятор, который преобразует исходные коды в байт-код. И Mono говорит, что такой компилятор есть. Даже два:
- RemObjects
- Delphi Prism
Ссылка на последний не работает. У Embarcadero написано, что страница в разработке. Можно, конечно, поискать где-нибудь на торрентах. Но я предпочитаю официальные сайты.
Ну а RemObjects предоставляет среду разработки для нескольких языков, в том числе и для Oxygene (это Object Pascal, заточенный под .NET). Для Windows это программа Water. Правда, эта среда разработки платная (бесплатный период 30 дней). Скачать для Windows можно здесь (потребуется ввести адрес почты, ссылка придёт на почту).
Ну и простая консольная программа на Oxygene выглядит примерно так:
Программа компилируется, и может выполняться в Windows. Будет ли выполняться на других системах - не проверял. Но пишут, что вроде как в среде Mono должна работать (в Windows я проверил - работает).
Но как это всё состыковать с Mono, то есть как сделать так, чтобы можно было вызвать компилятор из Mono и создать ЕХЕ-файл, я пока не разобрался.
По идее, если компилятор Oxygene установлен, то компиляция в Mono должна быть такой:
oxygene hello.pas
Я это видел на сайте с примерами Lazarus. Однако файлов с именем oxygene в местах установки Water я не нашёл. Возможно, они были в старых версиях. И как установить компилятор в Mono тоже непонятно.
В текущей версии Water для сборки вызывается программа EBuild, которая и создаёт ЕХЕ-файл. Однако туда надо предавать файл проекта, а не исходник .PAS. А создать проект, когда закончится пробный период, думаю, уже не получится (видимо, поэтому так и сделано).
В общем, если будет время, то продолжу исследования. Так что подписывайтесь на канал, чтобы ничего не пропустить.