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

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
Ответить
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04 окт 2015, 10:01
Откуда: Томск

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

Сообщение 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;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06 сен 2015, 09:39
Откуда: Баку

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

Сообщение dekorator »

В чем подвох? Компактность кода?
krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06 сен 2015, 15:18
Откуда: Калуга
Имя: Андрей

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

Сообщение krom23 »

А не по балабэске как это будет выглядеть на С, главное чтоб контроллер делал то что от него хотим. Может я что-то недопонимаю, поясните?
Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06 сен 2015, 09:39
Откуда: Баку

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

Сообщение dekorator »

Если от этого не страдает быстродействие и размер кода, то думаю без разницы. А если наоборот то надо исправлять.
krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06 сен 2015, 15:18
Откуда: Калуга
Имя: Андрей

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

Сообщение krom23 »

dekorator писал(а):Если от этого не страдает быстродействие и размер кода, то думаю без разницы. А если наоборот то надо исправлять.
Я думаю что то, что мы видим в С проходя компилятор имеет совсем другой вид, главное что бы компилятор правильно интерпретировал эти бессмысленные закорючки, чёрточки и буковки Изображение .
Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06 сен 2015, 09:39
Откуда: Баку

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

Сообщение dekorator »

krom23 писал(а):Я думаю что то, что мы видим в С проходя компилятор имеет совсем другой вид
Абсолютно с Вами согласен. Но этот как Вы выразились " другой вид " в итоге имеет конечный размер и занимает место которое не безгранично. Под выражением " правильно интерпретировал " Вы конечно имели виду искусственный интеллект встроенный в компилятор, который правит чёрточки и буковки и не обращает внимания на то как пишется код? Изображение
До чего дошел прогресс!!! Изображение
krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06 сен 2015, 15:18
Откуда: Калуга
Имя: Андрей

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

Сообщение krom23 »

dekorator писал(а):Вы конечно имели виду искусственный интеллект встроенный в компилятор, который правит чёрточки и буковки и не обращает внимания на то как пишется код?
Ага Изображение !
Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06 сен 2015, 09:39
Откуда: Баку

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

Сообщение dekorator »

Прошу, только не говорите никому. А то ведь как начнут писать.
Что будет..... Изображение
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04 окт 2015, 10:01
Откуда: Томск

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

Сообщение 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]
Последний раз редактировалось SirYorik 10 мар 2016, 08:37, всего редактировалось 1 раз.
krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06 сен 2015, 15:18
Откуда: Калуга
Имя: Андрей

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

Сообщение krom23 »

SirYorik писал(а):простенький пример
Вы раскрыли мне глаза! Поддерживаю предложение.
Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06 сен 2015, 09:39
Откуда: Баку

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

Сообщение dekorator »

Урааа. Уверен, теперь всё будет хорошо!!
Аватара пользователя
support
Супермодератор
Сообщения: 1917
Зарегистрирован: 03 янв 2018, 11:45
Откуда: Астрахань
Имя: Сергей
Поблагодарили: 23 раза
Контактная информация:

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

Сообщение 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;
}
 Вроде то что Вы хотели.
Для того что бы это реализовать автоматически, мне придётся создавать переменные для всех логических элементов и, блоков сравнения и математики. Мне кажется это не очень хорошо. Зачем тратить лишнюю память. Просто когда Вы делаете какие - то сложные расчеты, или много логики и потом используете их в нескольких местах - применяйте промежуточные переменные при завершении расчётов. А уже  потом используйте эти переменные  в нескольких местах. Мне кажется такой вариант экономичнее
Автор программы FLProg.
Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06 сен 2015, 09:39
Откуда: Баку

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

Сообщение dekorator »

В итоге два лишних оператора - if . Почти получилось.
Аватара пользователя
support
Супермодератор
Сообщения: 1917
Зарегистрирован: 03 янв 2018, 11:45
Откуда: Астрахань
Имя: Сергей
Поблагодарили: 23 раза
Контактная информация:

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

Сообщение support »

Идеала в реальной жизни не бывает Изображение
Автор программы FLProg.
Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06 сен 2015, 09:39
Откуда: Баку

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

Сообщение dekorator »

Согласен на все 100!
Думаю лучше не трогать то что уже работает.
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

dekorator, лучшее - враг хорошего.
Если гнаться за оптимизацией на таком уровне, то лучше сразу на СИ уходить.
Последний раз редактировалось Naladchik 11 мар 2016, 09:33, всего редактировалось 1 раз.
Win10-64. FLProg Portable.
Изображение
Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06 сен 2015, 09:39
Откуда: Баку

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

Сообщение dekorator »

"Кац предлагает сдаться" :)

- Плох тот солдат, который не мечтает стать генералом!
Последний раз редактировалось dekorator 11 мар 2016, 11:36, всего редактировалось 1 раз.
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

dekorator писал(а):"Кац предлагает сдаться" :)
"Не надо ремонтировать работающий механизм" - прапорщик автобата.
Последний раз редактировалось Naladchik 11 мар 2016, 19:53, всего редактировалось 1 раз.
Win10-64. FLProg Portable.
Изображение
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04 окт 2015, 10:01
Откуда: Томск

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

Сообщение SirYorik »

>то что уже работает.
скорее НЕ работает. теперешний подход постоянный источник багов. это факт.

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


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


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

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

Добавлено (13.03.2016, 12:28)
---------------------------------------------
вот кстати, программа будет расти, и некоторые вещи, типа внешнего вида Сишного кода, стоит выпрямить на ранних этапах.
Последний раз редактировалось SirYorik 13 мар 2016, 12:22, всего редактировалось 1 раз.
Ответить

Вернуться в «Новые»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей