Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Коллеги. Давайте на не повышать градус эмоций. Об недостатках алгебры инкрементов писал еще старый пьяница и музыкант профессор Николай Вирт(ов). Что тут еще добавить. Лучше давайте формализуем такие формы которые требуют гарантии эквивалентного преобразования в форму без использования оных стрёмных операций. Если разработчик умеет и делает трансформацию этого кода Код: plaintext 1. в код без пост-икремента, и преобразование - строго однозначно то проблемы - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:32 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Копировать из одной строки в другую... на одном и том же указателе... это жестко Я всегда был противником ссылок. Ровно из-за того, что код становится совершенно не читабельным. Кто в здравом уме, может подумать, что в конструкции вида: *str1++ = *str2++; str1 и str2 это даже не просто указатель на одну и ту же строку. А вообще, один и тот же указатель, но пропихнутый в код через ссылку. Взрыв мозга. Но это проблема не компилятора, это проблема цвета волос. Предлагаю просто запретить программистам быть блондинками, красить волосы в светлые тона, делать меллирование. Естественным блондинкам от рождения, конечно, за счет фирмы придется оплатить черную краску и услуги хорошего салона. Должно помочь. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:39 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Мартин Фаулер ввёл хороший термин. Код с "душком". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:46 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
maytonstr1[i++] = str2[i++]; А этот код имеет какой нибудь прикладной смысл? "копирование одной строки в другую через символ. Без проверки, что в строке может быть нечетное кол-во символов"? Я лично бы написал просто (для тупо копирования): Код: sql 1. 2. код (копирование через один символ) Код: sql 1. 2. 3. конечно тоже имеет право на жизнь, но зато сразу видно, что проверка на неожиданное окончания строки отстутствует. Смысл лепить все в одну строку - не вижу вообще. Когда все в одной строке, такие выражения значительно сложнее отлаживать IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:48 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Кстати да. Дебаггер видит это как 1 степ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:50 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Чуваки, еще раз говорю - данный код пишется не намеренно, а в результате бага. Соответственно прикладного смысла в нем нет, и переписать его тоже нельзя - сначала его надо найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:54 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЧуваки, еще раз говорю - данный код пишется не намеренно, а в результате бага. Соответственно прикладного смысла в нем нет, и переписать его тоже нельзя - сначала его надо найти.но если такой стиль узаконить, то найти баг будет ещё сложнее, не? P.S. Возможно, выходом было бы, действительно, уход от UB, но с варнингом, по возможности. Так будут и овцы целы, и волки сыты, кмк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 14:58 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Найти в одной строке кода два инкремента. Далее - по обстановке. Остановить compile/build. Выдать варнинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:01 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
maytonКоллеги. Давайте на не повышать градус эмоций. Об недостатках алгебры инкрементов писал еще старый пьяница и музыкант профессор Николай Вирт(ов). Что тут еще добавить. Ну и как он кончил ? Плохо он кончил -- паскаль написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:05 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
maytonМартин Фаулер ввёл хороший термин. Код с "душком". Но этот код (strcpy) БЕЗ душка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:07 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
MasterZivmaytonМартин Фаулер ввёл хороший термин. Код с "душком". Но этот код (strcpy) БЕЗ душка. Хех... ну ладно. Укусил . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:12 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Действительно, K&R приводят в пример функцию Код: plaintext 1. 2. 3. 4. K&R p. 104Приращение s и t здесь осуществляется в управляющей части цикла. Значением *t++ является символ, на который указывает переменная t перед тем, как ее значение будет увеличено; постфиксный оператор ++ не изменяет указатель t, пока не будет взят символ, на который он указывает. То же в отношении s: сначала символ запомнится в позиции, на которую указывает старое значение s, и лишь после этого значение переменной s увеличится. Пересылаемый символ является одновременно и значением, которое сравнивается с '\0' . В итоге копируются все символы, включая и заключительный символ '\0'. Предлагаю рассмотреть такой участок кода: Код: plaintext 1. 2. 3. 4. 5. Понятно что в обоих случаях, мы ничего хорошего не получим. Собственно потому в стандарте, в прототипе функции мы можем видеть restrict-квалификаторы ISO/IEC 9899:201x7.24.2.3 The strcpy function Synopsis 1 Код: plaintext 1. 2. 3. Description 2 The strcpy function copies the string pointed to by s2 (including the terminating null character) into the array pointed to by s1. If copying takes place between objects that overlap, the behavior is undefined. Returns 3 The strcpy function returns the value of s1. По коду Код: plaintext 1. 2. 3. 4. если бы нам сказали, что не должно быть UB, хоть ты тресни, я подумал ещё немного. Возможно стоит вести себя так-же как в примере выше, и на выходе мы получим 00 (знаю что недавно исключил такой вариант). Вообщем у меня такой вопрос, зачем нужен такой код, какая от него практическая выгода ? Думаю что особой выгоды нет, и мы просто пытаемся решить вопрос о том, что было бы если бы мы вводили закон касаемо такого поведения. У меня нет аргументов ни за, ни против того, что такой закон нужен. Приведите их пожалуйста :) Basil A. Sidorov Программирование всё больше и больше становится производством кода. На любом производстве есть правила техники безопасности, которые могут мешать и мешают эффективному производству. Почему вы так считаете ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:59 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
SashaMercuryBasil A. Sidorov Программирование всё больше и больше становится производством кода. На любом производстве есть правила техники безопасности, которые могут мешать и мешают эффективному производству. Почему вы так считаете ? По факту так и есть. Производство. Я каждый день делаю code review десятков а то и сотен строк кода. И если-бы не механизмы FindBug, Cobertura, JUnit, Mockito я-бы просто потонул. Автоматизация проверки кода гарантирует хотя-бы отсутствие ляпов и неоднозначностей подобно пост-инкрементам. По поводу движения двух указателей в strcpy я не имею ничего против. Но при этом я оглядываюсь на прото-ассемблерную семантику "C". Этот исходник написан в "духе" C и соответствует правильным трендам. В Java подобный код я не пропущу. Заверну на доработку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:06 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
А, к чему я рассуждал про strcmp то. К тому, что и Илья и Анатолий в данном споре оба правы, потому что один видимо говорил про то что эта функция полностью корректна подразумевая ограничения наложенные на входные параметры, а второй рассмотрел общий случай данного кода :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:10 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
maytonВ Java подобный код я не пропущу. Заверну на доработку. У меня правила жестче. Я джаву целиком заворачиваю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:15 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyУ меня правила жестче. Я джаву целиком заворачиваю Почему-то это мне напомнило М.Булгакова "Новый способ распространения книг" В книжном складе не было ни одного покупателя, и приказчики уныло стояли за прилавками. Звякнул звоночек, и появился гражданин с рыжей бородой веером. Он сказал: — Драсьте… — Чем могу служить? — обрадованно спросил его приказчик. — Нам бы гражданина Лермонтова сочинение,— сказал гражданин, легонько икнув. — Полное собрание прикажете? Гражданин подумал и ответил: — Полное. Пудиков на пятнадцать-двадцать. У приказчика встали волосы дыбом. — Помилте, оно и всё-то весит фунтов пять, не более! — Нам известно,— ответил гражданин,— постоянно его покупаем. Заверните экземплярчиков пятьдесят. Пущай ваши мальчики вынесут, у меня тут ломовик дожидается. Приказчик брызнул по деревянной лестнице вверх и с самой крайней полки доложил почтительно: — К сожалению, всего пять экземпляров осталось. — Экая жалость,— огорчился покупатель.— Ну давайте хучь пять. Тогда, милый человек, соорудите мне ещё «Всемирную историю». — Сколько экземпляров? — радостно спросил приказчик. — Да отвесь полсотенки… — Экземплярчиков? — Пудиков. Все приказчики вылезли из книжных нор, и сам заведующий подал покупателю стул. Приказчики забегали по лестницам, как матросы по реям. — Вася! Полка 15-а. Скидай «Всемирную», всю как есть. Не прикажете ли в переплётах? Папка, тиснённая золотом… — Не требуется,— ответил покупатель.— Нам переплёты ни к чему. Нам главное, чтоб бумага была скверная. Приказчики опять ошалели. — Ежели скверная,— нашёлся наконец один из них,— тогда могу предложить сочинения Пушкина и издание Наркомзема. — Пушкина не потребуется,— ответил гражданин,— он с картинками, картинки твёрдые. А Наркомзема заверни пудов пять на пробу. Через некоторое время полки опустели, и сам заведующий вежливо выписывал покупателю чек. Мальчики, кряхтя, выносили на улицу книжные пачки. Покупатель заплатил шуршащими белыми червонцами и сказал: — До приятного свидания. — Позвольте узнать,— почтительно спросил заведующий,— вы, вероятно, представитель крупного склада? — Крупного,— ответил с достоинством покупатель,— селёдками торгуем. Наше вам. И удалился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:38 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Раньше делал так, даже на более сложных выражениях - работало. И в C# работало. Код: plaintext 1. 2. 3. 4. 5. Результат 01 Но уже давно не делаю, потому что если позже сделать copy/paste кода и редактировать, можно по ошибке два раза в строке сделать i++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 18:00 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyСоответственно прикладного смысла в нем нет, и переписать его тоже нельзя - сначала его надо найти.Ну, допустим пробьют стену головой - нет, типа, накладных расходов. Завтра напишут код без инкрементов и получат "изменившееся поведение". Найти ошибку тоже будет нельзя, т.к. не зная места ошибки невозможно сказать: из-за UB она или из-за незнания хитровывернутых мест стандарта. Что принципиального меняется в поиске места ошибки? Чем поможет то, что теперь ошибка одинакова на всех системах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 19:53 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevв чем сакральный смысл записи "i,i++" ?Ни в чём. Просто пример, что выёживаться можно по разному. Можно? Да. Нужно? Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 21:32 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Есть, кстати, ещё один, хотя и (пока) абстрактный довод против "доопределения побочных эффектов". Без побочных эффектов, код вида: Код: sql 1. допускает параллельное вычисление, что (потенциально) позволяет компилятору генерить более быстрый код. Если "доопределять UB", то правила параллельной кодогенерации станут сложнее. Возникнут те самые накладные расходы, которых "раньше не было". P.S. Пример, разумеется, тупой и, вероятно, без доп.усилий будет обработан суперскалярным конвейером более-менее современных процессоров, но общий посыл от этого не меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 21:55 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryпропущено... Почему вы так считаете ? По факту так и есть. Производство. Я каждый день делаю code review десятков а то и сотен строк кода. И если-бы не механизмы FindBug, Cobertura, JUnit, Mockito я-бы просто потонул. Автоматизация проверки кода гарантирует хотя-бы отсутствие ляпов и неоднозначностей подобно пост-инкрементам. По поводу движения двух указателей в strcpy я не имею ничего против. Но при этом я оглядываюсь на прото-ассемблерную семантику "C". Этот исходник написан в "духе" C и соответствует правильным трендам. В Java подобный код я не пропущу. Заверну на доработку. в Java поведение подобного кода будет четко определено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 22:15 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
MasterZivв Java поведение подобного кода будет четко определено.И вы можете подтвердить своё высказывание ссылкой на JLS??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 22:17 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
Test.java Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 22:38 |
|
||
|
Порядок вычисления
|
|||
|---|---|---|---|
|
#18+
в тему забористой травы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext Точнее, не понимаю почему при ассоциативности справа-налево, вычисления идут слева-направо. P.S. Да, не совсем в тему, но всё-таки ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 23:35 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38824281&tid=2018480]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 182ms |

| 0 / 0 |
