MPC early beta

...
  • Только хорошее? Ну ладно: Молодец! Так держать. Я знал что ты сможешь. =)
    А если серьезно. Очень нужная штука, ща буду смотреть.
  • Молодец! А список того, что он может, будет включен в следующую версию (типа Menuet Pascal поддерживает такие-то типы переменных, такие-то операции...)?
  • Wildwest
    Не думаю, что будут какие-то принципиальные расхождения со стандартом, так что описывать нужно будет очень мало.
  • А GUI там можно будет писать?
  • А что имеется в виду под "писать GUI"? Нельзя ли задавать вопросы конкретнее.
  • зачем писать собственный компилятор, когда можно портировать FPC или не получится?
  • только прошу понять меня правильно!
    Я нисколько не умаляю работу mike.dld даже рад что наконец-то я могу сделать что-то для MEOS...
  • Sniper17
    поговори с этим товарищем
    http://menuet.2.forumer.com/index.php?showtopic=704
  • Очень хорошая вещь этот 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. Дельфевские комментарии “//” не поддерживаются. В ассемблерных вставках нельзя использовать ассемблерные комментарии “;” и паскалевские “{…}” отдельно, но можно в комбинации “;{…}”
  • 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 "имя файла"} (имя в кавычках)
    in code we trust
  • Да, про var параметры я бы и сам мог догадаться
  • Да, мне довольно понравилось. И осуществилась моя мечта нормальный компилер, нормального
    языка для меоси. СПАСИБО MIKE.DLD!!!
    З.Ы. Удачи в дальнейшем!
  • program sum;
    var a,b,c:real;
    begin
    repeat
    readln(a,b);c:=a+b;
    Writeln(c);readln
    until c=100;
    end.
    А что не компилирует? :D
  • А в Менуете есть нативная поддержка консоли?
  • Who is online

    Users browsing this forum: No registered users and 2 guests