Страница 1 из 1

Даешь атомарность в условных операциях

Добавлено: 07 мар 2016, 14:57
SirYorik
такая конструкция
1397247.jpg
приводит вот к такому коду


Код: Выделить всё

if ((_gtv2) == (777)) {
_gtv4 = 1;
}
if ((_gtv2) == (777)) {
_gtv5 = 3;
}
if ((_gtv2) == (777)) {
_gtv6 = 2;
}
а очень хотелось бы такой:



Код: Выделить всё

if ((_gtv2) == (777)) {
_gtv4 = 1;
_gtv5 = 3;
_gtv6 = 2;
}

Даешь атомарность в условных операциях

Добавлено: 08 мар 2016, 23:29
dekorator
В чем подвох? Компактность кода?

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 00:08
krom23
А не по балабэске как это будет выглядеть на С, главное чтоб контроллер делал то что от него хотим. Может я что-то недопонимаю, поясните?

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 00:17
dekorator
Если от этого не страдает быстродействие и размер кода, то думаю без разницы. А если наоборот то надо исправлять.

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 01:02
krom23
dekorator писал(а):Если от этого не страдает быстродействие и размер кода, то думаю без разницы. А если наоборот то надо исправлять.
Я думаю что то, что мы видим в С проходя компилятор имеет совсем другой вид, главное что бы компилятор правильно интерпретировал эти бессмысленные закорючки, чёрточки и буковки Изображение .

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 01:25
dekorator
krom23 писал(а):Я думаю что то, что мы видим в С проходя компилятор имеет совсем другой вид
Абсолютно с Вами согласен. Но этот как Вы выразились " другой вид " в итоге имеет конечный размер и занимает место которое не безгранично. Под выражением " правильно интерпретировал " Вы конечно имели виду искусственный интеллект встроенный в компилятор, который правит чёрточки и буковки и не обращает внимания на то как пишется код? Изображение
До чего дошел прогресс!!! Изображение

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 01:44
krom23
dekorator писал(а):Вы конечно имели виду искусственный интеллект встроенный в компилятор, который правит чёрточки и буковки и не обращает внимания на то как пишется код?
Ага Изображение !

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 02:09
dekorator
Прошу, только не говорите никому. А то ведь как начнут писать.
Что будет..... Изображение

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 07:23
SirYorik
krom23 писал(а):что мы видим в С проходя компилятор имеет совсем другой вид,
- а если будет не А Б и Ц а 8-10 изменяемых параметров ?
- а если хоть один из параметров фигурирует в "некое условие" с алгоритмом случится плохое
- само условие может быть очень длинным, на полкилометра за пределы экрана, и эта строка будет вычисляться каждый раз

простенький пример

[spoiler=Спойлер]

Код: Выделить всё

if(( ((_gtv10) < (7)) && (( ((_gtv3) == (2)) || ((_gtv3) == (1)) )) && (_gtv18) && ((_gtv5) > (_gtv38)) && (((_gtv4)/(21)) == (0)) )) {_tim3O = 1; _tim3I = 1;} else { if(_tim3I) {_tim3I = 0; _tim3P = millis();} else { if (_tim3O) {if ( _isTimer(_tim3P, 10000)) _tim3O = 0;}}}
if (( ((_gtv10) < (7)) && (( ((_gtv3) == (2)) || ((_gtv3) == (1)) )) && (_gtv18) && ((_gtv5) > (_gtv38)) && (((_gtv4)/(21)) == (0)) )) {
_gtv3 = 0;
}
if (( ((_gtv10) < (7)) && (( ((_gtv3) == (2)) || ((_gtv3) == (1)) )) && (_gtv18) && ((_gtv5) > (_gtv38)) && (((_gtv4)/(21)) == (0)) )) {
_gtv19 = 0;
}
if (( ((_gtv10) < (7)) && (( ((_gtv3) == (2)) || ((_gtv3) == (1)) )) && (_gtv18) && ((_gtv5) > (_gtv38)) && (((_gtv4)/(21)) == (0)) )) {
_gtv7 = 0;
}
if (( ((_gtv10) < (7)) && (( ((_gtv3) == (2)) || ((_gtv3) == (1)) )) && (_gtv18) && ((_gtv5) > (_gtv38)) && (((_gtv4)/(21)) == (0)) )) {
_gtv8 = 0;
}
if (( ((_gtv10) < (7)) && (( ((_gtv3) == (2)) || ((_gtv3) == (1)) )) && (_gtv18) && ((_gtv5) > (_gtv38)) && (((_gtv4)/(21)) == (0)) )) {
_gtv4 = 0;
}
if (( ((_gtv10) < (7)) && (( ((_gtv3) == (2)) || ((_gtv3) == (1)) )) && (_gtv18) && ((_gtv5) > (_gtv38)) && (((_gtv4)/(21)) == (0)) )) {
_gtv24 = 1;
}
if (( ((_gtv10) < (7)) && (( ((_gtv3) == (2)) || ((_gtv3) == (1)) )) && (_gtv18) && ((_gtv5) > (_gtv38)) && (((_gtv4)/(21)) == (0)) )) {
_gtv18 = 0;
}
_gtv32 = _tim3O;
[/spoiler]

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 22:15
krom23
SirYorik писал(а):простенький пример
Вы раскрыли мне глаза! Поддерживаю предложение.

