Подскажите, какие есть способы выполнять какую то процедуру в потоке формы?
Ну, помнится мне, весь 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 год!!! Карл!!! Ну как можно быть таким архаичным преподавателем?..
http://pascalabc.net/chto-novogo
листаем вниз. В самый низ… действительно, была такая!
Только у нас её уже нет. И где достать - не знаем Может, посодействуете - для музея
WadymMC имел в виду не .Net, а просто PascalABC от 17.4.2007, который был последним и на просторах инета его ещё можно найти.
Чаще всего на сайтах типа „школ программирования“…
А ещё у меня в доках валяется pdf:
„А.С.Цветков
Язык программирования PASCAL
Система программирования ABC Pascal“
Брошурка посвящена именно тому PascalABC, хотя аффтар назвал её „ABC Pascal“.
Но самое важное, что выпущена она в 2013 году!
А мы всё удивляемся, от куда у подрастающего поколения такое отвращение к получению новых знаний…
Потому, что учат их старые, застрявшие в прошлом учителя и преподаватели!
Как это может быть - просто PascalABC без .NET? Такого нет. Покажите мне его официальный сайт! А на просторах интернета много всякой гадости гуляет
А, да - была такая - для школьников. Но её уже давно нету, сайта нету, поддержки нету.
Тем не менее, используют именно её…
И именно о ней говорил 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.
Это самый банальный пример… Дальше усложнять не стал. Т.к. справка в этой области бедна. Т.е. строгая типизация языка летит в тартарарам.