Я бы был Вам очень признателен если бы Вы записали и выложили видео установки. Мы бы тогда начали пробовать на различных устройствах и определять типичные глюки и проблемы.
хорошо, постараюсь сделать запись в ближайшее время
Благодаря наводкам @zhurlik получилось запустить PascalABC.NET в Linux с помощью wine.
Компилятор работает без ошибок. В среде разработки не работает справка “Образцы кода” и требуются кое-какие доп. настройки. Остальное работает отлично (в том числе, процесс дебага, ссылки, подсказки, графические модули и т.д.).
Шаги:
-
sudo apt install wine winetricks
. -
winecfg
→ Библиотеки → в списке выбираемmscoree
и указываемСторонняя (Windows)
→ Нажимаем Применить, закрываем. -
winetriсks dotnet471
. Процесс довольно длительный, друг за другом будет установлено несколько версийdotnet
. Ошибки, в том числе об отсутствии Mono, можно игнорировать и смело жать Далее, Ок и т.д. - Скачиваем PascalABC.NET StandardPack.
-
wine ~/PascalABCNETSetup.exe
(выбираем путь до файла установки) → Снимаем галочку с Microsoft .NET Frameword (мы его уже установили) → Выбираем куда устанавливать (лучше всего прямо на C:/, чтобы в пути не было пробелов) → После установки жмем Закрыть. -
wine ~/.wine/drive_c/PascalABC.NET/PascalABCNET.exe
→ Сервис → Настройки → Снимаем галочку сВыходные файлы генерировать в папку
иУдалять EXE файл после выполнения
. Иначе, после компиляции кода с ошибкой не получится скомпилировать его вновь после исправления, будет ошибка о том, что файл .exe уже используется другим процессом, хотя после перезапуска и отмены настроек всё стало работать нормально.
А есть ли какие-то планы для полноценной работы в линукс нативно без wine?
Что компилятор запускается через mono, я читал, но ведь компилятор не адаптирован под линукс, и половина всего не работает, нужно переписывать графические примитивы например на Gtk# вместо WPF или что-то подобное делать. И даже с консолью и кодировкой файлов исходников есть вопросы. Например, при выводе в консоль в линуксе через writeln, программа не должна в конце выплёвывать лишних \r, должно быть только \n.
Да и зависимость от mono — это тоже не особо хорошо. Хотя от неё вы, к сожалению, вряд ли сможете избавиться.
Планы есть. Но что вы имеете в виду? На сайте например описан рабочий алгоритм встраивания консольного компилятора в Geany. И в VS Code есть плагин PascalABC.NET - абсолютно рабочий. Устанавливай под Linux и программируй.
Есть планы переписать оболочку во что то кроссплатформенное.
Пока нет сильной нужды в этом - подавляющее большинство компьютеров дома - под Windows. И существенно меньшая часть - под IOS.
Что касается меня, то я преследовал лишь одну цель - как запустить PascalABC.NET на Linux для школьника. Получается, на данный момент, я нашел только следующие варианты:
-
Virtualbox + Windows + PascalABC.NET (ресурсоемко, хотя все и работает)
-
VS Code + mono + PascalABC.NET (все просто и казалось бы работает, но нету основных возможностей для школьной программы: робот и прочие графические модули)
-
wine + PascalABC.NET (требует меньше ресурсов, чем 1 и больше возможносте, чем в 2, есть пару нерабочих моментов, на которые можно закрыть глаза)
Мой выбор остановился на 3, хотя если бы в пунтке 2 были решены вопросы по использованию материалов для обучения в школе, я бы выбрал 2.
Спасибо вам за эксперимент! Когда я пробовал эту связку лет восемь назад, Вайн слабо поддерживал дот-нет у себя внутри. Здорово, что времена поменялись!
У меня один вопрос: а зачем устанавливать Паскаль совмещённый с ДотНет (PascalABCNETWithDotNet40Setup.exe) если вы уже установили ДотНет с помощью вайнтрикс? Может быть, логичней было бы использовать инсталлятор без ДотНет?
@Ulysses Насколько, я помню, пробовал разные варианты и мог запутаться, что лучше и что хуже. По логике, конечно кто-то один должен установить необходимый дотнет, тем более, я не силен в них, но как я понял, для установки PascalABCNet уже нужен какой-то дотнет (4.0), а он уже в свою очередь доставляет следующую версию (4.7) необходимую для работы. Хотя, я могу ошибаться…
Хм, интересно, спасибо большое за ответ. Если найду минутку, попробую на своих машинах с Убунту и НиксОС.
Добрался, получилось воспроизвести на NixOS (это такой линукс), заработало. Пошаговое руководство написано очень круто, его стоило бы сохранить где-то на вики, наверное.
Вот мои замечания по этому процессу и результату.
-
Установка дотнета (шаг 3) во время установки очередной версии (всего оно их штук пять поставило, причём время от времени надо нажимать на кнопки инсталятов дотнета — морока) вошло в дедлок и исправно писало об этом в терминале: что так де и так, жду критическую секцию, но ничего не происходит, подожду ещё 60 секунд… и так бесконечно. После убийства и перезапуска началось примерно с того же места и успешно завершилось.
-
Желательно указать версии wine с которыми пробовалось. Первая попавшаяся мне версия 6.0.6 оказалась несовместимой с каким-то из дотнетов, который он собирася ставить. Хорошо, что в репозитории оказалась и “staging” (экспериментальная) версия 7.0-rc5 – с ней-то и заработало. Ещё пробовал wine64 — 64-разрядную версию. Под ней не захотел дотнет ставиться.
-
У меня не получилось найти графического приложения, которое бы работало. Пробовал недавно опубликованный Админом ray-tracer, ещё что-то из примеров с формами и с Graph3d (отдельно) — без толку. Текущая ценность этого способа установки, таким образом, какмне кажется, это только Робот и Чёртёжник. Так ли это у всех?
-
Редактор работает не в идеальной форме: дрожжит курсор, исчезают открытые меню в панели меню, если долго выбирать нужный пункт, шрифты грустные (как обычно в Вайне). В режиме автодополнения кода если зайти в круглые скобки вызова функции и дождаться выпадающей подсказки по аргументам, всё замирает (нужно отключить режим автодополнения, чтобы всё вернулось).
-
Кириллица во многих местах работает, но в некоторых нет.
В общем, если нужен Робот и Чертёжник, то да. По графике – интересно если что-то всё же работает. А так, VS Code плагин мне больше нравится, и Робот с Чертёжником туда было бы не так уж и трудно пернести, наверное. Впрочем переписать всё на что-то кросс-платформенное наверное лучшее приложение ресурсов.
А брать версию для Windows XP где дотнет уже встроен или ставить mono (вроде вайн его умеет подхватывать) не вариант?
Всё же ставить много версий дотнета как-то глупо.
Я думаю, что графические модули переписываются под что то кроссплатформенное. У меня после удаления из GraphABC нескольких вызовов WPF он кстати отлично заработал.
Насчет версий - версия NET 4.0 хотя и старая, но вполне рабочая - и наверняка её mono хорошо эмулирует. Так что можно ставить версию для Windows XP. В версии для NET 4.7 самое основное - это возможность работать с HighDPI.
То есть, надо специально заняться адаптацией под Линукс - были бы свободные руки и осознанная необходимость. В школах России стали активно выгребать Паскаль в пользу Python и C++ - по существу запрет на остальные языки. Так что вкладывать существенные силы в разработку не хочется.
А для себя мы всё это конечно подстроим и перепишем.
Не вижу никакой проблемы в том, что ставится несколько версий дотнета. Значительно большие проблемы описаны в последующих пунктах. Всё остальное, что вы пишите, это сырые идеи. Сверху дали пошаговое рабочее руководство – это было полезно. Если вы сможете сделать подобное и проверить, будет здорово.
Я бы не был настолько оптимистичен. Насколько я помню, ряд вещей не поддерживался годами иногда принципиально иногда просто потому что это очень сложно сделать. И тут уже не важно насколько старая версия .НЕТ. И ещё раз повторю, что установить НЕТ 4.7 не проблема на самом деле. Проблема в том, что всё равно что-то нереализовано, плюс редактор не вполне стабилен (скорее всего, из-за Вайна).
Я не оптимистичен. У меня не получилось установить по указанному алгоритму.
Общая проблема - wine слабо поддерживает wpf. Вообще удивительно, что она поддерживает. А в оболочке редактор и куча компонент - это все wpf
Моя попытка на arch linux:
- Добавил репу multilib в /etc/pacman.conf
- Установил пакеты “wine” и “winetricks”
- winetriсks dotnet48
- Скачал http://pascalabc.net/downloads/PascalABCNETSetup.exe
- wine PascalABCNETSetup.exe
- wine PascalABCNET.exe
GraphABC
и GraphWPF
запускаются без проблем.
Но шрифт по-умолчанию был не моноширный, поэтому поставил ttf-ms-fonts.
Ещё окна подсказок (при наведении мышки, открытии скобок и т.п.) забирают фокус у редактора - то есть не дают писать код пока открыты. Но при этом и сами подсказки не работают, то есть стрелки вниз и вверх не переключают между перегрузками функций и т.п.
Попробовал external
подпрограммы, но получаю BadImageFormatException
что бы не делал. Тестировал с:
uses System;
uses System.Runtime.InteropServices;
{$platformtarget x64}
type
punch_gc_callback = procedure(ptr: IntPtr);
test = static class
//[DllImportAttribute('my_lib')]
static function copy_arr(a: array of integer; punch_gc: punch_gc_callback): IntPtr;
external 'my_lib.so';
end;
begin
test.copy_arr(|1,2,3,4,5|, ptr->
begin
ptr.ToString('X16').Println;
end);
end.
Библиотеку my_lib.so (16.5 КБ) сделал из файла my_lib.c
:
#include <stdlib.h>
#include <string.h>
//__declspec(dllexport)
char * copy_arr(int* a, void (*punch_gc)(void*))
{
char* res = malloc(20); // Выделяем 20 байт неуправляемой памяти
punch_gc(a); // Вызываем ту подпрограмму, чей адрес сюда передали
memcpy(res, a, 20); // Копируем 20 байт из "a" в "res"
return res; // Плохо что неуправляемая память не освобождается, но в этом тесте не важно
}
Командой:
gcc -Wall -g -shared -m64 -o my_lib.so -fPIC my_lib.c
Дальше попробую переключится назад на винду и декомпилить .exe паскаля и рабочий .exe JBRider-а, подключающий ту же библиотеку:
using System.Runtime.InteropServices;
class Program
{
delegate void punch_gc_proc(IntPtr ptr);
[DllImport ("my_lib")]
private static extern IntPtr copy_arr(int[] arr, punch_gc_proc proc);
static void Main()
{
var a = new int[5] {1, 2, 3, 4, 5};
copy_arr(a, ptr =>
{
Console.WriteLine("0x"+ptr.ToString("X16"));
});
}
}
P.S. А, возможно дело в wine, потому что из под wine у меня .dll
библиотека подключается без проблем, а .so
не хочет.
P.P.S. Ну да, если компилить из под wine - получается .exe, зависимый от wine и загружающий только .dll библиотеки. А если компилить консольным компилятором из под mono - .so библиотеки загружаются, но зато не работает IDE паскаля.