Page 1 of 2

MPC early beta

Posted: Tue Jul 05, 2005 1:24 pm
by mike.dld
Menuet Pascal Compiler - как и обещал, лежит на моём сайте. И как вы обещали - никаких претензий :) Говорить можно только хорошее :P

Posted: Tue Jul 05, 2005 3:22 pm
by EXIS
Только хорошее? Ну ладно: Молодец! Так держать. Я знал что ты сможешь. =)
А если серьезно. Очень нужная штука, ща буду смотреть.

Posted: Wed Jul 06, 2005 9:55 pm
by Wildwest
Молодец! А список того, что он может, будет включен в следующую версию (типа Menuet Pascal поддерживает такие-то типы переменных, такие-то операции...)?

Posted: Sat Jul 09, 2005 1:28 pm
by mike.dld
Wildwest
Не думаю, что будут какие-то принципиальные расхождения со стандартом, так что описывать нужно будет очень мало.

Posted: Sat Jul 09, 2005 2:11 pm
by Guest
А GUI там можно будет писать?

Posted: Sat Jul 09, 2005 2:14 pm
by mike.dld
А что имеется в виду под "писать GUI"? Нельзя ли задавать вопросы конкретнее.

Posted: Sat Jul 09, 2005 8:25 pm
by Sniper17
зачем писать собственный компилятор, когда можно портировать FPC или не получится?

Posted: Sat Jul 09, 2005 8:28 pm
by Sniper17
только прошу понять меня правильно!
Я нисколько не умаляю работу mike.dld даже рад что наконец-то я могу сделать что-то для MEOS...

Posted: Sat Jul 09, 2005 11:14 pm
by Wildwest
Sniper17
поговори с этим товарищем
http://menuet.2.forumer.com/index.php?showtopic=704

Posted: Sun Jul 10, 2005 9:56 am
by Sash
Очень хорошая вещь этот MPC, но пока, конечно же сыроватый. Как оказалось на нём можно создавать более или менее сложные проги. Хотя иногда бывают проблемы. Хочу высказать свои наблюдения по его исользованию. Возможно это кому-то поможет в разработке и некоторые из этих проблем будут исправлены в следующих версиях. Возможно что-то из этого - мои глюки, я не гарантирую что это абсолютная истина.
1. Делать var параметры в процедурах бесполезно: компилятор не ругается на них, он просто игнорирует наличие слова var.
2. Есть подозрение, что не поддерживаются слишком длинные имена функций
3. Похоже, что нельзя определить более 8-12(точное число пока не известно) глобальных переменных, иначе у компилятора происходит переполнение стека и он аварийно завершает свою работу
4. Начальное значение for может быть только 0, иначе вообще ничего не происходит (этот вопрос точно не изучен)
5. Если в ассемлерном коде используется локальная перменная или переменная Result, то она должна быть в верхнем регистре и перед ней должно быть “.__” (точка и два подчёркивания). Если это параметр, то он должен быть в верхнем регистре и перед ним должно стоять “__” (два подчёркивания)
6. Строковые константы компилятор как бы распознаёт, но потом подставляет на их место пустую строку
7. В конструкции if then else оператор идущий после then должен отделятся от else точкой с запятой, хотя в других компиляторах паскаля точка с запятой не нужна и не допустима в этом месте
8. В одном месте FASM прицепился к тому, что он не знает переменной .__RESULT, это было в функции
ReadMsg(StrAddr: Integer): Boolean;
Оказывается, если бы функция называлась по-другому то, всё было бы нормально. Видимо слово ReadMsg зарезервировано
9. Если ошибка находится в ассемблерном коде, то компилятор об этом ничего не скажет, а FASM просто тихо не создаст файл. Понять, есть ли ошибки можно только удалением файла .bin и перекомпиляцией. Если файл создался, то ошибок не было.
10. Дельфевские комментарии “//” не поддерживаются. В ассемблерных вставках нельзя использовать ассемблерные комментарии “;” и паскалевские “{…}” отдельно, но можно в комбинации “;{…}”

Posted: Sun Jul 10, 2005 5:09 pm
by mike.dld
Sash
Спасибо тебе за исследование, и всем за интерес.

1. Если ты имеешь в виду использование var-параметров в ассемблерных вставках, то при передаче параметра как var фактически передаётся адрес переменной, т.е. для присвоения ей какого-либо значения нужно сделать, например, следующее:

Code: Select all

mov eax,[var_param]
mov [eax],<присваиваемое значение>
. Если имелось в виду не это - уточни.
2. Длина идентификаторов (имён переменных, констант, подпрограмм и т.д.) ограничена 30-ю символами. Планируется увеличение предела или отказ от ограничения вообще.
3. 4. Посмотрю на досуге.
5. Совершенно верно, пока именно так. Текст между asm ... end копируется в выходной файл без изменений, и есть приколы во внутреннем представлении имён идентификаторов. Исправление ситуации планируется.
6. Если имеются в виду непосредственные операдны - проблем замечено не было. Все остальные случаи могут быть связаны с отсутствием типизации (пока что).
7. В курсе этого, не очень мешает при написании программ, но исправлю как можно быстрее.
8. Быть такого не может :)) Хотя не исключено.
9. Думаю сделать статическую линковку FASM.DLL в проекту, тогда ошибки, возвращённые FASM'ом, можно будет обработать в компиляторе.
10. “//” - поддерживаются. В ассемблерных вставках “;” должно работать (сам не проверял, но спец. кода по этому поводу не присутствует).

Далее, приведу выдержки из моего разговора с IPR'ом, чтобы было понятнее, какие ограничения/проблемы сейчас есть:
[05.07.2005 12:42:52] >> вложенные процедуры использовать можно, но обращаться к переменным родительских процедур нельзя (не относится к глобальным переменным)
[05.07.2005 12:43:32] >> код лучше писать ПРАВИЛЬНЫЙ, иначе в некоторых случаях может сгенериться неверный асм-листинг
[05.07.2005 12:44:05] >> так как нет типизации, нужно, например, вместо
while true do
писать
while 1 = 1 do
[05.07.2005 12:44:58] >> при объявлении констант или инициализации переменных инициализирующее выражение не должно быть сложным
[05.07.2005 12:45:05] >> т.е. писать 4 вместо 2*2
[05.07.2005 12:46:08] >> инициализация переменных - как по одной, так и группами (всем присваивается инициализирующее значение), например:
var
a: integer = 5; {a = 5 }
b,c,d: integer = 10; { b = c = d = 10 }
[05.07.2005 12:46:24] >> типизированных констант нету (ясно почему :) )
[05.07.2005 12:47:26] >> да, и вместо модулей, используй директиву {$I "имя файла"} (имя в кавычках)

Posted: Mon Jul 11, 2005 12:52 am
by Sash
Да, про var параметры я бы и сам мог догадаться

Posted: Mon Jul 11, 2005 1:00 am
by ipr
Да, мне довольно понравилось. И осуществилась моя мечта нормальный компилер, нормального
языка для меоси. СПАСИБО MIKE.DLD!!!
З.Ы. Удачи в дальнейшем!

Posted: Tue Nov 29, 2005 9:02 am
by DE_Leet
program sum;
var a,b,c:real;
begin
repeat
readln(a,b);c:=a+b;
Writeln(c);readln
until c=100;
end.
А что не компилирует? :D

Posted: Tue Nov 29, 2005 11:05 am
by mike.dld
А в Менуете есть нативная поддержка консоли?