Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что есть XCL? [Delphi, Windows]


Страницы:   1 2

BaryVetaL ©   (2005-12-14 13:20:00) 

Вот интересно, прежде чем найти сайт про KOL перелопатил пол интернета по оптимизации программ, когда искал то встречал: ACL, KOL и XCL первое и второе юзал, а вот третье не пойму что:
1) не могу найти откуда это можно скачать
2) XCL и KOL написал один и тот же человек (подозрение не одно и тоже ли это)
3) Все ссылки на XCL ведут на bonanzas.rinet.ru (хотя там все про KOL)

Может кто нибудь объяснит мне что же это такое и даст ссылку?

Спасибо.


Barloggg   (2005-12-21 11:06:00) [1]

зачем синтаксический анализатор?
Можно и в лоб, как это сделано в KolConv. Если найден скажем Timage, то его сразу заменить на TKolPaintBox, то есть на PControl, и соответственно глянув в dfm файле список перекрытых процедур адекватно заменить их на подходящий синтакс (кстати этого в KolConv нету) и по тексту отслеживать если кто-то рисует на канвасе этого Timage перерисовывать код. опять таки простым поиском и замены строчек текста из списка на строчки текста из другого списка.
ну и конечно создать процедуру инциализации формы, в которой привести код создания всех компонент.

и нечего усложнять себе жизнь.


RA   (2005-12-21 09:28:00) [2]

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


BaryVetaL   (2005-12-21 09:02:00) [3]

Ну а куда деваться? Берусь!


Barloggg   (2005-12-20 16:46:00) [4]

Итак, берешься?


BaryVetaL   (2005-12-20 16:26:00) [5]

Уже говорил :-)


Barloggg   (2005-12-20 16:22:00) [6]

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


BaryVetaL   (2005-12-20 14:45:00) [7]


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


Не боись Barloggg, я сам боюсь :-)


Barloggg   (2005-12-20 14:13:00) [8]

выдал в этот конвертер одноформенный сложный проект:
с record'ами не работает... выдает глюки...
... StringGrid'ов этот конвертер не знает, кстати стандартный ЛистВиев вполне может работать и как стринггрид,
загадочно обработал компонент Timаge... хмм...

попробую что-нибудь попроще
Timage тоже нету.
...
а проектов без Timage и Tstringgrid у меня нету... так что не работает этот конвертер как должно.
Хотя код выдает. причем весьма приятственный.


Barloggg   (2005-12-20 12:56:00) [9]

кстати вот что есть в разделе "инструменты"

Впервые опубликован : 4.02.2005
 
Приложение для преобрвзования VCL-приложений в KOL, помодульно. С исходным кодом.
Автор : retnyg

здесь: http://www.bonanzas.rinet.ru/r_tools.htm
а сам файл здесь: http://www.bonanzas.rinet.ru/kolconv.zip

эффективность правда я оценивать не пытался...


Barloggg   (2005-12-20 12:41:00) [10]

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


BaryVetaL   (2005-12-20 09:49:00) [11]

2homm: уменьшение не должно использовать упаковщиков типа AsPack или UPX, упаковку можно сделать потом, нужно именно преобразовать код, чтобы размер уменьшился!

2Barloggg: Наверное я все же буду делать конвертор типа VCL to KOL я подумал, что это наиболее реальный вариант и уменьшение размера будет наиболее реальным, насчет того, что ограниченное число компонентов можно использовать: да, но если сделать преобразоватьель для основных компонентов (которые находятся в первых трех вкладках+вкладка Dialogs ну может еще что-то), то подавляющее большинство программ все таки можно будет обработать... Мне никто не запрещает, наложить ограничения на конвертируемую программу: конвертор должен обрабатывать исходный код программ, которые не используют дополнительных компонентов и компонентов оговоренных мною.

Так же хочется что бы в моей программе были такие фишки как:
1) Добавление в код программы модуля антивирусной защиты (идея взята из Nero) то есть в модуле при инициализации считается контрольная сумма исполняемого файла и размер (которые создаются при первом запуске программы и сохраняются в отдельный файл), потом при каждом запуске считаются заново, если они не совпадают с полученными то файл заражен (уже сделано)
2) Использовать стиль Windows XP (это вообще просто: добавить файл ресурсов) (уже сделано)
3) Создание демо проекта из моей программы
4) Шифрование открытых строк программы
5) Анти отладка
6) Экспорт pas to html (уже сделано)

