Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
#46: 2010-09-24 22:33:33 ЛС | профиль | цитата
привел бы еще время выполнения элемента в сравнении с аналогом на рассыпухе
карма: 27
0
Ответов: 1429
Рейтинг: 50
#47: 2010-09-25 09:21:17 ЛС | профиль | цитата
Assasin, искренне, поздравляю, молодец! (здорово!, что ты прикрутил чтение строковых)

Хочу отметить. Этот компонент не решает проблем управления потоками, получился стандартный, хотя и весьма, "продвинутый" - if_Else.
Преимущества ты перечислил, но это только 30% функционала элемента о котором я писал, и от каскадов мы пока не избавились:

Очень часто встречается задача выбора из массива по условию, и управления потоками по условию:

Где:
if x1 = 'Login' then 0, x2 = 'Assasin' then 1, x3 = 4567 then 2 else error

(то-есть на точку True должны выходить индексы верхних точек)
Но верхняя запись громоздкая, и в максе она заменяется на подобие Case:

case 'Login' 'Assasin' 4567

В результате все сразу заталкивается в элемент в потоке, и на выходе on_True возникают индексы совпадений.
Если затолкали слово Login то выскочит нолик, если Assasin выскочит еденичка. Иначе - точка on_false.
А за элементом либо массив, либо IndexToChannel.

(это для HiAsm, в максе пошли дальше, обьеденив этот case с элементом IndexToChannel, и получили "многоэтажный case" с простым синтаксисом)

------------ Дoбавленo в 09.21:
Еще просто, нейтральная, информация:
есть разница устройства самих интерфейсов. Этот элемент у макса имеет сложный функционал, и при этом не теряет ресурсов, еще вот почему:

Палитра элементов там есть только для визуальных компонентов, а нужный логический элемент, подгружается в зависимости от того, что юзер вписал в начале строки. Если он пишет "if.." то подгружается элемент который сделал Assasin, если юзер пишет "case...", то подгружается case,
или если пишет "+" то загружается простой "Math" (и меняется его внешний вид). Это им экономит место на палитре, и ресурсы, под конкретные задачи.


карма: 0

0
Ответов: 356
Рейтинг: 31
#48: 2010-09-25 12:05:13 ЛС | профиль | цитата
Assasin, IfParse это конечно движение вперёд. Но компонент сам по себе ещё "сырой", и немаловажный вопрос "времени выполнения" остаётся открытым.
Согласен с login, это всё же не совсем то, и наиболее подходящим видится
набор мастеров, которые по этому языку будут формировать готовый IC и вставлять его в схему

карма: 0

0
Ответов: 1429
Рейтинг: 50
#49: 2010-09-25 12:25:39 ЛС | профиль | цитата
olDjeka, не хотелось бы обескуражить Assasin. Компонент не "сырой".
Просто Assasin или захочет его доделать, или не захочет.
------------ Дoбавленo в 12.25:
olDjeka писал(а):
формировать готовый IC и вставлять его в схему

Для "скорости" этот компонент нужно писать, на FTCG, там такое возможно, без поиска компромисов.
карма: 0

0
Ответов: 356
Рейтинг: 31
#50: 2010-09-25 12:45:19 ЛС | профиль | цитата
login писал(а):
Просто Assasin или захочет его доделать, или не захочет

Ну вобщем-то это и имелось ввиду
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#51: 2010-09-25 14:29:30 ЛС | профиль | цитата
login, такого я и не обещал, я не обещал, что сделаю все как в максе, я откликнулся на это
nesco писал(а):
Assasin, появились "кошки", не хочешь потренироваться
nesco писал(а):
попытать доделать свой компонент

login писал(а):
Очень часто встречается задача выбора из массива по условию, и управления потоками по условию:

Для этого лучше делать компонент CaseParse или использовать StrList: пишем значения в столбик, на вход doGetIndex подаем стркоу, а на выходе onGetIndex имеем искомый индекс или -1 в случае ненахождения.
login писал(а):
а нужный логический элемент, подгружается в зависимости от того, что юзер вписал в начале строки. Если он пишет "if.." то подгружается элемент который сделал Assasin, если юзер пишет "case...", то подгружается case,
или если пишет "+" то загружается простой "Math" (и меняется его внешний вид). Это им экономит место на палитре, и ресурсы, под конкретные задачи.

Это уже не ко мне, хотя идея в некотором плане интересна
olDjeka писал(а):
Assasin, IfParse это конечно движение вперёд. Но компонент сам по себе ещё "сырой", и немаловажный вопрос "времени выполнения" остаётся открытым.
login писал(а):
olDjeka, не хотелось бы обескуражить Assasin. Компонент не "сырой".
Просто Assasin или захочет его доделать, или не захочет.

