Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

Что есть XCL?   Найти похожие ветки 

 
BaryVetaL ©   (2005-12-14 13:20) [0]

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

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

Спасибо.


 
Muxaspb ©   (2005-12-14 13:42) [1]

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


 
RA ©   (2005-12-14 14:33) [2]

Все верно.
16 июня 1999 стартовал проект XCL.
С 2000 года (вроде тоже июнь) началась разработка KOL. Многие наработки с XCL перекочевали в KOL.
А 2 декабря 2000 начат проект - Mirror Classes Kit (Набор Зеркальных Классов для KOL), т.е. MCK.

Если интересуетесь историей, то вам можно заглянуть сюда
http://web.archive.org/web/20021205053934/bonanzas.rinet.ru/roldnews.htm
http://web.archive.org/web/20021205052840/bonanzas.rinet.ru/xcl_history_old.htm


 
BaryVetaL ©   (2005-12-15 10:48) [3]

Не сочтите за наглость, можно ли посмотреть на исходники XCL, если у кого есть поделитесь пожалуйста и не спрашивайте зачем :-)


 
BaryVetaL ©   (2005-12-16 09:35) [4]

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

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


 
Barloggg   (2005-12-16 13:32) [5]

хе. не в таком ракурсе это не то.
ХСL, как впрочем и KOL и ACL это всего навсего надстройки над стандартным WinApi.
И никакой оптимизации тут нету. Просто другой метод составления программ.

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

кстати где-то в архивах центрального сайта болталась программка для перевода VCL проекта в KOL проект. работает, но плохо. Kollovrat кажется называется.
Но от тебя как от автора дипломной работы требуется совсем другое. Тебе нужно сформулировать набор требований к стилю программирования, чтобы ЕХЕ-шник получался оптимально компактным.

Дае средствами самой Дельфи можно сделать ЕХЕ-шник крошечным. не включать в него все использованные либы. (делается одним кликом в свойствах)...

Так что, получить исходники это не совсем то решение, которое тебе нужно. А вообще было бы неплохо если бы ты рассказал подробнее. Ибо тема диплома меня заинтересовала.


 
BaryVetaL ©   (2005-12-16 16:29) [6]

Хорошо. Я сейчас раскажу и думаю ты поймешь...

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

Продолжу.
Теперь подробней о задаче:
Дано: код программы который работает на VCL
Задача: из старого кода программы получить новый код, который будет выполнять  все тоже, что и программа на VCL, но была меньшего размера откомпилированная программа, это и подразумевает оптимизацию. Так же нужно подумать не только об оптимизации по размеру, но и об оптимизации по скорости работы...

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


 
Vedun   (2005-12-16 18:06) [7]

2 BaryVetaL
По-моему это просто фантастика. Скорее всего, ты не первый, кто думает о такой программе, которая бы улучшала после нас код. Что-то подпбное делает компилятор Делфи. Но на уровне машинных команд. Вместо того, чтобы оптимизировать программу на VCL, лучше изпользовать его заменители, даюшие меньний откомпилированный код (такие как KOL) или более быстрый по скорости исполнения (таких правда не знаю).

Одному человеку сделать такой оптимизатор не под силу. :(


 
Thaddy   (2005-12-17 04:53) [8]

Yes,

Ask Vladimir himself,

He is very polite and understanding.

I believe that for research - as you suggest (but i do not fully understand- he would give you XCL himself, with explanation, although that can be found on this forum.

(I still have copies of XCL if necesary)


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

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

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

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

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


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


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


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


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

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


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


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


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

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

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

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

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

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

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


 
homm ©   (2005-12-19 12:45) [13]

На самом деле в общем случаепеределать код под другую платформу, ничего не делая ручками нельзя. Есть лишь частные решения для фиксированого количества свойств, так как не все свойства в принципе можно адаптировать между двумя платфрмами. Ведь логика работы таких компонентов как меню или 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 не обладает такой точность, что нужна тебе.


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

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

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

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

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


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

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


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

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


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


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


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

<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.

;)


 
BaryVetaL ©   (2005-12-20 09:49) [18]

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: За статью спасибо, можно начинать текст диплома :-)


 
Barloggg   (2005-12-20 12:41) [19]

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


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

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

Впервые опубликован : 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 14:13) [21]

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

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


 
BaryVetaL ©   (2005-12-20 14:45) [22]


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


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


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

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


 
BaryVetaL ©   (2005-12-20 16:26) [24]

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


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

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


 
BaryVetaL ©   (2005-12-21 09:02) [26]

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


 
RA ©   (2005-12-21 09:28) [27]

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


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

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

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



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.048 c
2-1159244988
tlv
2006-09-26 08:29
2006.10.15
MediaPlayer - не запускается на компьютере без Delphi


15-1158866149
Kolan
2006-09-21 23:15
2006.10.15
Помогите заменить массив ChechBox массивом Boolean


2-1158753837
Darkwing
2006-09-20 16:03
2006.10.15
TIBQuery. Как сделать поиск (select, like) нечувствительным


15-1159192046
XeLL
2006-09-25 17:47
2006.10.15
ряд Макларена


2-1159510933
vodvorezlaya
2006-09-29 10:22
2006.10.15
Как сделать закрытие формы по нажатию Esc?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский