Страница 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)
---------------------------------------------
вот
кстати, программа будет расти, и некоторые вещи, типа внешнего вида Сишного кода, стоит выпрямить на ранних этапах.