Нет, login, olDjeka прав, компонент еще сыроват, но я его так просто не брошу (к тому же, раз уж я составил этот компонент, значит я подписался на исправление его ошибок (а я как раз нашел парочку, сидя в школе за партой и перебирая в голове код (я не шучу)) и доработку по желанию): у меня есть пара идей о быстродействии и уменьшении памяти за счет перехода на другую структуру данных (с TData на новую, более компактную и быструю).
карма: 10
0
Ответов: 356
Рейтинг: 31
#52: 2010-09-25 14:45:44 ЛС | профиль | цитата
[offtop]
Assasin писал(а):
сидя в школе за партой и перебирая в голове код
Не переусердствуй, а то "перегоришь" Учись расставлять приоритеты - всюду всё равно не успеешь [/offtop]
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#53: 2010-09-25 15:58:16 ЛС | профиль | цитата
[offtop]
olDjeka писал(а):
Не переусердствуй, а то "перегоришь"

У нас была алгебра... вернее даже две подряд, я уже сделал два номера вперед и поэтому сидел размышлял над кодом, изредка возвращаясь в реал и смотря на доску Так что с приоритетами у меня порядок [/offtop]
------------ Дoбавленo в 15.16:
Мда, пока что результаты неутешительные, почти в 1.8 раз дольше чем аналог на If-ах:
Add(MainForm,6617236,140,119)
{
Width=316
Height=130
}
Add(IfParse,3383782,455,203)
{
Operands=#2:x1|2:x2|2:x3|
CompareStr="(x1 = 'Assasin' and x2 = 'Editor') xor x3 <> 'xor'"
Point(doCompareStr)
link(onTrue,14621491:doValue,[])
link(x1,13797966:Var2,[])
link(x2,13743413:Var2,[])
link(x3,5355037:Var1,[(475,170)])
}
Add(Button,200806,231,203)
{
Left=10
Top=30
Caption="Cmp"
link(onClick,512977:doEvent1,[])
}
Add(Edit,13947472,406,252)
{
Left=10
Top=5
Width=295
Text="(x1 = 'Assasin' and x2 = 'Editor') xor x3 <> 'xor'"
link(onChange,3383782:doCompareStr,[(446,258)(446,216)])
}
Add(Edit,12907944,420,105)
{
Left=75
Top=30
Width=230
Text="Assasin"
}
Add(Edit,15998327,462,105)
{
Left=75
Top=55
Width=230
Text="Editor"
}
Add(Edit,9343877,504,105)
{
Left=75
Top=80
Width=230
Text="xor"
}
Add(Memory,14621491,567,203)
{
}
Add(For,8000001,406,203)
{
Start=1
End=100000
link(onEvent,3383782:doCompare,[])
link(onStop,3875979:doStop,[(445,216)(445,197)(345,197)(345,216)])
}
Add(TimeCounter,3875979,357,203)
{
link(onStart,8000001:doFor,[])
link(onStop,1471027:doWork1,[(397,216)])
}
Add(Hub,512977,280,203)
{
link(onEvent1,3875979:doStart,[])
link(onEvent2,9755672:doStart,[(304,216)(304,370)])
}
Add(Message,1808652,406,308)
{
}
Add(For,4340021,406,364)
{
Start=1
End=100000
link(onEvent,11027046:doCompare,[])
link(onStop,9755672:doStop,[(450,377)(450,356)(345,356)(345,377)])
}
Add(If_else,11027046,455,364)
{
Op2=String(Assasin)
link(onTrue,6893893:doCompare,[])
link(onFalse,10612765:doWork2,[(498,377)(498,419)])
link(Op1,13797966:Var3,[(461,244)(521,244)(521,163)])
}
Add(GetDataEx,13797966,455,158)
{
Angle=3
link(Data,12907944:Text,[(426,163)])
}
Add(If_else,6893893,504,364)
{
Op2=String(Editor)
link(onTrue,2800841:doCompare,[])
link(onFalse,10612765:doWork1,[(548,377)(548,397)(522,397)])
link(Op1,13743413:Var3,[(510,180)])
}
Add(GetDataEx,13743413,462,175)
{
link(Data,15998327:Text,[])
}
Add(If_else,2800841,553,364)
{
Op2=String(xor)
link(onTrue,4065354:doWork2,[])
link(Op1,6052838:Var3,[(559,170)])
}
Add(GetDataEx,5355037,504,165)
{
link(Data,9343877:Text,[])
}
Add(If_else,13469190,539,413)
{
Type=5
Op2=String(xor)
link(onTrue,4065354:doWork3,[(599,419)])
link(Op1,6052838:Var2,[])
}
Add(GetDataEx,6052838,539,165)
{
Angle=3
link(Data,5355037:Var3,[])
}
Add(Memory,12368110,623,364)
{
}
Add(HubEx,4065354,595,364)
{
link(onEvent,12368110:doValue,[])
}
Add(TimeCounter,9755672,357,364)
{
link(onStart,4340021:doFor,[])
link(onStop,1471027:doWork3,[(397,377)])
}
Add(HubEx,1471027,393,308)
{
link(onEvent,1808652:doMessage,[])
}
Add(HubEx,10612765,518,413)
{
link(onEvent,13469190:doCompare,[])
}
Принимаюсь за работу
------------ Дoбавленo в 15.58:
Используя новую структуру и несколько поправок удалось добиться снижения с 1.8-2.0 раза, до (среднее значение меж 3 тестов) 1.51835240469286. Все же уже лучше, но на большее у меня пока что нет идей.
Вот компонент, а тестовая схема осталась той же.
[burl=/getfile/20770]ifparse1.2.rar[/burl]
карма: 10
1
файлы: 1ifparse1.2.rar [3.2KB] [89]
Голосовали:login
Ответов: 1429
Рейтинг: 50
#54: 2010-09-26 09:29:54 ЛС | профиль | цитата
Assasin писал(а):
CaseParse или использовать StrList:

