Помощь новичкам

Подскажите, какие есть способы выполнять какую то процедуру в потоке формы?

Ну, помнится мне, весь GraphABC пронизан блокировками для выполнения в потоке формы А в GraphWPF немного по-другому но то же для WPF приложений

Можно как то получить промежуточный код на C++ который генерирует паскаль во время компиляции?

Почитайте еще раз про CIL и байт-код, этот паскаль (как и любые другие языки на платформе .NET) нигде и никогда НЕ генерирует код на С++ или С#, а выдает сразу бинарный байт-код CIL, собираемый в “сборки” (.net assemblies) в виде exe или dll файлов.

Исходный файл (.pas) --> компилятор (pabcnetc.exe) --> байт-код CIL внутри PE-файла (exe/dll) --> JIT-компилятор виртуальной среды исполнения CLR (.Net/Mono) --> машинный код (x86/x86_64).

В принципе, можно дизассемблировать любую пользовательскую сборку (exe/dll), созданную на любом ЯП в среде .net, с помощью стандартной утилиты ILDasm.exe (устанавливается вместе с Visual Studio или .NET SDK) – на выходе получится простыня для IL-ассемблера, но в таком “сыром” виде это мало кому может быть полезно на практике. Зато совсем недавно в комментариях на github’е упоминалось про новую экспериментальную фичу отладчика для интерактивного отображения то ли бинарного, то ли даже мнемонического IL-кода прямо в среде PABC, но официально пока тишина…

Ну что тишина, окно дизассемблирования давно сделано.

Ах вот как… Это много чего объясняет… Но мне дисасемблинг в .exe в .pas не нужен, мне скорее всего скоро понадобится основная фича робокода. И она не работало правильно. Там ведь как то .dll превращали в исходники для C++ чтобы увидеть что не так. Так как это делается?

Опять 25, при чем здесь С++??? С# и C++ это совсем разные ЯП, между ними вообще ничего общего, кроме немного похожего синтаксиса!

Существует, конечно, в природе очень специфический гибрид под названием C++/CLI (первая, менее удачная попытка их скрещивания называлась Managed C++), но это просто набор костылей для облегчения переноса идеологически “устаревшего” классического с++ (то, что называется legacy) на рельсы .Net или же для более удобного склеивания в системе управляемого и неуправляемого кода (когда без этого нельзя обойтись). В частности, все низкоуровневые компоненты в MS .NET созданы именно таким образом. Для создания же новых приложений диалект C++/CLI не рекомендуется, и вообще, редко кем еще используется, кроме самого MS.

Что касается “реверса” любых .net сборок (exe/dll, c байт-кодом CIL) в “исходный” C#, то да, можно попробовать бесплатный декомпилятор от JetBrains (dotPeek) – он, кажется, пока такой первый и единственный в своем роде. Только не отключайте генерацию отладочной информации в Паскале.

Крик души… Моя жена учится в университете на химика. У них есть нечто напоминающее информатику. Основная задача которой научить графически решать какие-то уравнения. Т.е. легкая графика + легкая математика. Их учитель использует ABCPascal. Учитывая, что других начинают учить с TurboPascal, я думал ей повезло… Помог ей сделать одно задание, но когда препод посмотрел на этот код, сказал что У НЕГО он работать не будет… Пытаясь разобраться почему, я решил подсмотреть версию ABC которую он использует… И тут самое интересное. 2007 год!!! Карл!!! Ну как можно быть таким архаичным преподавателем?..

1 лайк

http://pascalabc.net/chto-novogo

листаем вниз. В самый низ… действительно, была такая!

Только у нас её уже нет. И где достать - не знаем :slight_smile: Может, посодействуете - для музея :smiling_imp:

1 лайк

WadymMC имел в виду не .Net, а просто PascalABC от 17.4.2007, который был последним и на просторах инета его ещё можно найти.

Чаще всего на сайтах типа „школ программирования“…

А ещё у меня в доках валяется pdf:

„А.С.Цветков

Язык программирования PASCAL

Система программирования ABC Pascal“

Брошурка посвящена именно тому PascalABC, хотя аффтар назвал её „ABC Pascal“.

Но самое важное, что выпущена она в 2013 году!

А мы всё удивляемся, от куда у подрастающего поколения такое отвращение к получению новых знаний…

Потому, что учат их старые, застрявшие в прошлом учителя и преподаватели!

Как это может быть - просто PascalABC без .NET? Такого нет. Покажите мне его официальный сайт! А на просторах интернета много всякой гадости гуляет :slight_smile:

ScreenHunter_05 2018-02-07

А, да - была такая - для школьников. Но её уже давно нету, сайта нету, поддержки нету.

Тем не менее, используют именно её…

И именно о ней говорил WadymM!

Здравствуйте! Возник такой вопрос: При попытке запуска вот этого кода:

begin
var a: ^Byte;
a:=^Void(****);
end.

вылезает ошибка “Void не допустим”, но если сделать так:

Type Pointer=^Void;
Begin
var a: ^Byte;
a:=Pointer(****);
End.

то ошибки нет. Это глюк, или действительно моя ошибка?

Ну, это маньяки какие-то

Program1.pas(1) : Неизвестное имя ‘Void’

Пропишите uses system; в начале программы, или замените Void на System.Void. Не сложно ведь догадаться если хотеть…

Ну, можно в начале подразумевать строчку const True=False; и не писать её. Поэтому когда Вы задаёте вопрос, стремитесь формулировать его полно если хотите быть понятыми без условий.

По существу. Приведение типов осуществляется только в формате ИмяТипа(выражение), а не СинонимТипа(выражение)

Нужно будет попробовать это утверждение в С++ ))

Насчет указателей почитал справку ABCPascal… Немного удивился…
У вас допустимо:
Обратное преобразование также может быть выполнено неявно:

var
p: pointer;
pr: ^real;
pr := p;
pr^ := 3.14;

В С++ такое не пройдет с типом void. Потому что тогда существует возможность доступа к переменной по указателям разных типов.

var
p: pointer;
pr: ^real;
r: real;
i: integer;
pch: ^char;
pi: ^integer;


begin
r := 17.77;
i := 10;

pr := @r;
p := @r;
pi := p;
pch := p;

print(pr^); // 17.77
print(pi^); // ЕРУНДА
print(pch^); // ЕРУНДА
end.

Это самый банальный пример… Дальше усложнять не стал. Т.к. справка в этой области бедна. Т.е. строгая типизация языка летит в тартарарам.