Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
#76: 2007-07-02 10:50:42 ЛС | профиль | цитата
Galkov писал(а):
А вот про метод delete - нет...

Правильно. Нет потребности - нет и метода.

Galkov писал(а):
К тому же, пока не очень ясно как именно на сегодняшнюю концепцию должен реагировать редактор форм...

Достаточно просто:
- на схеме ищется элемент по маске: Type.Class = WinElement AND Edit.Class in [Form, Panel, GroupBox,ScrollBox]
- если найден, то он становится родителем и кнопка "Редактор формы" в среде активируется.
- запрет на вставку элементов с Type.Class = WinElement очевидно снимается совсем.

Galkov писал(а):
Чего-то мне думается, что следует заменить элемент Run на продвинутую версию элемента Application

и мне думается. Только развитие пакета (о чем в readme и написано) в планы на ближайшее будущее не входит.

[size=-2]------ Добавлено в 10:50
Galkov писал(а):
Вопрос: как методы TSDK_3 (мы же должны предполагать что они там есть) увидят коды типа win_1.width


как-то так

type
  TSDK_0 = object
public
win_1:PControl;
win_2:PControl;
SDK_4:TSDK_3;
SDK_5:TSDK_3;
....
function ReadData1:integer;
end;

SDK_4 := TSDK.create(self);
...
function TSDK_0.ReadData1:integer;
begin
Result := win_1.width;
end;
...
procedure TSDK_3.method;
begin
...
var2 := Parent.ReadData1;
...
end;
карма: 27
0
Ответов: 9906
Рейтинг: 351
#77: 2007-07-02 11:06:56 ЛС | профиль | цитата
Великолепно
Это в CPP у тебя есть возможность прописать тело ф-ии прямо в определении класса.
А в Дельфи - это тот самый геморрой от которого мы и пытаемся уйти.

Нам нужна возможность для совершения такого ритуала:
procedure TSDK_3.method;
begin
  ...
var2 := SDK_0.SDK_1.btn_111.text;
var3 := SDK_0.SDK_2.btn_222.text;
var4 := SDK_0.win_1.width;
...
end;

Class/object - действительно, непринципиальные тактические вопросы...
Просто вышеприведенное "обточивание" спокойно разрешается компилятором в Design-Time для статических объектов. И обязательно в Run-Time в случае class...
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#78: 2007-07-02 11:24:30 ЛС | профиль | цитата
Galkov писал(а):
Это в CPP у тебя есть возможность прописать тело ф-ии прямо в определении класса.

зачем мне это? С доступом к Var точкам в обе стороны делается одно и тоже: реализуются методы, позволяющие получить данные с точки:

procedure TSDK_3.method;
begin
...
var2 := SDK_0.ReadVar1;
var3 := SDK_0.ReadVar2;
var4 := SDK_0.ReadVar3;
...
end;

function TSDK_0.ReadVar1;
begin
Result := SDK_1.ReadVar1;
end

function TSDK_1.ReadVar1;
begin
Result := btn_111.text;
end

не вижу тут никаких проблем. Не оптимально - да, но про оптимальность мы договориль позабыть на время.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#79: 2007-07-02 12:06:30 ЛС | профиль | цитата
Dilma писал(а):
зачем мне это?

Затем, чтобы не делать дополнительный функциональный вызов в Run-Time
Про эффективность - не договаривались.
Более того, именно про нее я и говорю... Все время
А не про синтаксические фокусы языков.

Кстати, разница class/object - тоже разница в эффективности
И это имеет прямые аналоги для CPP
Если ты в полях класса будешь писать с типом PSDK_XXX для статических контейнеров, то обязан будешь устанавливать их через New(TSDK_XXX).
Мое предложение как раз имеет тот аналог для CPP, чтобы писать с типом TSDK_XXX.
И по той же самой причине: доступ к самой глубокой вложенности разрешается в Design-Time

[size=-2]------ Добавлено в 12:06
Вот скажем как мне представляется, должен выглядеть код для frm.sha
code_1618.txt

1) Так отсутствие вызова метода Create - это эффективность, а не стилистический бзик
2) То о чем я говорил про видимость, это результат размышлений от необходимости сотворить with
3) Всякие SetSize - это и сегодня преодолимо, пожалуй...
карма: 9

0
файлы: 1code_1618.txt [1KB] [459]
Администрация
Ответов: 15295
Рейтинг: 1519
#80: 2007-07-02 12:10:49 ЛС | профиль | цитата
Galkov, доступ к самой глубокой вложенности разрешается. Однако не уверен, что можно вот так просто взять и решить проблему. Это хорошо, когда имеют место простые примеры. А если в качестве Var точки возвращается выражение виде Obj1.prop1 + Obj2.prop2... То либо мы сразу строим данные от корневого контенера: sdk0.sdk1.sdk2.sdk3.Obj1.prop1 либо делаем как надо и начинаем уметь(!) хранить информацию о выражениях в Design-Time и подставлять необходимых парентов для каждого операнда выражения.

Т.е. говорить на тему оптимизации нет желания никакого. Она бесконечна. А довести некоторый пакет до состояния, с которого другие люди смогут начать расширять его - задача вполне конечная. И никак иначе на дальнейшие пути развития в данный момент смотреть не получается.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#81: 2007-07-02 12:18:30 ЛС | профиль | цитата
Dilma писал(а):
либо делаем как надо и начинаем уметь(!) хранить информацию о выражениях в Design-Time и подставлять необходимых парентов для каждого операнда выражения.


"Как надо" - это как
Если так, как "учат" языки программирования, то дальнейшую беседу можно заканчивать.
Потому-что моя цель - эффкетивность кода, и НЕ совпадает с целью языков программирования.
В достаточном количестве случаев.
В этом - конкретно.
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#82: 2007-07-02 12:21:35 ЛС | профиль | цитата
Galkov писал(а):
Вот скажем как мне представляется, должен выглядеть код для frm.sha

тут конечно можно еще поспорить стоит ли так делать. Замена Create прямой вставкой с обвеской всего этого дела блоком With с точки зрения качества - лучше, с точки зрения читаемости и логики - хуже. Не очень как бы объяснимо почему у нас половина корневого SDK в объекте, а половина сразу в теле приложения... Впрочем в любом случае - это желание автора к технологии отношения не имеющее.

[size=-2]------ Добавлено в 12:21
Galkov писал(а):
"Как надо" - это как


Dilma писал(а):
начинаем уметь(!) хранить информацию о выражениях в Design-Time и подставлять необходимых парентов для каждого операнда выражения



Galkov писал(а):
Потому-что моя цель - эффкетивность кода

Можно подумать кто-то голосует за обратное.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#83: 2007-07-02 12:34:55 ЛС | профиль | цитата
Dilma писал(а):
Можно подумать кто-то голосует за обратное.

Да, можно

1) Слепить property для класса с явным ф-ным вызовом - это за обратное. Кстати не надо сильно обольщаться на счет возможностей инлайнинга в CPP: обычно не все они дают туда ставить, не очень это нормированная вещь и у них

2) Сплошь и рядом "читаемость" входит в конфликт с эффективностью.
Не моя же вина, что так языки устроены.
Вот у меня нет никаких сомнений, в какую сторону разрешать этот конфликт.
А если мы говорим вообще о "читаемости" - значит они есть.


Конечно, у меня нет сегодня законченного решения как правильно это делать...
Однако это затрагивает именно CG - именно он формиреут сегодня наши нумерованные имена.
И это уж точно вопрос для размышления.
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#84: 2007-07-02 12:43:43 ЛС | профиль | цитата
Galkov, чесное слово - все и сразу бывает только в сказке и обязательно по щучьему велению. Слепить property это не голосование за обратное, а как я уже не раз сказал, голосование за приемлемость временного интервала, в течение которого будет выпущен более менее готовый продукт, от которого станет возможно пустить две независимые ветки - разработка элементной базы и вторая - оптимизацию и расширение ф-ла CG. Странно даже объяснять это.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#85: 2007-07-02 13:07:03 ЛС | профиль | цитата
Дык говорил бы, что "да, надо подумать" - и вопроса не было бы: да, согласен, надо именно подумать
А то рассказываешь: надо делать так. И знаешь ведь, что я тоже знаю, что так сделать можно.

Вот так "разночтения" и возникают