Ты прав, StrList я не догадался )
Да и еще я нашел твои компоненты: NameToChannel (и обтратно), хорошие, а я не видел их.

p/s
А почему разработчики не делают бета версии HiAsm 4.xx?
Которые бы отличались только наполнением их новыми компонентами. А то иногда не знаешь кто что уже написал.
Или файл-update стандартного пакета до v.2.xx и т. п. Неудобно элементы, по одному, вручную добавлять.
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#55: 2010-09-26 12:14:46 ЛС | профиль | цитата
Assasin писал(а):
Мда, пока что результаты неутешительные, почти в 1.8 раз дольше чем аналог на If-ах:

вот поэтому тут этим заниматься бесперспективно(если не делать свой компилятор как в fastMathParse конечно)

login писал(а):
Неудобно элементы, по одному, вручную добавлять.

install SVN
карма: 27
0
Ответов: 1429
Рейтинг: 50
#56: 2010-09-26 13:33:17 ЛС | профиль | цитата
Dilma писал(а):
install SVN

Может это банально, но я зашел на сервис SVN, и не понимаю как скачать обновленную версию.
Папки вижу а скачивания нет.
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#57: 2010-09-26 13:41:00 ЛС | профиль | цитата
login писал(а):
Может это банально, но я зашел на сервис SVN, и не понимаю как скачать обновленную версию.

SVN
карма: 27
1
Голосовали:login
Ответов: 356
Рейтинг: 31
#58: 2010-09-26 13:41:33 ЛС | профиль | цитата
Del.
карма: 0

0
Ответов: 1429
Рейтинг: 50
#59: 2010-09-26 13:55:10 ЛС | профиль | цитата
SVN хочет ручных действий
Век цифровых технологий.
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#60: 2010-09-26 14:28:15 ЛС | профиль | цитата
Dilma писал(а):
вот поэтому тут этим запиматься безперспективно

В таком случае MathParse в мусорку из пакета! За каким хреном там лежит то, что в разы медленнее, чем аналог на Math-ах? Да, я предвижу ответ: "В математике формулы намного длиннее, чем в логике, и делать кучу Math, в которых можно запутаться при построении или если надо поменять формулу, бессмысленно". К тому же, как многие (а потом уже и я) раньше говорили: будущее за FTCG, вот там код компонента на FTCG вообще займет десяток строк (а не как сейчас ~300 на чистом языке).
Dilma писал(а):
если не делать свой компилятор как в fastMathParse конечно

Ба, сначала бы меня кто научил ассемблеру (т.к сам я за это возьмусь врядли скоро), а уж потом я попробую разобраться с FastMathParse
login писал(а):
SVN хочет ручных действий


А ты думал он сам обновит, когда будет новая ревизия? Тогда это уже было бы автообновление, а не контроль версий
login писал(а):
А почему разработчики не делают бета версии HiAsm 4.xx?

Немного не понял, может ты про HiAsm 5?
карма: 10
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)