Page 2 of 9

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

Posted: Mon Oct 28, 2013 6:40 pm
by akron1
Leency wrote: И всё же немного стрёмно, что исходник может вот так затерется если не имеет расширения.
Да, наверное вы правы. Надо сделать чтобы компилятор обязательно требовал расширение "ob07" для главного модуля.
Leency wrote: >> Можете кто-то написать на форум разработчика, чтобы добавил поддержку относительных путей для компилятора?
Что насчёт этого?
А как это должно выглядеть для пользователя? Компилятор должен брать полный путь из файла настроек, а в командной строке указывается относительный путь? Если можно объясните подробнее.

Еще одним ограничением компилятора в KolibriOS является невозможность освобождения динамической памяти и неэкономное ее выделение. Это связано с тем, что системные функции KolibriOS, в отличие от Windows, могут выделять/освобождать память только целыми страницами. Может есть какая-нибудь библиотека с функциями типа malloc/free чтобы не писать свой менеджер памяти?

P. S.
Я не специалист по KolibriOS, компиляторам, x86, и программированию вообще. Поэтому, извините, если я задаю глупые вопросы.

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

Posted: Mon Oct 28, 2013 9:39 pm
by Mario_r4
akron1 wrote:Еще одним ограничением компилятора в KolibriOS является невозможность освобождения динамической памяти
WAT? O_o

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

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

Posted: Mon Oct 28, 2013 9:42 pm
by Leency
Любая программа в Колибри начинается примерно вот так:

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;
}

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

Posted: Mon Oct 28, 2013 9:46 pm
by Leency
>> Еще одним ограничением компилятора в KolibriOS является невозможность освобождения динамической памяти и неэкономное ее выделение. Это связано с тем, что системные функции KolibriOS, в отличие от Windows, могут выделять/освобождать память только целыми страницами. Может есть какая-нибудь библиотека с функциями типа malloc/free чтобы не писать свой менеджер памяти?

Колибри выделяет память страницами по 4 Кб. Есть функции выделения, очистки и изменения размера кучи - для всего этого 68 функция, как писал Марио.
Если же это не подходит, например, нужно часто выделять блоки маленького размера - по 300 байт, например, то нужно писать свой менеджер памяти.

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

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

Leency, спасибо, посмотрю что можно сделать с относительными путями.

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

Posted: Tue Oct 29, 2013 2:12 am
by Mario_r4
akron1 wrote:Подфункции 68.20, 68.12 и 68.13 выделяют и освобождают память целыми страницами. При выделении таким образом памяти для множества мелких записей (например связанный список) будет большой перерасход памяти. Например для сборки самого компилятора из-под Колибри потребуется более 200 Мб.
Ну, так как уже сказал Кирилл - менеджер памяти приложения. Ядро и не обязано предоставлять таких сервисов.

А меня лично удивило само построение фразы, которое начиналось с "является невозможность освобождения динамической памяти", что является не верным утверждением. Выделение и освобождение есть, другой вопрос что для целей сабжевого компилятора они плохо подходят.

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

Posted: Tue Oct 29, 2013 2:37 am
by yogev_ezra
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/"Колибри", чтобы системные функции импортировать без прокладок.

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

Posted: Tue Oct 29, 2013 9:58 pm
by akron1
yogev_ezra wrote:Моё предложение заключается в том, чтобы, если разработка Oberon для KolibriOS будет продолжена, исходники выкладывались в нашем репозитории SVN (тогда любой участник нашего проекта сможет также участвовать в разработке Oberon, если захочет). В противном случае, изменения могут потеряться, могут появляться форки, неизвестно где взять самую последнюю версию, а это всё лишняя трата времени и сил.
Я думаю, это лучше сделать со следующего релиза, когда поддержка KolibriOS станет полноценной и будет сделан ряд усовершенствований. О новом релизе я сообщу.

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

Posted: Thu Dec 19, 2013 5:35 pm
by akron1
Сделал поддержку генерации dll(*.obj), простейшие библиотеки, биндинг к console.obj, появилась возможность переиспользования динамической памяти (DISPOSE), поддержка относительных путей.
https://sites.google.com/site/oberon07compiler/versii

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

Posted: Wed Dec 25, 2013 3:54 pm
by Leency
Спасибо, круто!

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

Posted: Sat Jan 04, 2014 12:49 am
by Leency
Скомпилируйте, пожалуйста, кто-то версию для Колибри.

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

Posted: Sat Jan 04, 2014 4:22 am
by akron1
Скомпилировал

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

Posted: Sat Jan 04, 2014 1:02 pm
by Leency
Спасибо. У языка есть логотип?

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

Posted: Sat Jan 04, 2014 9:07 pm
by akron1
логотипа нет

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

Posted: Sat Jan 04, 2014 9:59 pm
by Mario_r4
O7