Galkov, что ты имеешь ввиду?
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
|
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Я имею ввиду, что такая схема
code_868.txt Не имеет ничего общего с реализацией, которая тобой была предложена Хотя и очень похожа Более того, ДУМАЮ, практически любая реализация "кольцевания" никакого отношения к "изяществу" иметь не будет. После этого мне СОВЕРШЕННО непонятны попытки легализации "кольцевания" |
|||
карма: 9 |
| ||
файлы: 1 | code_868.txt [1.9KB] [365] |
Ответов: 2125
Рейтинг: 159
|
|||
Galkov писал(а): Не имеет ничего общего с реализацией, которая тобой была предложенаАбсолютно то-же самое. От того, что добавился Hub ничего не меняется, будет лишь два (несколько) последовательных вызова. Вообще - Hub это самый простой вариант последовательных вызовов процедур. Никто не мешает пронумеровать Work-точки в том порядке, в котором бы они вызвались по "логике HiAsm", и сгенерировать последовательность соответствующих вызовов процедур (или инлайн). А вот в случае кольцевания при нумерации точек мы наткнёмся на уже присвоенный номер, и на этапе без оптимизации можно сделать goto. Я понимаю, к чему ты клонишь: на самом деле это должен быть не goto, а call (т.е. опять таки рекурсия), но в простейшем случае хвостовая рекурсия оптимизируется в цикл, т.е. в goto. [size=-2]------ Добавлено в 16:35 Ты, наверное, имел ввиду такое? code_869.txt |
|||
карма: 1 |
| ||
файлы: 1 | code_869.txt [826B] [369] |
Ответов: 9906
Рейтинг: 351
|
|||
tsdima писал(а): Я понимаю, к чему ты клонишь: на самом деле это должен быть не goto, а call (т.е. опять таки рекурсия), но в простейшем случае хвостовая рекурсия оптимизируется в цикл, т.е. в gotoЯ знаю, что оптимизируется. Но еще я знаю, что определять, что она "хвостовая" - не есть прозрачная задача. Например, в CPP элементарное закрытие блока видимости это вовсе не конец. Это вызов finally-блока. Который двже ты не видишь, и запросто можешь пропустить. В Дельфи, между прочим - тоже вызывается finally-блок. Если в локальных переменных есть "особые" типы. Какие - задача не для средних умов, в отличии от "сложного" CPP И клоню я не совсем к тому, о чем ты говоришь. 1) Прежде всего - нет тут никакого изящества 2) Я не клоню к тому, что это должен быть call, я клоню к тому, что ВСЯ ВЕТКА с "этого места" должна быть помещена в динамический мультик в режиме OnlyOnce 3) И я с интересом посмотрел бы на технологию такого помещения: какие вертикальные связи перейдут в связи между уровнями рекурсии |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Galkov писал(а): в динамический мультик в режиме OnlyOnceНе факт, что пользователь имел бы такое ввиду. Он скорее всего будет ожидать, что значения переменных сохранятся и после того, как управление закольцуется. |
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
tsdima писал(а): Не факт, что пользователь имел бы такое ввиду. Он скорее всего будет ожидать, что значения переменных сохранятся и после того, как управление закольцуетсяНет однозначной интерпретатации чего имел БЫ в виду пользователь Если нет, то заниматься легализацией кольцевания - полный бред Если есть - излагай. Имеется ввиду - аргументировано, и не частный случай, а общий. Хотя упражнения на эту тему, мне представляются беспредметной тратой времени и мозговых ресурсов. Вроде и без этого нерешенных задач хватает Нет задач, для которых нужно кольцевание - за каким лядом тогда разбираться в этих БЫ Вопросы рекурсий должны решаться линками наверх - в этом случае, КАК МИНИМУМ, все понятно и очевидно интерпретируется. И никаких вопросов информационной связи между уровнями рекурсии не существует - просто и понятно. А именно это называется визуальным программированием А не искусство рисования лабиринтов, выйти правильно из которого может и автор через пол-года не сможет... |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Galkov писал(а): Нет однозначной интерпретатации чего имел БЫ в виду пользователь
Если нет, то заниматься легализацией кольцевания - полный бред вот и я практически об этом и говорю. Раз нельзя сказать однозначно, во что можно и нужно оптимизировать блок, то о никакой оптимизации речи быть не может. На счет кольцевания как такового момент все же спорный... Кто докажет мне, что вот это:
не есть кольцевание? Схематически никакой разницы нету. |
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Да - определения тоже нет
Разве-что запуск скриптов типа WEB в design time ![]() |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
для этого нужно проводить капитальную чистку PScData, чего сейчас не делается вообще нигде...
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Dilma, я к другому склоняюсь. Что менять чего-то придется - даже сомнений никаких
Может даже и "чего-то" - слишком мягко сказано У нас сегодня за одну точку элемента отвечает ОДНА ф-ия в соответствующем файле. Должно быть много ![]() Какие конкретно и с какой функциональностью - не додумал еще Идеология из букваря: Синтетически Управляемая Трансляция Чтобы получить код соответствующий внешнему для элемента event-у, мы вызываем соответствующую ф-ию нашего скрипта (в букваре это называется получить один из синтетических атрибутов нетерминала - B.code, к примеру). НО Чтобы он это сделал для нас адекватно, ему могут понадобиться некие параметры. Ну, например, идут ли в потоке параметры, и в каком формате (чтобы нужные конверторы прилепить к примеру). Ну правильно - мы худо-бедно их дает как аргумент ф-ии скрипта. НО, чтобы мы их адекватно сделали, хорошо бы знать, а нужны ли они будут вообще: может у меня картинка, а там real просят. Или вообще ничего не подключено. Как про такое букварь говорит ![]() А он говорит: если тебе для получения синтетического атрибута Code нужен наследуемый атрибут Type - так посчитай его. Если для его подсчета нужен опять синтетический атрибут usedData - так посчитай его ДО Code. Если... - ну и так далее ![]() Ну, скажем прототипом этого (к примеру) usedData может быть встроенная ф-ия Linked Но прямо скажем - она ведь не говорит нам всю правду ![]() Даже если нам нужен только Linked Вот, к примеру, HUB - какое же там linked для левого элемента, если справа все точки отключены. Вывод: кроме ф-ии возвращающей атрибут Code, нам для той же точки нужна ф-ия, возвращающая атрибут Linked (ну или более общий случай - usedData) Может (даже - скорее всего) при дальнейшем размышлении - еще какие-нибудь понадобятся... В этом аспекте может существовать атрибутик, вычисление которого вовсе не делает программу ветки Ну грубо говоря - мы не озадачивались посчитать атрибут Code, а делали анализ другого, более простого атрибута (при целевом Code он тоже понадобился бы) |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
идея понятна. Только видимо следую аналогии нужно делать такие ф-ции примерно таким образом:
Только любые подобные довески очевидно усложнят код элемента как такового. Уверен, что даже сейчас при взгляде на код, скажем, If не каждый поймет с ходу, что там происходит.Поэтому нужно продумать максимально простой и понятный интерфейс. |
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Dilma писал(а): Поэтому нужно продумать максимально простой и понятный интерфейс.Без сомнения Осталось совсем немного: начать, да кончить ![]() |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Galkov, собственно пакет WEB практически завершен. Пробегусь еще по всем элементам на предмет хвостов от старых реализаций, приведу к одной стилистики и можно будет ехать дальше, приняв наличие новой технологии за уже свершившийся факт.
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Ну не знаю...
Что вижу: везде вариантные типы, отсутствие контейнеризации (имею ввиду интеллектуальную, конечно), супер-инлайн. Про WEB не скажу - может там это все и пучком ![]() Но в общем-то случае (произвольный язык): явно нужен какой-то предварительный проход для сбора статистики на все классы - чтобы принимать решения inline/function, выкидывать ненужные поля из классов (коль скоро будет принято решение function), распространение констант... Должны же мы этот Memory в константу соптимизировать
Что-то похожее на предварительный проход семантического анализа (те же кольцевания там все и выявиться должны) |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Galkov, вынужден огорчить: в пакете WEB приведенное подключение Memory уже давно оптимизируется в константу
![]()
|
|||
карма: 27 |
|