[size=-2]------ Добавлено в 13:07
Про "сразу" - еще как знаю, естественно...

Это я сейчас тестирую: а умеем мы уже слепить какой-нибудь феномен с прозрачностью
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#86: 2007-07-02 13:18:31 ЛС | профиль | цитата
Galkov писал(а):
Дык говорил бы, что "да, надо подумать" - и вопроса не было бы

ну так это само сабой разумеющееся На данный момент вот возникла еще одна проблемка:

Add(Button,3453642,126,182)
{
Left=125
Top=180
Data=String(sss)
link(onClick,447347:doEvent1,[])
}
Add(Hub,447347,182,182)
{
OutCount=3
link(onEvent1,5039431:doMessage,[])
link(onEvent2,10516220:doMessage,[(230,195)(230,237)])
link(onEvent3,14203500:doMessage,[(230,202)(230,286)])
}
Add(Message,5039431,245,182)
{
}
Add(Message,10516220,245,231)
{
}
Add(Message,14203500,245,280)
{
}

получим примерно такой код:
  Message('sss');
  Message('sss');
Message('sss');
все хорошо вроде бы... а если на входе хаба (a + b)*(c + d) Правильно - ерунду получим:
  Message((a + b)*(c + d));
  Message((a + b)*(c + d));
Message((a + b)*(c + d));
для GCC это не проблема - он за нас сохранит результат выражения где-то и конечный код будет оптимальным. Однако на счет Delphi не поручись. Скриптовые языки почти наверняка ничего никуда не вынесут.
Тоже между прочим решается за два прохода. Так что накапливаем проблемы, а решать будем все скопом уже потом.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#87: 2007-07-02 13:37:44 ЛС | профиль | цитата
собственно, мне казалось, что должны получить:
  Message(double2str((a + b)*(c + d)));[/code]
Если тот, кто формировал результат(данные типа code) правильно поставил subType.
А вот почему в direct.inc/_toCode проверяется subType, без проверки data_type=data_code - это для меня вопрос, сегодня...
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#88: 2007-07-02 13:49:47 ЛС | профиль | цитата
Galkov писал(а):
собственно, мне казалось, что должны получить:

это был пример для пакета Delphi2. Однако суть проблемы является общей и не зависит от пакета. Поэтому это частности уже.

Galkov писал(а):
А вот почему в direct.inc/_toCode проверяется subType, без проверки data_type=data_code - это для меня вопрос, сегодня...

можно проверять, а можно и нет. SubType = 0 для всех типов отличных от data_code. Обратное является ошибкой. Поэтому по большому счету проверка бессмыслена.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#89: 2007-07-02 14:23:47 ЛС | профиль | цитата
Dilma писал(а):
SubType = 0 для всех типов отличных от data_code

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

Дык тут я еще подолью соли на рану

Есть фундаментальная вещь в языке: атрибут volatile
Так вот: в CPP он есть, а в Дельфях его нет по определению.
Если какая-то переменная имеет этот атрибут, это означает, что нельзя использовать логику: там хранится то, чего именно ты записал (или прочитал) оттуда ранее. Например, это значение может изменить параллельный поток, или еще какая ерунда.

Если в вышеприведенном выражении хоть одна такая, не имеет право, к примеру - HUB, произвести такие вычисления, и отправить по всем веткам результат.
Кстати говоря, наличие (или нет) такого понятия - volatile, в языке, серьезно определяют его возможности "агрессивной" оптимизации
И еще кстати: это нас касается тоже...

Как я на это наступал
Пользовал IAR-овский CPP под embeded.
Main у меня, значит, обнулил некий флаговый регистр и ждет в цикле появления каких-то там битиков (которые установят прерывания, прописанные в другом совсем файле, да и на другом языке - asm-е).
Ну и пустой Main мне компилировался - dead-code-elimination
Пока не прописал сей знаменитый атрибут этому флаговому регистру.
С тех пор я про это знаю.
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#90: 2007-07-02 14:52:55 ЛС | профиль | цитата
про volatile знаю. При разработке многопоточных приложений приходится вспоменать постоянно На счет хаба - наверно судя по его логике сохранение в промежуточной переменной имеет смысл в любом случае.
карма: 27
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)