OberonCore https://forum.oberoncore.ru/ |
|
Порт Anti-grain geometry для Оберона. https://forum.oberoncore.ru/viewtopic.php?f=47&t=1270 |
Страница 1 из 3 |
Автор: | Димыч [ Среда, 03 Декабрь, 2008 11:31 ] | ||
Заголовок сообщения: | Порт Anti-grain geometry для Оберона. | ||
Здравствуйте, уважаемые коллеги! Хочу представить на суд общественности свою работу по переводу библиотеки Anti-grain geometry на язык Оберон (в реализации XDS). Краткое описание работы Скачать архив Переведено далеко не все, но уже достаточно, чтобы показать работающие модули/программы. Помощь в дальнейшем переводе приветствуется, контактная информация есть в блоге. Продублировал файл на форуме.
|
Автор: | Ярослав Романченко [ Среда, 03 Декабрь, 2008 12:03 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Димыч писал(а): Хочу представить на суд общественности свою работу по переводу библиотеки Anti-grain geometry на язык Оберон (в реализации XDS). Весьма интересно! Правда, у меня не получилось что-либо загрузить Если интересен порт также и под A2 можете заглянуть к нам http://a2os.org.ua/forums/index.php, у нас и SVN уже есть В A2 уже есть библиотека для формата SVG, например. |
Автор: | Димыч [ Четверг, 04 Декабрь, 2008 04:54 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Интересно, почему при входе с логином я вижу тему, а без логина - нет? и в активных темах она не отображается. Где-то галку выставить? |
Автор: | Димыч [ Понедельник, 08 Декабрь, 2008 19:20 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Для перевода библиотеки на BlackBox надо перевести на CP модуль AggColor.ob2. Там - математика по преобразованию цветов, связанная с беззнаковым целым 8 бит (с байтом то бишь). У меня не получилось. Если кто подскажет, можно будет начать переделывать и под BB. |
Автор: | Димыч [ Понедельник, 08 Декабрь, 2008 19:27 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Может я не открыл Америку, но вчера сделал интересное для себя открытие. Если в процессе работы программы указателям, ставшим уже ненужными, присваивать значение 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 для Оберон. |
Автор: | Comdiv [ Понедельник, 08 Декабрь, 2008 20:06 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Полагаю, это происходит от того, что в момент выделения памяти для массива, p всё ещё занят предыдущим значением, и поэтому память освободиться не может. В реальных задачах этот эффект может быть не заметен. |
Автор: | Info21 [ Вторник, 09 Декабрь, 2008 08:55 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Но предыдущее значение -- массив другого размера. |
Автор: | Александр Ильин [ Вторник, 09 Декабрь, 2008 10:32 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Димыч писал(а): Если в процессе работы программы указателям, ставшим уже ненужными, присваивать значение NIL, расходование памяти происходит не так агрессивно. Если же этого не делать, то память высвобождается медленнее. У меня наоборот получилось - если строку ":= NIL" закомментировать, то среднее и максимальное потребление памяти ниже (чаще освобождает). Вы чем пользовались для замеров? Я смотрел Performance Graph в свойствах процесса в Process Explorer v.11.20 с выборкой раз в секунду.Если выделенную строчку закомментировать, программа потребляет примерно вдвое больше памяти, и ее освобождение происходит медленнее. Кстати, почему бы не попробовать более чистый эксперимент? Вынесите тело цикла в отдельную процедуру, чтобы указатель p был локальной переменной. Такая ситуация ближе к реальности, вы ведь не будете всю программу запихивать в MAIN. Вполне возможно, что это задействует дополнительные оптимизации, и присвоение NIL не потребуется. Ещё одна причина, по которой пример слишком надуман: когда вы делаете NEW (p#NIL), то прежнее значение указателя ещё может являться якорем и препятствовать освобождению прежнего массива. Вот, кстати, почему вынос в локальную переменную, да и прочая нормальная работа (не тесты) будут вести себя более адекватно. При условии, конечно, что не выключен "+GENPTRINIT" (по умолчанию включен). Если же HEAPLIMIT # 0, то GC XDS (насколько я его знаю) освобождает память только тогда, когда доходит до верхнего предела, так что для этого случая ваш тест вообще не имеет смысла. |
Автор: | Comdiv [ Вторник, 09 Декабрь, 2008 14:07 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Info21 писал(а): Но предыдущее значение -- массив другого размера. В 49 итерациях из 50 следующий массив в (i + 1)/i раз больше предыдущего, что довольно мало для достаточно больших i, да к тому же в 1 итерации на каждые 50 новый массив в 50 раз меньше предыдущего. Всё это вполне может сойти за двойной перерасход памяти. |
Автор: | Димыч [ Среда, 10 Декабрь, 2008 21:06 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Пример, мною придуманный - совершенно синтетический, согласен. Вопросом этим я задался тогда, когда сравнил производительсность [url http=http://agg-sharp.sourceforge.net/]AggSharp[/url] и того, что делаю я. Так вот, демка "lion" написанная на C# если начать львенка крутить потребляет какое-то количество памяти, и на этом останавливается, а на Обероне - нет. Хотя, возможно я просто не дождался верхней границы, но для простого приложения 60 мб уже многовато, в сравнении с ~15 на C#. Замеряю помощью Task manager, колонки занято памяти и занято виртуальной памяти. Process Explorer как-то даже не подумал запустить |
Автор: | Евгений Темиргалеев [ Среда, 10 Декабрь, 2008 23:23 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Димыч писал(а): Там - математика по преобразованию цветов, связанная с беззнаковым целым 8 бит (с байтом то бишь) Попробуйте воспользоваться литерными типами CHAR и SHORTCHAR. Они как раз и есть беззнаковые 2- и 1-байтовые. ORD делает из них более широкое целое беззнаковым расширением.
|
Автор: | Александр Ильин [ Среда, 10 Декабрь, 2008 23:36 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Димыч писал(а): Хотя, возможно я просто не дождался верхней границы, но для простого приложения 60 мб уже многовато, в сравнении с ~15 на C#. Поставьте HEAPLIMIT="14000000".
|
Автор: | Димыч [ Четверг, 11 Декабрь, 2008 22:38 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Евгений Темиргалеев писал(а): Димыч писал(а): Там - математика по преобразованию цветов, связанная с беззнаковым целым 8 бит (с байтом то бишь) Попробуйте воспользоваться литерными типами CHAR и SHORTCHAR. Они как раз и есть беззнаковые 2- и 1-байтовые. ORD делает из них более широкое целое беззнаковым расширением.Хм, это получилось. Теперь еще вопрос, как организовать инициализацию массивов в ВВ? В XDS достаточно просто - TYPE A = ARRAY 10 OF INTEGER; VAR a: A; BEGIN a := A{0, 10, 20 ...}; А в ВВ? |
Автор: | Евгений Темиргалеев [ Пятница, 12 Декабрь, 2008 10:00 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Так не получится, поэлементно задавать нужно. Что Вам конкретно нужно? |
Автор: | Александр Ильин [ Пятница, 12 Декабрь, 2008 10:01 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Димыч писал(а): Теперь еще вопрос, как организовать инициализацию массивов в ВВ? Тоже достаточно просто:В 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; |
Автор: | Димыч [ Пятница, 12 Декабрь, 2008 10:30 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Евгений Темиргалеев писал(а): Так не получится, поэлементно задавать нужно. Что Вам конкретно нужно? Посмотрите модуль AggGSVText Там много массивов размером по нескольку тысяч элементов. Их надо загрузить в память. Поэлементно ... э ... долго |
Автор: | Иван Кузьмицкий [ Пятница, 12 Декабрь, 2008 11:09 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Однозначно - надо скинуть содержание массивов во внешний ресурс (составной документ, CSV, XML) и загружать оттедова. |
Автор: | Евгений Темиргалеев [ Пятница, 12 Декабрь, 2008 14:30 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Вполне и .odc подойдёт. Без всяких конвертеров открывай, да TextMappers.Scanner-м читай. Цикл в пару-другую строчек на все про все. Для начала проще всего. Если захочется избавиться от использования под-мы Text, тогда можно думать о др. формате. |
Автор: | Димыч [ Пятница, 12 Декабрь, 2008 20:45 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Евгений Темиргалеев писал(а): Вполне и .odc подойдёт. Без всяких конвертеров открывай, да TextMappers.Scanner-м читай. Цикл в пару-другую строчек на все про все. Для начала проще всего. Если захочется избавиться от использования под-мы Text, тогда можно думать о др. формате. А это можно сделать по месту? В смысле прямо в том же документе, после завершающего END.? |
Автор: | Александр Ильин [ Пятница, 12 Декабрь, 2008 21:33 ] |
Заголовок сообщения: | Re: Порт Anti-grain geometry для Оберона. |
Димыч писал(а): А это можно сделать по месту? В смысле прямо в том же документе, после завершающего END.? Проще в начале, после символов "(" и "*"... ; ) |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |