OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 10 Ноябрь, 2024 22:49

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Среда, 03 Декабрь, 2008 11:31 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Здравствуйте, уважаемые коллеги!

Хочу представить на суд общественности свою работу по переводу библиотеки Anti-grain geometry на язык Оберон (в реализации XDS).

Краткое описание работы
Скачать архив

Переведено далеко не все, но уже достаточно, чтобы показать работающие модули/программы.
Помощь в дальнейшем переводе приветствуется, контактная информация есть в блоге.

Продублировал файл на форуме.


Вложения:
agg_oberon.rar [134.64 КБ]
Скачиваний: 333


Последний раз редактировалось Димыч Среда, 03 Декабрь, 2008 12:09, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Среда, 03 Декабрь, 2008 12:03 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Димыч писал(а):
Хочу представить на суд общественности свою работу по переводу библиотеки Anti-grain geometry на язык Оберон (в реализации XDS).
Весьма интересно! :wink: Правда, у меня не получилось что-либо загрузить :(
Если интересен порт также и под A2 можете заглянуть к нам http://a2os.org.ua/forums/index.php, у нас и SVN уже есть :)
В A2 уже есть библиотека для формата SVG, например.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Четверг, 04 Декабрь, 2008 04:54 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Интересно, почему при входе с логином я вижу тему, а без логина - нет? и в активных темах она не отображается. Где-то галку выставить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Понедельник, 08 Декабрь, 2008 19:20 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Для перевода библиотеки на BlackBox надо перевести на CP модуль AggColor.ob2.
Там - математика по преобразованию цветов, связанная с беззнаковым целым 8 бит (с байтом то бишь).
У меня не получилось. Если кто подскажет, можно будет начать переделывать и под BB.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Понедельник, 08 Декабрь, 2008 19:27 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Может я не открыл Америку, но вчера сделал интересное для себя открытие.

Если в процессе работы программы указателям, ставшим уже ненужными, присваивать значение NIL, расходование памяти происходит не так агрессивно.

Если же этого не делать, то память высвобождается медленнее.

Эксперименты производитись на следующем коде:

Код:
<*+MAIN*>
<* HEAPLIMIT = "0" *>
<* +GCAUTO *>
MODULE GCTest;
VAR
  i: INTEGER;
  p: POINTER TO ARRAY OF ARRAY OF LONGINT;
BEGIN
  i := 1;
  WHILE TRUE DO
    INC(i);
    NEW(p, 128*i, 1024);
    p[i, i] := i;
    (*****************)
    p := NIL;
    (*****************)
    IF i = 50 THEN i := 1; END;
  END;
END GCTest.

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

Это повод пересмотреть использование памяти в AGG для Оберон.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Понедельник, 08 Декабрь, 2008 20:06 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1454
Откуда: Киев
Полагаю, это происходит от того, что в момент выделения памяти для массива, p всё ещё занят предыдущим значением, и поэтому память освободиться не может. В реальных задачах этот эффект может быть не заметен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Вторник, 09 Декабрь, 2008 08:55 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Но предыдущее значение -- массив другого размера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Вторник, 09 Декабрь, 2008 10:32 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2460
Откуда: Россия, Томск
Димыч писал(а):
Если в процессе работы программы указателям, ставшим уже ненужными, присваивать значение NIL, расходование памяти происходит не так агрессивно. Если же этого не делать, то память высвобождается медленнее.

Если выделенную строчку закомментировать, программа потребляет примерно вдвое больше памяти, и ее освобождение происходит медленнее.
У меня наоборот получилось - если строку ":= NIL" закомментировать, то среднее и максимальное потребление памяти ниже (чаще освобождает). Вы чем пользовались для замеров? Я смотрел Performance Graph в свойствах процесса в Process Explorer v.11.20 с выборкой раз в секунду.

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

Ещё одна причина, по которой пример слишком надуман: когда вы делаете NEW (p#NIL), то прежнее значение указателя ещё может являться якорем и препятствовать освобождению прежнего массива. Вот, кстати, почему вынос в локальную переменную, да и прочая нормальная работа (не тесты) будут вести себя более адекватно. При условии, конечно, что не выключен "+GENPTRINIT" (по умолчанию включен).

Если же HEAPLIMIT # 0, то GC XDS (насколько я его знаю) освобождает память только тогда, когда доходит до верхнего предела, так что для этого случая ваш тест вообще не имеет смысла.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Вторник, 09 Декабрь, 2008 14:07 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1454
Откуда: Киев
Info21 писал(а):
Но предыдущее значение -- массив другого размера.

В 49 итерациях из 50 следующий массив в (i + 1)/i раз больше предыдущего, что довольно мало для достаточно больших i, да к тому же в 1 итерации на каждые 50 новый массив в 50 раз меньше предыдущего. Всё это вполне может сойти за двойной перерасход памяти.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Среда, 10 Декабрь, 2008 21:06 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Пример, мною придуманный - совершенно синтетический, согласен.

Вопросом этим я задался тогда, когда сравнил производительсность [url http=http://agg-sharp.sourceforge.net/]AggSharp[/url] и того, что делаю я.
Так вот, демка "lion" написанная на C# если начать львенка крутить потребляет какое-то количество памяти, и на этом останавливается, а на Обероне - нет.
Хотя, возможно я просто не дождался верхней границы, но для простого приложения 60 мб уже многовато, в сравнении с ~15 на C#.

Замеряю помощью Task manager, колонки занято памяти и занято виртуальной памяти.
Process Explorer как-то даже не подумал запустить :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Среда, 10 Декабрь, 2008 23:23 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Димыч писал(а):
Там - математика по преобразованию цветов, связанная с беззнаковым целым 8 бит (с байтом то бишь)
Попробуйте воспользоваться литерными типами CHAR и SHORTCHAR. Они как раз и есть беззнаковые 2- и 1-байтовые. ORD делает из них более широкое целое беззнаковым расширением.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Среда, 10 Декабрь, 2008 23:36 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2460
Откуда: Россия, Томск
Димыч писал(а):
Хотя, возможно я просто не дождался верхней границы, но для простого приложения 60 мб уже многовато, в сравнении с ~15 на C#.
Поставьте HEAPLIMIT="14000000".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Четверг, 11 Декабрь, 2008 22:38 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Евгений Темиргалеев писал(а):
Димыч писал(а):
Там - математика по преобразованию цветов, связанная с беззнаковым целым 8 бит (с байтом то бишь)
Попробуйте воспользоваться литерными типами CHAR и SHORTCHAR. Они как раз и есть беззнаковые 2- и 1-байтовые. ORD делает из них более широкое целое беззнаковым расширением.


Хм, это получилось.

Теперь еще вопрос, как организовать инициализацию массивов в ВВ?

В XDS достаточно просто -
TYPE
A = ARRAY 10 OF INTEGER;
VAR
a: A;

BEGIN
a := A{0, 10, 20 ...};

А в ВВ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 10:00 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Так не получится, поэлементно задавать нужно. Что Вам конкретно нужно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 10:01 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2460
Откуда: Россия, Томск
Димыч писал(а):
Теперь еще вопрос, как организовать инициализацию массивов в ВВ?
В XDS достаточно просто...
А в ВВ?
Тоже достаточно просто:
TYPE
A = ARRAY 10 OF INTEGER;
VAR
a: A;
BEGIN
InitA(a, 0, 10, 20, ...);

PROCEDURE InitA (VAR a: A; a0, a1, a2, ...: INTEGER);
BEGIN
a[0] := a0; a[1] := a2; a[2] := a1; ...
END InitA;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 10:30 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Евгений Темиргалеев писал(а):
Так не получится, поэлементно задавать нужно. Что Вам конкретно нужно?


Посмотрите модуль AggGSVText :)
Там много массивов размером по нескольку тысяч элементов.
Их надо загрузить в память.
Поэлементно ... э ... долго :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 11:09 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Однозначно - надо скинуть содержание массивов во внешний ресурс (составной документ, CSV, XML) и загружать оттедова.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 14:30 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Вполне и .odc подойдёт. Без всяких конвертеров открывай, да TextMappers.Scanner-м читай. Цикл в пару-другую строчек на все про все.

Для начала проще всего. Если захочется избавиться от использования под-мы Text, тогда можно думать о др. формате.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 20:45 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Евгений Темиргалеев писал(а):
Вполне и .odc подойдёт. Без всяких конвертеров открывай, да TextMappers.Scanner-м читай. Цикл в пару-другую строчек на все про все.

Для начала проще всего. Если захочется избавиться от использования под-мы Text, тогда можно думать о др. формате.

А это можно сделать по месту?
В смысле прямо в том же документе, после завершающего END.?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Порт Anti-grain geometry для Оберона.
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 21:33 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2460
Откуда: Россия, Томск
Димыч писал(а):
А это можно сделать по месту?
В смысле прямо в том же документе, после завершающего END.?

Проще в начале, после символов "(" и "*"... ; )


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB