Оказалось, что скрестить чрезвычайно удачный объектно ориенторованный подход стандартного классического пакета Delphi с новыми методами генерации практически 100% оптимального кода(FTCG) не так сложно. Для осуществления этой задачи в пакет Delphi был инжектирован кодогенератор пакета Delphi 2, генерирующий код при вставки в схему специального элемента - шлюза: [svn]FTCG_Tools.pas[/svn]. Все элементы, вставленные внутрь него(он очевидно является контейнером) генерируют очень быстрый и полностью оптимальный код, врезультате чего скорость работы схем в критических местах возрастает более чем в 10 раз.
Следующий пример на процессоре Athlon 1900Мгц выполняется примерно за 14.629 секунд:
code_7788.txt
а таже самая схема, помещенная внутрь FTCG_Tools дает уже в среднем 0.013 секунд... т.е. не много не мало, а в 1000 раз быстрее:
code_7789.txt
Для запуска последнего примера на своей машине необходимо:
1) Скачать с SVN папку FTCG
2) Обновить полностью папку Delphi
3) Запустить make.bat из папки Delphi
Редактировалось 1 раз(а), последний 2016-08-23 20:48:52
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
карма: 27 |
| ||
файлы: 2 | code_7788.txt [1KB] [1526], code_7789.txt [1KB] [1530] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Вячеслав, если у элемента есть в папке code соответствующий *.hws, то его можно использовать.
Так же стоит еще раз подчеркнуть - код в рамках данного элемента генерирует FTCG и этот процесс абсолютно ничем не отличается от того, что происходит в пакетах WEB и Delphi 2. И наконец в рамках данного пакета имеет смысл "портировать" только часть элементов палитры, использование которых критично к скорости выполнения программы. В основном это элементы вкладок Массивы, Строки, Инструменты и Логика. |
|||
карма: 27 |
| ||
Голосовали: | VAD |
Ответов: 262
Рейтинг: 6
|
|||
Dilma, из прочитанного выше я понял, что основная идея, в создании для критичных элементов FTCG дубликата .hws. При помещении такого элемента в FTCG_Tools автоматически .pas вариант заменяется на .hws. Так как это сделано например с элементом hiGL_Cube. Единственное не понятно почему часть элементов была названа с префиксом FT и выделена в отдельную вкладку. Почему сделан отдельный hiFT_Message.hws, когда по логике должен быть просто hiMessage.hws? То же самое и с другими элементами hiFor и hiFT_For и пр.
-- В файле hiStrArray.hws c SVN на самом деле текст на паскале. Цепочка FT_If_else -> onFalse -> FT_if_else генерирует нерабочий код "end; else if". По ctrl+f тексты .hws элементов не открываются. |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Chesh, стандартные элементы было единогласно решено представлять отдельными элементами палитры по двум основным причинам:
1) не все элементы палитры имеет смысл выносить в FTCG - какие-то не дадут прироста скорости, а какие-то там вовсе смысла не имеют 2) из тех, что туда вынесены многие поменяют(или уже поменяли) интерфейс и часть функциональности OpenGL теоритически возможно перенести на FTCG полностью и без изменений как интерфейсных, так и функциональных. Делать еще одну копию вкладки видимо не очень рационально. По остальным вопросам: технология проходит стадию внедрения. |
|||
карма: 27 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
По большому счету с учетом этого внезапно открытого факта производство "чистых" пакетов на базе FTCG для объектно ориентированных языков смысла не имеет. Тут мы получаем возможность проектировать элементы как высокого уровня(с большим количеством кода целевого языка), отлаживаемые как в hiasm так и вне его, так и компоненты низкого уровня, чья эффективность резко падает при объектно ориентированном подходе. Кроме того разработчик получает возможность самостоятельно выбирать способ создания нового элемента в зависимости от свои знаний и способностей. Не исключено так же его последовательное обучение и постепенный переход от схемы, к диалекту целевого языка и наконец к синтаксису промежуточного скрипта HWS.
|
|||
карма: 27 |
|
Главный модератор
Ответов: 2997
Рейтинг: 395
|
|||
Получил разницу в 1000 раз, но сразу наступил на грабли: порядок свойств Start и End на панеле у компонентов For и FT_For разный.
|
|||
карма: 6 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Nic писал(а): порядок свойств Start и End на панеле у компонентов For и FT_For разныйэто изменение обусловлено тем, что св-во End переопределяется гораздо чаще, чем Start. ------------ Дoбавленo: Пример, демонстрирующий работу с BASS Stream в рамках FTCG. Показан простейших способ микширования двух синусоид различной частоты и амплитуды. В процессе выполнения пиковая нагрузка на процессор составила ~2-3%, что в 10 раз меньше, чем при выполнение схемы на стандартных элементах палитры. Кроме того наращивание ф-ности в FTCG не приведет к существенному увеличению нагрузки на CPU. ![]() в архиве есть EXE |
|||
карма: 27 |
| ||
файлы: 2 | stream_mix.rar [42.3KB] [764], mixer.png [5.9KB] [1069] |
Ответов: 2058
Рейтинг: 28
|
|||
Dilma, а когда следующий билд примерно будет? Хочеться то же посмотреть на этого зверя (FTCG).
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Для ознакомления достаточно выполнить три пункта из первого поста
|
|||
карма: 27 |
|
Ответов: 2058
Рейтинг: 28
|
|||
Dilma писал(а): Для ознакомления достаточно выполнить три пункта из первого постаНе выходит у меня. Придёться ждать очередного билда. Кстате почему нет файла Elements.db ? Это нармально? Вместо него Elements.sql. |
|||
карма: 1 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Эдик, ты форум весь читай, уже обсуждали и даже утилиту выкладывали, чтобы из sql сделать db
|
|||
карма: 1 |
|
Ответов: 184
Рейтинг: 4
|
|||
Маленький вопрос по FTCG: допустим я переписал компонент PointXY под FTCG и получил вот это:
hiFT_PointXY.hws:
Вопрос: правильно ли я всё записал в hws (нет ли чего лишнего) и будет ли компонент всегда работать так как задумано ![]() |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
HuKTO, во-первых, есть сомнение, что компонент стоит делать именно так. Все же не стоит забывать, что мы работаем в рамках FTCG. Для примера советую посмотреть Point3D из OpenGL. Представление ввиде формулы - это затычка придуманая во времена, когда не было МТ.
В целом же скрипт написан верно, разве что X_ = X можно убрать |
|||
карма: 27 |
|
Ответов: 184
Рейтинг: 4
|
|||
Понял, пошёл смотреть...
P.S. По поводу X_ = X: сглупил, в пол третьего ночи иногда многое не доходит ![]() ------------ Дoбавленo: С point понятно. Ещё один вопросик. Попробовал переписать IndexToChanel:
linked("onEvent" + i) получаю вот это
Ошибка чтения аргументов linked: ожидается символ )
Как проверить, подцеплено ли событие? Или я опять не там копаю? |
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
1) Аргумент linked есть токен а не выражение
2) Я уже извращаелся на этот предмет (IndexToChanel) - посмотри по форуму 3) linked - вовсе не есть гарантия отсутствия кода ------------ Дoбавленo: Вот вроде http://hiasm.com/forum.html?q=3&p=60840#p60840 |
|||
карма: 9 |
|