Не много ли? Незнаю, но это мой план минимум...

2Thaddy: Thank you, good idea!

2Vedun: За статью спасибо, можно начинать текст диплома :-)


Thaddy   (2005-12-19 17:03:00) [12]

<quote>
IntToStr на int2str...
</quote>

I already showed sometime ago, that this is not really a problem.
You can redeclare this type as var and use the same name as the VCL.
This only costs 4 bytes ( a pointer), but makes translation a bit easier for people who are new to KOL and for automated translation tools like KolOvrat.


interface

uses
windows,kol;

type
TMakerect = function ( Left, Top, Right, Bottom: Integer ): TRect; stdcall;
TMakePoint = function ( X, Y: Integer ): TPoint;
TInt2Str = function ( Value : Integer ) : String;
TInt2Hex = function ( Value : DWord; Digits : Integer ) : String;
TStr2Int = function (const Value : String) : Integer;

const
Rect :TMakeRect = Makerect;
Point :TMakePoint = MakePoint;
IntToStr:TInt2Str = Int2Str;
IntToHex:TInt2Hex = Int2Hex;
StrToInt:TStr2Int = Str2Int;

implementation
// leave empty please!, only for pure aliases
end.

;)


Vedun   (2005-12-19 15:00:00) [13]

А тема твоего дипломного уже официально утверждена? Или ее еще можно варьировать?


> хммм.... а если речь вести ли о том, чтобы заменить VCL
> компоненты, на их WinAPI представление, то можно добиться
> определенных результатов.
> Но это опять таки будет не что иное как конвертер.
> Но ведь аттестационной комиссии об этом знать необязательно,
>  верно?
> Тогда можно. И вообще мысль о конвертере выглядит довольно
> привлекательно.


Я тоже думаю, что это пока наиболее реальная идея. Кроме того, по этому адресу http://www.delphimaster.ru/articles/optimization.htmlлежит статья о методах оптимизации программ на Делфи с учетом особенностей компилятора. Идеи из этой статьи можно использовать в таком конверторе.


Barloggg   (2005-12-19 14:31:00) [14]

хммм.... а если речь вести ли о том, чтобы заменить VCL компоненты, на их WinAPI представление, то можно добиться определенных результатов.
Но это опять таки будет не что иное как конвертер.
Но ведь аттестационной комиссии об этом знать необязательно, верно?
Тогда можно. И вообще мысль о конвертере выглядит довольно привлекательно.


Barloggg   (2005-12-19 14:09:00) [15]

хмм... BaryVetaLзадача нереальна.
KOL, XCL, ACL это не оптимизация.
Это альтернатива. это другой способ.
но не оптимизация.
Если ты видишь решение задачи в VCL to KOL конвертере, хорошо.

Пробежишься по коду переделывая одни строчки на другие, меняя VCL объекты на их аналоги из KOL.
Это будет работать. но все-таки в частных случаях. и только для тех компонентов, которые ты знаешь и под которые написал преобразователь.
То есть красиво эту задачу не решить.
Но впрочем на диплом этого может и хватить. все-таки это лишь квалификационная работа. 10-30 компонентов перепишешь, да и нормально. а кто-нибудь использует 31 компонент и результат будет неправильным.

Кстати к слову, хоть Владимир и старался делать KOL объекты предельно похожими на VCL отличия все-же есть.
иногда принципиальные.

XCL/ACL тем и хороши, что используют в качестве базового именно Tobject. там сложностей будет меньше. однако эти либы так хорошо не развиты как KOL  и решишь ли ты свою задачу с их помощью, это вопрос. Возьмешься и завязнешь... время потеряешь.


homm   (2005-12-19 12:45:00) [16]

На самом деле в общем случаепеределать код под другую платформу, ничего не делая ручками нельзя. Есть лишь частные решения для фиксированого количества свойств, так как не все свойства в принципе можно адаптировать между двумя платфрмами. Ведь логика работы таких компонентов как меню или TBitmap различаются сильно. (В VCL за прозрачную отрисовку отвечает флаг, а в KOLе например отдельный метод).
Но есть и другие способы уменьшения размера исполняемого файла:
1. Сжатие
a)UPX (не помню адресс, Яндекс в помощь)
b)20to4 (www.20to4.net)
2. Выдирание лишнего
a) stripreloc (www.jrsoftware.org)
b) ResHacker (сам им не пользовался, говорят можно PACKAGEINFO выдернуть).

Другое дело возможно стоит покапатся в исходниках VCL, сделать такие объекты как Application, Screen функциями и убрать их автоматическое создание. Также можно попробывть убрать многочисленые перекресные ссылки из одноих методов на другие. Кроме того наверное можно урезать ДизайтТайм свойства. Еще обязательно надо попытатся подружить VCL модули с Кладовскими заменами системных модулей (а че, 10КБ то не лишние! ;) ). Еще можно "лишние" try/except выкинуть. Такая зашишеность не идет на пользу никому, снижая требования к квалификации программистов, что ИМХО не есть гуд. После всего этого ЧИСТЫЙ VCL можно использовать только для компиляции, в дизайитайме пользуясь нормальным. Но лучше чем KOL в любом случае результатов не добится. Даже до XCL не дотянет :(.

ЗЫ GetTickCount не обладает такой точность, что нужна тебе.


BaryVetaL   (2005-12-19 10:37:00) [17]


> я оставил XCL потому что он давал худшие рещультаты чем
> я надеялся


Vladimir извините за назойливость, но мне все равно хотелось бы посмотреть на XCL, понимаете если я добьюсь уменьшения размера хотя бы в 50%, то это уже будет достижение (хотя бы для меня :-) ). Если я буду использовать XCL в своих нуждах, то обещаю, что во всех модулях будут ссылки на то, что разработчиком и создателем этих модулей является Владимир Кладов. Все разработки могу выкладывать на Вашем сайте... Если Вам не трудно то мой e-mail: barilkovetal@mail.ru, да и вообще у кого, что есть по поводу уменьшения размера, просьба отправлять на этот почтовый ящик.

В принципе и KOL тоже можно использовать, написать более крутой KOLOvrat, который будет получше обрабатывать исходники, но тогда целесообразно изменить в модуле KOL название некоторых функций, например, int2str логично переобозвать как IntToStr (если конечно автор будет не против), так как лучше один раз изменить в модуле KOL, чем потом по всему исходному коду программы изменять IntToStr на int2str... Ну и много таких ньюансов.

Да, и еще, оптимизировать время работы отдельных блоков программы я наверное буду так: предоставлю пользователю самому отлаживать блоки, введу какие нибудь функции типа StartSpeedOptimization и StopSpeedOptimization, что-то типа этого:
...
var
 Counter: Integer; // Глобальная
...
procedureStartSpeedOptimization;
begin
 Counter := GetTickCount;
end;

procedureStopSpeedOptimiztion;
begin
 ShowMessage('Время работы блока: '+IntToStr(GetTickCount - Counter));
end;

далее в программе:
...
StartSpeedOptimization;
// Какой-то код
StopSpeedOptimiztion;

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

Я пока работаю на уровне идей и в ближайшее время буду создавать свою дипломную :-) Есть идеи пишите все по тому же мылу, обсудим, или же здесь, в этой ветке.


Vladimir Kladov   (2005-12-17 20:24:00) [18]

исполняется эмулятором П-машины, общим размером около 400 байт машинного кода.


Vedun   (2005-12-17 11:01:00) [19]


> Collapse не содержит компилятора, просто часть кода генерируется
> в MCK, и там же можно сгенерировать и П-код


И что потом с этим байт-кодом происходит? Компилируется в машинный?


Vladimir Kladov   (2005-12-17 08:31:00) [20]

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

Если оптимизировать по размеру VCL-программу, то надо:
- анализировать, какие виртуальные методы не используются в программе (это реально, если на руках все исходники)
- анализировать какие участки кода не используются (вычисление константных выражений)

И есть еше один путь: генерировать не машинный код, а байт-код (он же П-код), чем я сейчас и занимаюсь (Collapse). Но это фактически все равно что написать компилятор с Паскаля заново. Хотя компилятор в байт-код сделать проще, чем в машинный код. (Collapse не содержит компилятора, просто часть кода генерируется в MCK, и там же можно сгенерировать и П-код, остальной перевод в П-код пока можно будет делать руками).

(Вообще оптимизация и "по размеру" в наше время - не очень актуально, лучше говорить про уменьшение размера без слова оптимизация).


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо