Доброго времени суток, я так понимаю, здесь межконтинентальный бугурт на тему C# и Pascal. Так вот, мой проект vkapi pascalabc wrapper полностью совместим с .net Вот - VKAPI PascalABC.NET Wrapper
Нормальное описание тут.
Вот превьюшка что может SAC:
KeyD 160 //нажать левый шифт
KeyP Ord("S") //нажать `S` на клавиатуре. Вместе с шифтом получиться заглавная версия буквы S
KeyU 160 //отжать левый шифт
Sleep 1000/3 //ждём 1/3 сек
Jump "#" //прыгаем в начало этого файла (на пустую метку, которая всегда в начале файла)
(Это надо засунуть в файл какое то имя.sac и запустить, он будет 3 раза в сек. писать S, если вы откроете какой то текстовый редактор)
Остальное реально разобраться на примерах, README.md на гитхабе и справке (Help.exe)
Эх… еще бы знать, куда это приспособить…
Это более юзер-френдли версия, я старой (ужасно кривой) находил применяния, раз в несколько месяцев)) Для чего то простенького… А раз эта более юзабельная - знач и наверное жешь и применений больше)
Ну и написали бы, для чего можно. Я вот сколько не думал, так и не смог придумать.
А вот и применение
:
Вряд ли это может быть сильно интересно вам, но всё же, хоть где то полезно! 
Я наконец добрался до работы с сетью… И для начала решил сделать чат. Уже протестировал, работает по сети. Как запустить написано на гитхабе, но вот ещё перевод на русский:
- Файлы:
1.1. Компьютер-сервер должен иметь файл Server.exe
1.2. Компьютер-юзер (клиент) должен иметь файл Client.exe
(Если хотите и запустить сервер и подключится к нему - вам нужны оба .exe файла)
1.3. И серверу и клиенту нужен файл server adress.txt, содержащий ip и порт компьютера - сервера.
Его содержимое должно выглядит как что то типа 11.22.33.44:11000 (перед : стоит ip, а после - порт)
Все компьютеры которые должны соединится - должны иметь одинаковый ip и порт.
- Получение ip и порта:
Если вы не умеете настраивать переадресацию модема (portforward) - используйте что типа hamachi.
В таком случае скопируйте ip из hamachi (или из другой программы которую вы используете).
Иначе просто скопируйте ваш основной IPv4 адрес.
Далее выберите любой порт и отправьте готовый файл server adress.txt всем кто должен подключится.
- Запуск:
Сначала всегда запускайте сервер.
Затем запустите свой клиент и скажите всем остальным тоже запустить их клиенты.
Возвращаясь к вопросу создания компилятора паскаля на паскале. Нарыл вот интересный компилятор - http://mads.atari8.info/ . Весь исходный код на паскале. Вполне возможно, что после доработок откомпилируется и на PascalABC.NET
А не легче ли перевести исходники компилятора паскаля на паскаль?)) С C# на паскаль всё очень просто переводится. (Если не считать сколько там миллионов строк кода в этом компиляторе)
То что вы кинули, кстати, написано на 1 из старых паскалей (или, по крайней мере, в старом стиле). Компилироваться оно наверняка будет, но… Мне лично было бы легче с 0 переписать, чем с таким кодом работать.
И кроме того, компилятор на паскале найти не сложно. Вот, к примеру, мой. Но если синтаксис другой - то “пару моментов подредактировать” чтоб получился компилятор PascalABC.Net - не выйдет. Всё равно с 0 писать.
А чтоб научится - надо всегда сначала самому написать хоть что то а потом уже смотреть как то же самое реализовали другие. Иначе будет куча пробелов в знаниях.
Вопрос - зачем
Вот любите Вы неприличные вопросы задавать! 
Да, люблю
Тогда уж, скорее, риторические: Вы ведь и сами догадываетесь, зачем. )))
Мне тут понадобилось сделать кольцевой буфер, вроде задача тривиальная , а гугл ответ не сразу выдаёт(ну кроме учебных алгоритмов, лучше уж велосипед самому писать, чем такой в продакш) . Мой вариант во вложении. Что смутило при реализации.
- Есть ли в PascalABC.Net что-то типа move? А то для больших массивов поэлементное копирование такое себе удовольствие. Ну мне-то сойдёт для моих целей.
- А если нужно результат не в динамический , а в статический массив поместить? Что-то в отличие от Delphi с указателями на массивы проблемы определённые.
KBuf.rar (1,2 КБ)
System.Buffer. Но это работает только для стандартных типов.
Ещё вариант - создать динамическую функцию через System.Reflection.Emit, в IL вроде есть что то для такого копирования.
Не используйте статические массивы. Они хранят внутри динамический массив, но делают кучу лишних телодвижений. Да и JIT-у проще родные массивы оптимизировать.
Указатели на элемент массива нельзя получать через @a[...]. Эта конструкция разрешена для совместимости. Но она вызывает утечки памяти, а если элементы массива это записи с полем типа класса (как string) - ещё и небезопасно, сборщик мусора может в любой момент переместить массив и сломать указатель.
Используйте GCHandle чтоб блокировать массив напрямую и потом не забывайте разблокировать. Но если использовать это для копирования памяти между 2 массивами - будет всё равно медленно.
Это неверное утверждение. Статические массивы столь же эффективны по времени, что и динамические. Вы давно об этом говорите. Причём везде. Это неверно. Если надо использовать статические массивы, их можно использовать.
Конечно, лишаешься ряда преимуществ с огромным количеством методов. В этом - основная проблема статических массивов.
Да не сильно, они же тоже IEnumerable, значит вполне можно использовать методы последовательностей
var
a: array[1..10] of integer := (9, 5, 3, 2, 7, 5, 4, 8, 9, 0);
begin
a.PrintLines
end.
Только Intelisense не работает
System.Array.Copy
Да. В NET нельзя вот так просто напрямую обращаться к памяти, как в Delphi. Не используйте указатели. В статический массив у нас кроме как поэлементно ничего не скопируешь. Статические массивы сделаны для совместимости.
Институт математики, механики и компьютерных наук ЮФУ, 2005–2021