Компилятор Oberon-07

High-level languages programming questions
  • akron1 wrote:Еще одним ограничением компилятора в KolibriOS является невозможность освобождения динамической памяти
    WAT? O_o

    Как это невозможно освободить? Есть подфункции 68 функции, которые позволяют как отдать ядру, так и предопределить размер выделенного блока с сохранением содержимого в неизменяемой части блока.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Любая программа в Колибри начинается примерно вот так:

    Code: Select all

    	use32
    	org 0x0
    	db 'MENUET01'	; 8 byte id
    	dd 0x01		; header version
    	dd START	; start of code
    	dd IM_END	; size of image
    	dd I_END	; memory for app
    	dd stack_area	; esp
    	dd I_Param	; boot parameters
    	dd path		; path
    Если вы писали поддержку Колибри, то по любому должны были видеть эти строки.
    Допустим мы запустили из коммандной строки Колибри (SHELL) Оберон следующей строй:
    Compiler /kolibrios/develop/Oberton-07/HW kos
    В этом случае программа Compiler будет запущена и в её парамтрах будут указатели на строки:
    I_Param = "/kolibrios/develop/Oberon-07/HW kos"
    path = "/kolibrios/develop/Oberon-07/Oberon"
    (путь к программе)
    Выделить из path путь к программе и приклеить к нему путь к исходнику (если тот является относительным) уже не составит труда.
    В моих программах есть такая функция:

    Code: Select all

    :dword GetAbsolutePathFromRelative(dword relative_path) 
    {
    	char absolute_path[4096];
    	if (ESBYTE[relative_path]=='/')
    	{
    		strcpy(#absolute_path, relative_path);
    	}
    	else
    	{
    		strcpy(#absolute_path, #program_path);
    		absolute_path[strrchr(#absolute_path, '/')] = '\0';
    		strcat(#absolute_path, relative_path);
    	}
    	return #absolute_path;
    }
    
    Из хаоса в космос
  • >> Еще одним ограничением компилятора в KolibriOS является невозможность освобождения динамической памяти и неэкономное ее выделение. Это связано с тем, что системные функции KolibriOS, в отличие от Windows, могут выделять/освобождать память только целыми страницами. Может есть какая-нибудь библиотека с функциями типа malloc/free чтобы не писать свой менеджер памяти?

    Колибри выделяет память страницами по 4 Кб. Есть функции выделения, очистки и изменения размера кучи - для всего этого 68 функция, как писал Марио.
    Если же это не подходит, например, нужно часто выделять блоки маленького размера - по 300 байт, например, то нужно писать свой менеджер памяти.
    Из хаоса в космос
  • Mario_r4 wrote: Как это невозможно освободить? Есть подфункции 68 функции, которые позволяют как отдать ядру, так и предопределить размер выделенного блока с сохранением содержимого в неизменяемой части блока.
    Подфункции 68.20, 68.12 и 68.13 выделяют и освобождают память целыми страницами. При выделении таким образом памяти для множества мелких записей (например связанный список) будет большой перерасход памяти. Например для сборки самого компилятора из-под Колибри потребуется более 200 Мб.
    Leency wrote: Если же это не подходит, например, нужно часто выделять блоки маленького размера - по 300 байт, например, то нужно писать свой менеджер памяти.
    Ну вот поэтому пока DISPOSE не работает, так как нужен менеджер памяти.

    Leency, спасибо, посмотрю что можно сделать с относительными путями.
  • akron1 wrote:Подфункции 68.20, 68.12 и 68.13 выделяют и освобождают память целыми страницами. При выделении таким образом памяти для множества мелких записей (например связанный список) будет большой перерасход памяти. Например для сборки самого компилятора из-под Колибри потребуется более 200 Мб.
    Ну, так как уже сказал Кирилл - менеджер памяти приложения. Ядро и не обязано предоставлять таких сервисов.

    А меня лично удивило само построение фразы, которое начиналось с "является невозможность освобождения динамической памяти", что является не верным утверждением. Выделение и освобождение есть, другой вопрос что для целей сабжевого компилятора они плохо подходят.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • akron1 wrote:Здравствуйте, уважаемые участники форума. Я - автор сабжа. Если у вас есть какие-либо вопросы или предложения - можете спрашивать.
    Добрый день и большое спасибо, что Вы зарегистрировались и написали на нашем форуме. Моё предложение заключается в том, чтобы, если разработка Oberon для KolibriOS будет продолжена, исходники выкладывались в нашем репозитории SVN (тогда любой участник нашего проекта сможет также участвовать в разработке Oberon, если захочет). В противном случае, изменения могут потеряться, могут появляться форки, неизвестно где взять самую последнюю версию, а это всё лишняя трата времени и сил.
    re0ne wrote:Да, на форуме http://oberspace.dyndns.org/, где был впервые представлен проект, человек с ником Freeman (а такой ник есть и здесь, подозреваю, что это тот же человек) спросил:
    А можно нескромный вопрос: поддержка ОС "Колибри" не планируется?
    Автор сначала ответил, что поддержка не планируется, но потом сделал.
    Теперь понятно. Просто я об этом форуме первый раз услышал сейчас. Freeman - наш, и насколько я знаю, любитель Delphi, имеющего с Oberon общего предка - Pascal, так что всё логично. Для истории - тема вот эта: http://oberspace.dyndns.org/index.php/topic,396.0.html
    На всякий случай, выдержка из той темы:
    akron1 wrote:Написал компилятор Oberon-07/11 для x86 Windows. Конечно, компилятор неоптимизирующий, создает безобразный (хотя и вполне рабочий) машинный код, кроме того, отсутствует сборщик мусора. Зато есть небольшая стандартная библиотека (консольный и файловый двоичный ввод-вывод, математические функции и некоторые другие). Также есть текстовый редактор с подсветкой синтаксиса, нумерацией строк и автокапсом (как в Astrobe), что практически снимает проблему прописных букв. К сожалению, производительность подсветки синтаксиса, особенно в сочетании с нумерацией строк оставляет желать лучшего, однако в большинстве случаев работать можно с комфортом. И еще: я не профессиональный программист, поэтому не претендую на разработку качественного продукта.
    Geniepro wrote:
    Freeman wrote:А можно нескромный вопрос: поддержка ОС "Колибри" не планируется?
    Так исходники же доступны -- можно просто так взять и допилить.
    Как я понимаю, надо просто выкинуть формирование exe-файла и записывать в бинарном виде.
    Или в Колибри есть какой-то свой формат исполнимых файлов? Вроде бы типа досовских com-файлов там?
    Freeman wrote:На самом деле большинство языков там на уровне "один студент кое-как адаптировал компилятор и скомпилировал одну программу", как я понимаю. На деле сами разработчики пишут на FASM, GCC (под который есть несколько вариантов Libc и прочего) и C-- (Си-минус-минус -- местная экзотика). Еще есть Lua и Python, но программ на них не припоминаю.

    Поддержка FPC делалась когда-то под одну конкретную версию, работа с другими версиями FPC не гарантировалась. Я попробовал в ней разобраться, но понял, что с наскока не получится.

    Под самой "Колибри" запускается только FASM. Если ориентироваться на него, то родной компилятор под "Колибри" должен запускаться под ней самой и уметь генерировать mcall -- штатное соглашение о вызовах Menuet/"Колибри", чтобы системные функции импортировать без прокладок.
  • yogev_ezra wrote:Моё предложение заключается в том, чтобы, если разработка Oberon для KolibriOS будет продолжена, исходники выкладывались в нашем репозитории SVN (тогда любой участник нашего проекта сможет также участвовать в разработке Oberon, если захочет). В противном случае, изменения могут потеряться, могут появляться форки, неизвестно где взять самую последнюю версию, а это всё лишняя трата времени и сил.
    Я думаю, это лучше сделать со следующего релиза, когда поддержка KolibriOS станет полноценной и будет сделан ряд усовершенствований. О новом релизе я сообщу.
  • Сделал поддержку генерации dll(*.obj), простейшие библиотеки, биндинг к console.obj, появилась возможность переиспользования динамической памяти (DISPOSE), поддержка относительных путей.
    https://sites.google.com/site/oberon07compiler/versii
  • Спасибо, круто!
    Из хаоса в космос
  • Скомпилируйте, пожалуйста, кто-то версию для Колибри.
    Из хаоса в космос
  • Скомпилировал
    Attachments
    Compiler.rar (34.27 KiB)
    Downloaded 355 times
  • Спасибо. У языка есть логотип?
    Из хаоса в космос
  • логотипа нет
  • O7
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Who is online

    Users browsing this forum: No registered users and 4 guests