Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Dec 07, 2019 9:28 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 112 posts ]  Go to page Previous 1 2 3 4 58 Next
Author Message
PostPosted: Mon Oct 28, 2013 6:40 pm 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 142
Leency wrote:
И всё же немного стрёмно, что исходник может вот так затерется если не имеет расширения.

Да, наверное вы правы. Надо сделать чтобы компилятор обязательно требовал расширение "ob07" для главного модуля.

Leency wrote:
>> Можете кто-то написать на форум разработчика, чтобы добавил поддержку относительных путей для компилятора?
Что насчёт этого?


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

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

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


Top
   
PostPosted: Mon Oct 28, 2013 9:39 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
akron1 wrote:
Еще одним ограничением компилятора в KolibriOS является невозможность освобождения динамической памяти

WAT? O_o

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Oct 28, 2013 9:42 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Любая программа в Колибри начинается примерно вот так:
Code:
   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:
: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;
}

_________________
Через тернии к звездам


Top
   
PostPosted: Mon Oct 28, 2013 9:46 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
>> Еще одним ограничением компилятора в KolibriOS является невозможность освобождения динамической памяти и неэкономное ее выделение. Это связано с тем, что системные функции KolibriOS, в отличие от Windows, могут выделять/освобождать память только целыми страницами. Может есть какая-нибудь библиотека с функциями типа malloc/free чтобы не писать свой менеджер памяти?

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

_________________
Через тернии к звездам


Top
   
PostPosted: Mon Oct 28, 2013 10:20 pm 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 142
Mario_r4 wrote:
Как это невозможно освободить? Есть подфункции 68 функции, которые позволяют как отдать ядру, так и предопределить размер выделенного блока с сохранением содержимого в неизменяемой части блока.

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

Ну вот поэтому пока DISPOSE не работает, так как нужен менеджер памяти.

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


Top
   
PostPosted: Tue Oct 29, 2013 2:12 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
akron1 wrote:
Подфункции 68.20, 68.12 и 68.13 выделяют и освобождают память целыми страницами. При выделении таким образом памяти для множества мелких записей (например связанный список) будет большой перерасход памяти. Например для сборки самого компилятора из-под Колибри потребуется более 200 Мб.

Ну, так как уже сказал Кирилл - менеджер памяти приложения. Ядро и не обязано предоставлять таких сервисов.

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Tue Oct 29, 2013 2:37 am 
Offline
Public Relations
User avatar

Joined: Mon Jun 07, 2010 12:01 pm
Posts: 1879
akron1 wrote:
Здравствуйте, уважаемые участники форума. Я - автор сабжа. Если у вас есть какие-либо вопросы или предложения - можете спрашивать.
Добрый день и большое спасибо, что Вы зарегистрировались и написали на нашем форуме. Моё предложение заключается в том, чтобы, если разработка Oberon для KolibriOS будет продолжена, исходники выкладывались в нашем репозитории SVN (тогда любой участник нашего проекта сможет также участвовать в разработке Oberon, если захочет). В противном случае, изменения могут потеряться, могут появляться форки, неизвестно где взять самую последнюю версию, а это всё лишняя трата времени и сил.

re0ne wrote:
Да, на форуме http://oberspace.dyndns.org/, где был впервые представлен проект, человек с ником Freeman (а такой ник есть и здесь, подозреваю, что это тот же человек) спросил:
Quote:
А можно нескромный вопрос: поддержка ОС "Колибри" не планируется?
Автор сначала ответил, что поддержка не планируется, но потом сделал.

Теперь понятно. Просто я об этом форуме первый раз услышал сейчас. 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/"Колибри", чтобы системные функции импортировать без прокладок.


Top
   
PostPosted: Tue Oct 29, 2013 9:58 pm 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 142
yogev_ezra wrote:
Моё предложение заключается в том, чтобы, если разработка Oberon для KolibriOS будет продолжена, исходники выкладывались в нашем репозитории SVN (тогда любой участник нашего проекта сможет также участвовать в разработке Oberon, если захочет). В противном случае, изменения могут потеряться, могут появляться форки, неизвестно где взять самую последнюю версию, а это всё лишняя трата времени и сил.

Я думаю, это лучше сделать со следующего релиза, когда поддержка KolibriOS станет полноценной и будет сделан ряд усовершенствований. О новом релизе я сообщу.


Top
   
PostPosted: Thu Dec 19, 2013 5:35 pm 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 142
Сделал поддержку генерации dll(*.obj), простейшие библиотеки, биндинг к console.obj, появилась возможность переиспользования динамической памяти (DISPOSE), поддержка относительных путей.
https://sites.google.com/site/oberon07compiler/versii


Top
   
PostPosted: Wed Dec 25, 2013 3:54 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Спасибо, круто!

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Jan 04, 2014 12:49 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Скомпилируйте, пожалуйста, кто-то версию для Колибри.

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Jan 04, 2014 4:22 am 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 142
Скомпилировал


Attachments:
Compiler.rar [34.27 KiB]
Downloaded 169 times
Top
   
PostPosted: Sat Jan 04, 2014 1:02 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Спасибо. У языка есть логотип?

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Jan 04, 2014 9:07 pm 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 142
логотипа нет


Top
   
PostPosted: Sat Jan 04, 2014 9:59 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
O7

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 112 posts ]  Go to page Previous 1 2 3 4 58 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited