Автор Тема: Компилятор Oberon-07/11 для x86 Windows  (Прочитано 77049 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #60 : Декабрь 27, 2012, 06:51:30 pm »
Цитировать
Я правильно понял, что это артефакт конкретного кодогенератора?
Не понял. В каком смысле артефакт?
В прямом исконном смысле слова. То есть если бы бекенд был другой (например был бы генератор js-кода), то этого поля могло бы и не быть.
Y = λf.(λx.f (x x)) (λx.f (x x))

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #61 : Декабрь 27, 2012, 07:11:26 pm »
Я знаком только с архитектурой x86, как в других -- не знаю.

Смещение переменной позволяет сгенерировать код обращения к глобальной переменной, когда ее адрес не известен (на этапе компиляции). Компилятор генерирует команды обращения к глобальным переменным, используя смещение вместо адреса и помечает эти команды. На финальном этапе компиляции адрес секции глобальных переменных становится известным и компилятор в помеченных командах заменяет смещение на сумму:
смещение + адрес_начала_секции_глобальны_ переменных

Смещения локальных переменных зависят от архитектуры и соглашения вызова

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #62 : Декабрь 27, 2012, 07:15:27 pm »
Я знаком только с архитектурой x86, как в других -- не знаю.

Смещение переменной позволяет сгенерировать код обращения к глобальной переменной, когда ее адрес не известен (на этапе компиляции). Компилятор генерирует команды обращения к глобальным переменным, используя смещение вместо адреса и помечает эти команды. На финальном этапе компиляции адрес секции глобальных переменных становится известным и компилятор в помеченных командах заменяет смещение на сумму:
смещение + адрес_начала_секции_глобальны_ переменных

Смещения локальных переменных зависят от архитектуры и соглашения вызова
Спасибо. Понятно.
Y = λf.(λx.f (x x)) (λx.f (x x))

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #63 : Декабрь 29, 2012, 07:30:43 pm »
Немного улучшенная версия.

1. Добавлена поддержка соглашения вызова cdecl
2. Добавлена процедура SYSTEM.TYPEID
3. Действие SYSTEM.ADR теперь распространяется на процедуры
4. Немного изменена кодогенерация
5. Повышена производительность подсветки синтаксиса
6. Появилась возможность настройки цветовой схемы подсветки (пока в упрощенном виде)
7. Обнаружена и исправлена ошибка в компиляторе:

   PROCEDURE MyProc(x: INTEGER y: INTEGER); (* пропущена ";" в списке формальных параметров *)

   Компилировалось как

   PROCEDURE MyProc(x: INTEGER; y: INTEGER);

   несмотря на синтаксическую ошибку

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #64 : Декабрь 30, 2012, 11:50:11 am »
Так может всё-таки перейдёте на гитхаб?

Так и проще размещать компилятор для общго пользования: нажал git push и всё (а не возиться с архиватором и размещением на форуме).
Не придётся вспоминать и готовить список изменений: они будут видны в комментариях к коммитам.

Если есть трудности с освоением гитхаба, то я могу помочь установить гит (я использую cygwin-овскую версию) и настроить ssh-ключи. Могу помочь и с базовыми командами гита, но мне кажется, что они в интернете неплохо описаны и без меня.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #65 : Декабрь 30, 2012, 12:18:41 pm »
Так может всё-таки перейдёте на гитхаб?
У гитхаба есть одна мелкая проблемка (по крайней мере в веб-интерфейсе) - оно не умеет cp1251 (да и вообще хочет Utf-8 похоже). А строковые литералы в этом компиляторе именно в этой кодировке. Поэтому в веб-морде вместо русского языка получаются крякозябры при просмотре исходников. Например так.
Y = λf.(λx.f (x x)) (λx.f (x x))

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #66 : Декабрь 30, 2012, 12:32:14 pm »
А IDE работает с кодировкой cp1251?? :-\
По идее, проблем с переходом на utf-8 быть не должно. Равно как и в компиляторе. Надо решить этот вопрос сначала раз и навсегда.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #67 : Декабрь 30, 2012, 12:41:09 pm »
А IDE работает с кодировкой cp1251?? :-\
Да
По идее, проблем с переходом на utf-8 быть не должно. Равно как и в компиляторе. Надо решить этот вопрос сначала раз и навсегда.
По идее да. Но это повлечет за собой изменение типа CHAR - он должен стать вместо 8ми битного 16ти, а лучше 32х битным. Что может повлечь за собой изменения/проблемы в чем-то системозависимом (всякое там ffi и проч).
Y = λf.(λx.f (x x)) (λx.f (x x))

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #68 : Декабрь 30, 2012, 12:49:13 pm »
А IDE работает с кодировкой cp1251?? :-\
Да
По идее, проблем с переходом на utf-8 быть не должно. Равно как и в компиляторе. Надо решить этот вопрос сначала раз и навсегда.
По идее да. Но это повлечет за собой изменение типа CHAR - он должен стать вместо 8ми битного 16ти, а лучше 32х битным. Что может повлечь за собой изменения/проблемы в чем-то системозависимом (всякое там ffi и проч).
Ну это только макет. Буду делать нормальный фронт-энд, тогда и перейду на юникод.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #69 : Декабрь 30, 2012, 03:16:07 pm »
Но это повлечет за собой изменение типа CHAR - он должен стать вместо 8ми битного 16ти, а лучше 32х битным.
Для чего?
Если не разрешать юникодные идентификаторы в языке, то ничего менять не надо и проблем не должно быть. Проблемы будут когда захочется манипулировать строками, которые содержат символы за пределами ASCII. Например длина строки уже не будет равняться LEN - 1. А в присваивании s := 'Ж' будет ARRAY OF CHAR вместо просто CHAR.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #70 : Декабрь 30, 2012, 03:41:33 pm »
Вы все переусложняете.
1. Перегнать исходники в utf8.
2. Фикснуть вызов Windows API (вывод на консоль и т.п.) - использовать юникодные версии функций (перекодировать utf8 -> utf16).
Все.

P.S. Да, нельзя будет использовать единичный CHAR как юникодный символ. Т.е., CONST s = "Ф"; не сможет быть использован вместо CHAR (например, в CASE), только как ARRAY OF CHAR.  Ну и фиг с ним.

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #71 : Декабрь 30, 2012, 05:25:29 pm »
У гитхаба есть одна мелкая проблемка (по крайней мере в веб-интерфейсе) - оно не умеет cp1251 (да и вообще хочет Utf-8 похоже).
разве это достаточная причина, чтобы им не пользоваться?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #72 : Декабрь 30, 2012, 05:47:00 pm »
У гитхаба есть одна мелкая проблемка (по крайней мере в веб-интерфейсе) - оно не умеет cp1251 (да и вообще хочет Utf-8 похоже).
разве это достаточная причина, чтобы им не пользоваться?
Ну, я то пользуюсь :-)

Вообще, проблема на самом деле решается проще - нужно просто заменить все русские сообщения в компиляторе на английские. Таким образом двух зайцев - и компилятор интернациональный получается, и на гитхабе все будет ок.
Y = λf.(λx.f (x x)) (λx.f (x x))

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #73 : Декабрь 31, 2012, 09:45:16 am »
Сообщения компилятора имеет смысл перегнать в файловые ресурсы.

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #74 : Декабрь 31, 2012, 09:48:46 am »
Сообщения компилятора имеет смысл перегнать в файловые ресурсы.