vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Интересно, что количество бит в самом большом целочисленном типе, поддерживаемом современными компиляторами (int128_t), уже сравнялось с максимальным значением самого маленького (signed char).

Это к вопросу о том, как интерпретировать x << -1.

Мне пришли в голову две «естественные» интерпретации:

1. x << -1 = x >> 1.
2. x << -1 = x<< ((usigned что-то)-1) = x << 255 или x << 65535 и так далее.

В обоих случаях 1 << -1 = 0.

Но не все компиляторы с этим согласны. (понятно что по стандарту это undefined behavoir).

Date: 2016-04-05 09:57 am (UTC)
From: [identity profile] nathoo.livejournal.com
Ммм, вспомнил, что уже читал что-то Ваше на тему рулезности хождения строем простого и читаемого кода. Собственно, нет причин для спора.
Однако, мне действительно интересно, где в современном мире могут быть всерьез нужны фокусы с булевой арифметикой ? Навскидку приходят в голову только IP адреса и маски, потому что, на сколько я понимаю, сейчас даже контроллер осещения в "умном доме" тупо дешевле сделать на x64, под линуксом и, соответственно, с полным набором языков высокого уровня.

BTW, мб вспомним фидошные времена и перейдем на ты ?

Date: 2016-04-05 11:13 am (UTC)
From: [identity profile] qkowlew.livejournal.com
Дело не в простом и читаемом коде.
Даже самый простой и читаемый код может оказаться неработоспособным просто из-за того, что входящие данные незаметно сменили кодировку "на низком уровне".

фокусы с булевой арифметикой
...
тупо дешевле сделать на x64, под линуксом и, соответственно, с полным набором языков высокого уровня.


То есть НЕ СЛЕДУЕТ ВООБЩЕ употреблять "данных низкого уровня" и обрабтку "низкого уровня" при написании программ (на любом языке, высокого ли уровня или нет - не важно)?

И, конечно же, написанный и откомпилированный сейчас код "на языке высокого уровня" никогда не нарвётся на то, что обрабатываемые им данные существенно изменились?

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

Ах, ФИДО? См. bink plus и необходимость добавить 42 в одном месте в календарном расчёте в СТАНДАРТНОЙ библиотеке в 2000 году. Раскопано Киром Злобиным.

Runtime Error в паскалевских (дада, язык высокого уровня!) программах ДОС эпохе при запуске на достаточно быстрых процессорах.

Правда, зачем думать о низком уровне? Давайте писать на высоком и не думать вообще. :)
Edited Date: 2016-04-05 11:16 am (UTC)

Date: 2016-04-05 12:34 pm (UTC)
From: [identity profile] qkowlew.livejournal.com
Проблема в "языке высокого уровня" как раз и состоит в том, что, оставаясь ТОЛЬКО на "высоком уровне", программист не имеет содержательной информации о том, какую библиотеку (из имеющихся вроде бы одинаковых) следует выбрать.

И потому выбирает "сердцем". :)

А клиент потом вынужден отказываться от применения откомпилированной таким образом программы. Или искать к ней патч ещё более низкого уровня (hiew/...), чем ассемблер.

Собственно - так и пришлось в 2000 году патчить кусочек сишной библиотеки в bink+.

Date: 2016-04-05 12:18 pm (UTC)
From: [identity profile] nathoo.livejournal.com
>>тупо дешевле сделать на x64, под линуксом и, соответственно, с полным набором языков высокого уровня.

>То есть НЕ СЛЕДУЕТ ВООБЩЕ употреблять "данных низкого уровня" и обрабтку "низкого уровня" при написании программ (на любом языке, высокого ли уровня или нет - не важно)?

Где я это сказал ?
Я просил привести пример оправданного прменения булевой арифметики в современной программе.

> Умный дом? С автоапдейтящимися прошивками в железках, ога. Спасибо. Через 5 лет, после смены таймзоны и апдейта прошивки под оную смену (например) - что будете делать (реальный случай - размер буфера под выдаваемой некоторой прошивкой текстовое представление времени оказался недостаточен при изменении наименования таймзоны, в результате - атака по переполнению стека и креш системы)? А что будет делать клиент, если автор программы "высокого уровня" в одном из контроллеров успел помереть?

В моем случае, клиент будет лежать в гробу, глубоко безразличный к проблеме, тк умный дом он строит для себя сам. :-)
В стандартном - свяжется с саппортом, или (если это будет очень умный клиент :-) соберет нужную прошивку сам из открытых исходников.
Вообще, мне кажется, термин прошивка не совсем применим к современным устройствам. Правильнее говорить про ОС и прикладной софт. Соответственно, нормальный процесс исправления ошибок в прикладном софте. Как вариант - зайти на контроллер ssh-м и обновить соответствующий пакет.

Но как это все связано с изначальным разговором про булеву арифметику, мне не очень понятно.

> Правда, зачем думать о низком уровне? Давайте писать на высоком и не думать вообще. :)
Ну, как бы, да. Мир к тому идет. В частности, Вашими усилиями. Нет ?
Edited Date: 2016-04-05 12:20 pm (UTC)

Date: 2016-04-05 12:38 pm (UTC)
From: [identity profile] qkowlew.livejournal.com
оправданного прменения булевой арифметики в современной программе.

Почти любая реализация видеокодеков.
Содержательная обработка данных с конкретного железа.
При соответствующе документированном протоколе.
Edited Date: 2016-04-05 12:39 pm (UTC)

Date: 2016-04-05 12:41 pm (UTC)
From: [identity profile] nathoo.livejournal.com
Спасибо.
По дороге сам вспомнил про криптографию :-)

Date: 2016-04-05 03:10 pm (UTC)
From: [identity profile] besm6.livejournal.com
Во, я как раз хотел сказать.

Компактные сетевые протоколы с быстрым парсингом, кстати. Типа CBOR. Она там примитивная, но есть, и обеспечивает компактность.

Когда данных надо передать МНОГО, компактность протокола ой, важна...

Date: 2016-04-05 03:33 pm (UTC)
From: [identity profile] qkowlew.livejournal.com
Если уж вспоминать про ФИДО - то лично я в своём тоссере ФИДО почты ВСЕ таблицы подписки линков на эхи храню побитно.

AreaLink[area_off] |= here_mask1;
AreaLink[area_off] &= here_mask0;
area_off - понятное дело, адрес байта. :)

Date: 2016-04-05 03:30 pm (UTC)
From: [identity profile] slobin.livejournal.com
Справедливости ради: не путаем "низкий (битовый) уровень" и "неопределённое поведение". Хотя, будем честны, спутать легко: и там, и там проблема на практике в том, что не слишком внимательный программист может просто не обратить внимание, что оно (2) не определено или (1) определено, но не так, как он наивно надеялся. Случай с 42 относился именно к "определено, но никто не прочитал определения".

И, кстати, конкретно эта засада единственно правильным способом не засажена в языке Ада (да-да, том самом): там есть ДВЕ операции `mod` и `rem`. Если их две, то ты невольно задумаешься, какая именно из них нужна. А если у тебя только `%`, который совпадает с одной из них, причём не с той -- вопрос имеет куда более высокие шансы быть проигнорированным.

... Маркс, Кейнс и кот Матроскин ...

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1 23 4 56 7
89 1011 12 13 14
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 16th, 2025 12:13 pm
Powered by Dreamwidth Studios