Даешь атомарность в условных операциях

Добавлено: 10 мар 2016, 23:45
dekorator
Урааа. Уверен, теперь всё будет хорошо!!

Даешь атомарность в условных операциях

Добавлено: 11 мар 2016, 00:43
support
Вы хотите аттомарности, так сделайте её.
Возмём Ваш первый пример:
Изображение
смотрим код

Код: Выделить всё

if ((_gtv1) == (777)) {
_gtv2 = 1;
}
if ((_gtv1) == (777)) {
_gtv3 = 2;
}
if ((_gtv1) == (777)) {
_gtv4 = 3;
}
Немного модернизируем.
Изображение
Смотрим код.

Код: Выделить всё

_gtv5 = (_gtv1) == (777);
if (_gtv5) {
_gtv2 = 1;
}
if (_gtv5) {
_gtv3 = 2;
}
if (_gtv5) {
_gtv4 = 3;
}
 Вроде то что Вы хотели.
Для того что бы это реализовать автоматически, мне придётся создавать переменные для всех логических элементов и, блоков сравнения и математики. Мне кажется это не очень хорошо. Зачем тратить лишнюю память. Просто когда Вы делаете какие - то сложные расчеты, или много логики и потом используете их в нескольких местах - применяйте промежуточные переменные при завершении расчётов. А уже  потом используйте эти переменные  в нескольких местах. Мне кажется такой вариант экономичнее

Даешь атомарность в условных операциях

Добавлено: 11 мар 2016, 01:11
dekorator
В итоге два лишних оператора - if . Почти получилось.

Даешь атомарность в условных операциях

Добавлено: 11 мар 2016, 01:13
support
Идеала в реальной жизни не бывает Изображение

Даешь атомарность в условных операциях

Добавлено: 11 мар 2016, 01:19
dekorator
Согласен на все 100!
Думаю лучше не трогать то что уже работает.

Даешь атомарность в условных операциях

Добавлено: 11 мар 2016, 09:32
Naladchik
dekorator, лучшее - враг хорошего.
Если гнаться за оптимизацией на таком уровне, то лучше сразу на СИ уходить.

Даешь атомарность в условных операциях

Добавлено: 11 мар 2016, 11:26
dekorator
"Кац предлагает сдаться" :)

- Плох тот солдат, который не мечтает стать генералом!

Даешь атомарность в условных операциях

Добавлено: 11 мар 2016, 19:53
Naladchik
dekorator писал(а):"Кац предлагает сдаться" :)
"Не надо ремонтировать работающий механизм" - прапорщик автобата.

Даешь атомарность в условных операциях

Добавлено: 13 мар 2016, 12:28
SirYorik
>то что уже работает.
скорее НЕ работает. теперешний подход постоянный источник багов. это факт.

>Вы хотите аттомарности, так сделайте её. ......  применяйте промежуточные переменные
этот workaround мне известен.
но это костыль.
усложняющий схему.
и багоисточник.
и как раз он расходует память.
и строго говоря атомарностью не считается.(потому что контроль за уникальностью переменной Запись отдан на откуп программисту.(лично я могу представить фантастический пример модификации переменной выходом блока работающего на внешних прерываниях))
тут можеть всплыть надежда на оптимизирующий компилятор Си, зря, имхо.


>много логики и потом используете их в нескольких местах - применяйте промежуточные переменные
в Этом случае безусловно да.
но мой пример НЕ ЭТОТ случай.
заостряю здесь внимание.
постоянно используются локальные разовые сравнения влияющие более чем на 2 объекта.
это важно особенно в философии FLprog: в условиях наличия абстракции
"плата", loop(), отсутствии независимых от программиста
семафоров-мутексов, отсутствии ожидающих и итерирующих инструментов,
сейчас ключевой подход применяемый всеми - использование самодельных
флагов, машины состояний, режимов, и т.д. и т.п. синонимов.  в больших
программах количество этого "флагового" стаффа уже не удерживается
вниманием, значит надо закрывать этот вопрос на уровне компилятора.


>Для того что бы это реализовать автоматически, мне придётся
сильно переделать компилятор в Си.
не спорю. но дело того стоит. реально.
на фоне неясной мотивации сложно за это браться.

главная метафора: логический провод(булеан)  соединяющий один выход и много
входов нужно отображать в Си не переменной а блоком {}.

Добавлено (13.03.2016, 12:28)
---------------------------------------------
вот кстати, программа будет расти, и некоторые вещи, типа внешнего вида Сишного кода, стоит выпрямить на ранних этапах.