Ага qwone. Согласен на все 100. Возьму/невозьму - не сутьт, суть о подходах к вопросу, я то начотдела разработки поработал, я б тоже не взял :) ИМХО, осознание того что глюконуть может все и ошибка быть везде (свой код, чужой, либы, ОС, компилятор - без разницы) - важнейшая составляющая професианализма работника ИТ. И умение работать с учетом этого необходимо. Считать что учтено все и код будет работать всегда недопустимо.
Мы не взяли друг друга в команды друг друга. Которых правда нет )))
Я бы сказал, победила дружба, так как у меня не было цели убедить человека, что он не прав. Была цель донести до него, что у него в коде мина замедленного действия, с чем он, де факто, согласился )
Кто бы сомневался? Но существуют технологии и методики существенного уменьшения количества ошибок в коде. Причем уже оправдавшие себя десятилетиями опыта.
А в данном случае спор был о вечном:
Есть стандарт (даташит, ТУ) и есть использование недокументированной возможности (функции, частоты, тока). Logik считает использование недокументированых возможностей нормальной практикой. Я нет, так как неоднократно видел отрицательные последствия этого. Вот и все )
Говорите про себя. Я сейчас и на РосСетях и в СУЭК. Разрываюсь между двумя проектами. И там, и там, профессиональных разработчиков не хватает катастрофически. А молодежь, которая приходит, пальцы веером, а сами ноль (
Есть стандарт (даташит, ТУ) и есть использование недокументированной возможности (функции, частоты, тока). Logik считает использование недокументированых возможностей нормальной практикой. Я нет, так как неоднократно видел отрицательные последствия этого. Вот и все )
Блин как в анекдоте
Разговаривают двое приятелей.
«Вот все говорят: «Карузо! Карузо!» А я послушал – так ничего особенного»
– «Вы слышали Карузо?!»
– «Нет. Мне Рабинович напел».
Если бы видели отрицательные последствия у Logik, то тогда да. Программы пишут программисты, и борятся с ошибками тоже программисты. И результат у каждого получается свой. Но не видя работы человека, а так же плачевный результат, и при этом заявлять так котегорично. Это сильно. Тут забегают уникумы, открывают темы : У меня программа не работает. При чем ни текста программы, и что она должна делать не пишут. Может это ваши клиенты. А мы вам работу отбиваем. Программисты- экстрасенсы здесь на форуме очень нужны.
ПС: И все эти "печальные последствия" это бальный распил бюджета и выбить новое финансирование.
какие проблемы? - переманивайте у Гугла, Майкрософт и Епла.
Спасибо, но индусов нам не надо. Уже столько раз в Майкрософт телеги катал на этот индийский код, что только его мне не хватало от своих же программистов )
Если претензии такого же уровня как ко мне, что в будущем их код возможно перестанет работать, то их можете рассылать веером всем, но не забудте себе одну оставить.
Если претензии такого же уровня как ко мне, что в будущем их код возможно перестанет работать, то их можете рассылать веером всем, но не забудте себе одну оставить.
К счастью, руководители в MS явно адекватней Вас и честно инициируют правки таких багов в очередном rollout update. Могут, конечно и год тянуть, редко - полтора. Но заявить, что "и так работает" не пытались ни разу )
Не верите? Просмотрите хотя бы те KB, которые к винде сыпятся. Половина из этой категории - на большинстве конфигураций работали и без исправления )
Вы специалист в распиле бюджета и выбивании финансирования?
К сожелению нет. Но когда в моем городе меняют на главной улице асфальт , причем на тех же местах, то не думаю, что это связано с конфликтом в коде этого самого асфальта при обновлении.
На мой взгляд, весьма опытного человека, нет абсолютной истины. Ни в каком вопросе.
Использовать недокументированную возможность или нет, тоже зависит от контекста.
Если решение не тиражируемое, собирается один раз на конкретном компиляторе для конкретного проекта, то что мешает использовать хоть чОрта лысого?
----
Просто пример будет совсем конкретный и про Вас и про меня и про Логика и про Евгения.
Мы ведь на форуме Ардуино, так? Не Атмела, а Ардуино, так? Поскольку среда поддерживает не только Атмел контроллеры.
Среда нам ничего не говорит про порты контроллера. В рамках Ардуино НЕОБХОДИМО писать digitalWrite(pinxxx, HIGH), а не PORTB |= (1<<pin).
С точки зрения Ардуино - это НЕДОКУМЕНТИРОВАННАЯ возможность, поскольку документация на контроллер не является частью документации среды, так?. Но мы все так пишем и наш код не откомпилируется на Esp8266 или Arm, в рамках Arduino IDE естественно, для поддерживаемых плат.
То есть мы все, и Вы в том числе, поступаем так, как РАЗУМНО, а не так, как положено, по Вашему мнению.
РОВНО таже ситуация с memcpy(). Логик точно знает, что на ЭТОЙ версии среды, для ЭТОГО контроллера - все работает.
Если решение не тиражируемое, собирается один раз на конкретном компиляторе для конкретного проекта, то что мешает использовать хоть чОрта лысого?
Осознание того, что данный код будет еще не раз мигрировать из проекта в проект, да еще и модифицироваться и поддерживаться кем-то другим.
Ну еще рефлекс. Когда вертишь головой влево при повороте направо, даже если поворачиваешь на зеленый цвет )
Цитата:
Среда нам ничего не говорит про порты контроллера. В рамках Ардуино НЕОБХОДИМО писать digitalWrite(pinxxx, HIGH), а не PORTB |= (1<<pin).
Не утрируйте. С точки зрения Ардуино и sprintf() недокументированная функция что ли? )))
Кстати написано неправильно. Вы забыли запретить прерывания до и разрешить их после.
Да, первый код кроссплатформенный. Второй - нет. Но при правильном использовании препроцессора, он успешно будет работать и на ESP, и на ARM.
То есть, я пишу так:
РОВНО таже ситуация с memcpy(). Логик точно знает, что на ЭТОЙ версии среды, для ЭТОГО контроллера - все работает.
Я тоже это знаю. Но буду писать в подобных ситуациях memmove() просто потому, что дополнительных усилий это не требует никаких, на производительность прогаммы почти не повлияет, но зато при миграции этого кода на другой проект и даже на другую платформу, мне лишние баги ловить не потребуется.
ptr! Уже глаза слипаются, но не могу не позанудствовать! ;)
Нет! cli и sei ненужны на Атмеле. Компилятор установку значения порта делает ОДНОЙ командой контроллера, не ДВЕ: чтение и запись, а одна - установка бита, что легко проверяется листингом..
Опять таки - это недокументировано ;););), но факт. Вокруг одной команды Вы, я очень надеюсь!, - скобки из cli и sei ставить не станете?
Нет! cli и sei ненужны на Атмеле. Компилятор установку значения порта делает ОДНОЙ командой контроллера, не ДВЕ: чтение и запись, а одна - установка бита, что легко проверяется листингом..
Легко проверяется. Проверьте, когда номер бита у вас в переменной, а не в константе )
Так то уж да, конечно! ;) Если пин в переменной, то тут компилятор уж целый огород городит.
Но скетч для ардуино и большой проект - разные вещи. Скетч. чаще всего, пишет один человек, и он точно знает, есть ли в его коде прерывания, могущие поменять используемый порт. Если есть - он скобки (cli-sei) поставит, если нет - не поставит. Опять же аппелируя К РАЗУМУ, а не общим правилам. Если же проект пишут несколько человек, я полностью соглашусь - страховка не лишняя.
-----
Хотя тут я вынужден признать, что наша дискуссия - вопрос не профессии, но мировоззрения.
Вы, я пытаюсь гадать :) , вероятно, и весь луч обесточиваете, когда дома лампочку меняете, и, прости господи, ремни безопасности пристегиваете? ;) ;) ;)
Это совсем-совсем не укор! Б..же упаси! Я уважаю Вашу предусмотрительность. Просто это действительно разный взгляд на себя и на мир.
Вы, я пытаюсь гадать :) , вероятно, и весь луч обесточиваете, когда дома лампочку меняете, и, прости господи, ремни безопасности пристегиваете? ;) ;) ;)
Это совсем-совсем не укор! Б..же упаси! Я уважаю Вашу предусмотрительность. Просто это действительно разный взгляд на себя и на мир.
Это, скорее, Вам в укор. Сдав на допуск к ремонту электроустановкок до 1 киловольта, я на такое насмотрелся, что купив кваритиру сразу же там электрику переделал. И да, под напряжением не работаю и другим не даю. С неисправным УЗО или без выравнивания потенциалов ветку не включу тоже.
И с места не тронусь, если пассажир даже на заднем сиденьи не пристегнут. И эта моя привычка уже однажды (лет 15 назад) жизнь дочке спасла. Машина была всмятку (газель в задницу без тормозов), но на дочке - ни царапины.
Так то уж да, конечно! ;) Если пин в переменной, то тут компилятор уж целый огород городит.
Но скетч для ардуино и большой проект - разные вещи. Скетч. чаще всего, пишет один человек, и он точно знает, есть ли в его коде прерывания, могущие поменять используемый порт.
Совершенно уникальный случай. Особенно, в случае сектча, с которым уже точно, хотя бы arduino.h, написанный не Вами, будет включен в Ваш исходник. Ну и написать что-то на C не используя вообще хотя бы GLIBC возможно, но совершенно бессмысленное занятие. Так что пишет не один человек, не льстите себе )
А то получается, что Вы лицемерите. Сами используете чужой код в своем скетче, полагаясь на то, что он написан корректно, а свой код корректно писать не считаете нужным )
Есть множество правил и методик написания кода. Когда используешь какие-то из их, вырабатывается привычка, рефлекс, соблюдать их вне зависимости от того, сколь объемный проект делаешь. Я, кстати, считаю стиль программирования одним из важнейших показателей и по коду оцениваю профессионализм программиста.
Даже в Вашем примере, если "pin" констаната, определяемая на уровне компиляции, я бы ее указал в макроопределении и имя этого макроса было бы заглавными буквами. Потому мне даже в голову не пришло, что у Вас "pin" не локальная переменная.
Спасибо, но индусов нам не надо. Уже столько раз в Майкрософт телеги катал на этот индийский код, что только его мне не хватало от своих же программистов )
отбирайте претендентов по национальному признаку, анализу ДНК и форме черепа - русских, например.
Исходя из того, что один дед у меня русский, другой татарин, одна бабка еврейка, другая гречанка, а сам я вообще родом со Львова, то претензии в национализме не принимаются )
Проблема у индусов не в национальности, а в особенностях их местной школы программирования. Попадались мне хорошие программисты среди индусов. Но их очень мало.
Проблема у индусов не в национальности, а в особенностях их местной школы программирования. Попадались мне хорошие программисты среди индусов. Но их очень мало.
кто тебе нассал в голову байку, что в Майкрософт работают исключительно индусы?
Стыдно не знать классических фильмов и не менее классических фраз. А что до возраста - я с трудом верю, что Вы могли бы дожить до моего возраста с такой манерой общения.
К тому же Logik честно признался, что код писал еще под i8080
Ну заметно менше чем 40лет, но писал и на 580ИК80 и под СP/M и на черта лысого, например на TMS320. Перфокарты не застал к счастью. И как думаете сколько написаного мной, и теми кого я лично знаю, кода нынче востребовано с тех времен. Называю точную цифру - 0. И дело не в его написании, а в задачах которые ставились. Например под ДОС написать часики реального времени, чтоб всегда, в любом приложении время в углу экрана было. Резиденты, INT9, INT13. Уже смешно? Кому щас есть дело до того соберется ли тот код? Я вобще не уверен что он сохранился. Или на DSP модем 2400 )). Этот на асме точно есть - потому что распечатан.
Точно также, и все ваше лет через 20 будет хламом способным только улыбнуть. Соберется ли оно со свежими либами даже проверять не будут. Не теште себя наивными надеждами, нетленка делается из камня)) Поскольку и методы и проблемы тогдашние мы себе даже представить не можем.
ПС. Вписал ща в код itoa, совершенно нестандартную, но неизменную. Вы за такое наверно просто увольняете)))
Стыдно не знать классических фильмов и не менее классических фраз. А что до возраста - я с трудом верю, что Вы могли бы дожить до моего возраста с такой манерой общения.
классических фильмов - "знать"?
стыдно не обладать чувством юмора и свой кретинизм прикрывать вежливостью.
И как думаете сколько написаного мной, и теми кого я лично знаю, кода нынче востребовано с тех времен. Называю точную цифру - 0.
ПС. Вписал ща в код itoa, совершенно нестандартную, но неизменную. Вы за такое наверно просто увольняете)))
Самокритично. У меня так часть кода, начиная с конца 80-х, до сих пор под рукой и востребована. То b-tree обходы и балансировки, то сжатие Хаффманом или LZW, то десятичная арифметика. Ассебмлеры, PL/I, COBOL, Fortran, SAS, Pascal повыкидывал уже. C, Perl и REXX еще храню, так как использую. Последний уже совсем редко. Видимо, все же зависит от того, что и как писалось )
Если буфер под itoa() выделен корректно, то возражений нет. memcpy() и memmove(), кстати тоже not safe. Однако они все управляемы. А вот за gets() точно по башке бы дал )
И как думаете сколько написаного мной, и теми кого я лично знаю, кода нынче востребовано с тех времен. Называю точную цифру - 0.
ПС. Вписал ща в код itoa, совершенно нестандартную, но неизменную. Вы за такое наверно просто увольняете)))
Самокритично. У меня так часть кода, начиная с конца 80-х, до сих пор под рукой и востребована. То b-tree обходы и балансировки, то сжатие Хаффманом или LZW, то десятичная арифметика. Ассебмлеры, PL/I, COBOL, Fortran, SAS, Pascal повыкидывал уже. C, Perl и REXX еще храню, так как использую. Последний уже совсем редко. Видимо, все же зависит от того, что и как писалось )
Если буфер под itoa() выделен корректно, то возражений нет. memcpy() и memmove(), кстати тоже not safe. Однако они все управляемы. А вот за gets() точно по башке бы дал )
P.S. Ой! Про bash забыл. Без него то как?
Так вы Хаффман, с того света или bash писали? Мы тут вобще про свой код. Или Вы их переписывали, улучшали таксказать, вгоняли в стандарт. Шото за 30 лет ИТ сообщество не оценило преимущества полного соответствия стандарту Вашего кода. Вы публикуйте, сравним со свеженькимhttps://github.com/facebook/zstd или не очень свеженьким, но пока пожалуй лучшеньким http://ftp.gnu.org/gnu/gzip/ Все в открытую, все есть. Смысла использовать худшее?
))) memcpy() уже можна! А с itoa() я Вас совсем не понял, функция даже не во всех версиях либ GCC есть, онож не соберется. Это непоследовательно!
Но в принципе матметоды - самая консервативная часть, но и там либки обновляются и держать старе смысла нет, хотяб потому что выходят новые процы и оптимизация под них - не лишнее дело.
Молодой человек ставит диагноз на расстоянии? Может быть, Вам осчастливить человечество, нехорошо зарывать ТАКОЙ талант в землю. И классических фильмов - именно "знать", видимо я просмотрел Ваш, несомненно более удачный вариант, либо вы его написали шрифтом белого цвета.
Не понял вопроса. Хаффман имеет целую пачку модификаций. У меня болтается Vitter и чистый. Причем только для Vitter несколько вариантов с разной структурой деревьев. От плоской в массивах до связываемой указателями. Хаффман вообще очень сильно зависит от того, какие данные сжимаются. Порой выгодней не больше 7-15 слов в словаре держать, инициализируя дерево на 8-ом (16) новом слове.
bash это вообще то язык. И скриптов на нем у меня не мало уже накопилось.
Цитата:
Мы тут вобще про свой код. Или Вы их переписывали, улучшали таксказать, вгоняли в стандарт.
И я про свой. Что я должен был переписывать? Когда я первый раз Хаффманом на Синклере файлы на дискетте жал, я про GZIP и не слышал еше )
Цитата:
А с itoa() я Вас совсем не понял, функция даже не во всех версиях либ GCC есть, онож не соберется. Это непоследовательно!
Жаль что Вы столь... непонятливы. Мне казалось, что Вы несколько умнее. Я тут столько писал именно про безопасность и надежность кода. А до Вас дошло только что-то про стандарт и документированность. Отсутствие функции в бибилиотеке будет выявлено еще до выполнения. Скорее всего, на этапе компиляции. В крайнем случае, на этапе компоновки. То есть, на работоспособность исполняемого кода и на возникновение в программе трудноуловимых ошибок не повлияет вообще. Никак.
Цитата:
потому что выходят новые процы и оптимизация под них - не лишнее дело.
А мне оно надо? Математические алгоритмы GCC и LLVM уже сейчас умеют оптимизировать не хуже человека. Это уже как на счетах Excel проверять получиться )
Перфокарты не застал к счастью. И как думаете сколько написаного мной, и теми кого я лично знаю, кода нынче востребовано с тех времен. Называю точную цифру - 0.
Точно также, и все ваше лет через 20 будет хламом способным только улыбнуть.
Говорим за себя.
Из того, что я писал и вводил а свое время с перфокарт, кое-что работает до сих пор. А это уже далеко не 20 лет.
Естественно, не для ПК. Впрочем, на ПК перфокарт никогда и не было. Даже для CP/M.
Вы, ptr, немного не из того окна на ситуацию смотрите.
Я ведь полностью с Вами соглашусь, что учить нужно безопасному коду, по принципу "Делай хорошо, а плохо - оно само получится".
Вот сравнение - ученика водить машину учат четко по правилам.
НО!!! Опытный водитель обязан учитывать более широкие возможности, не только ради самого нарушения, но и для реакции на нарушения других.
Если человек не умеет управлять автомобилем без тормозов, на лысой резине, без печки и света, и на льду, то он, конечно, водитель, но не очень профессиональный, согласитесь? А уметь это все, соблюдая правила - НЕВОЗМОЖНО.
Нельзя понять, почему не стоит использовать gets(), пока сам не ломал или твой сервер не ломали через известную дыру в этой функции.
=================================
Но дискуссия наша - между старыми дядьками, я еще с БК-0010 начинал, а Вы с Синклера, как я понимаю.
Мы все в другой весовой категории, и слышать менторские нотки - смешно. Ученику своему я бы сказал так же, как и Вы.
Не отказывайте старому алкоголику в праве верить в свой опыт и в возможность отличить ситуацию где, условно говоря, "нужно пристегиваться" и где нет.
Если человек не умеет управлять автомобилем без тормозов, на лысой резине, без печки и света, и на льду, то он, конечно, водитель, но не очень профессиональный, согласитесь? А уметь это все, соблюдая правила - НЕВОЗМОЖНО.
Не соглашусь. Когда лет 15 назад ходил на курсы по безопасному вождению, на льду и в снегу многое отрабатывали нисколько не нарушая ПДД. Но без тормозов я на дорогу не выеду. И без света в темное время суток тоже. Не хочу быть убийцей.
Было бы желание и возможности, я бы продолжил и летом на автодроме. Тоже не нарушая ПДД.
До сих пор, каждую осень, как только приморозит, выезжаю на пустую площадку за городом и вспоминаю, когда машину несет, куда несет, и как ловить сцепление с дорогой. Просто потому, что за лето рефлексы теряются.
Ну и Ваша оценка профессиональности водителя не по тому, в каком состоянии у него автомобиль и как часто он попадает в ДТП и получает письма счастья, а по тому, как он умеет управлять автомобилем, доведенным до состояния металлолома, мне не понятна.
Может быть у нас разные понятия о профессионализме водителя? Я так считаю профессионализмом, когда водитель за согласованное время может в целости и сохранности доставить груз и пассажиров из пункта А в пункт Б. Ведь именно в этом заключаются его профессиональные обязанности. Не правда ли?
P.S. Первым компьютером, который я сам собрал, был Синклер. Но еще до этого удалось попрограммировать на Наири-2 и Наири-К
qwone,
да ладно Вам. У людей спор перешёл в философскую фазу, не сбивайте их, давайте лучше последим - интересно же! :)
Ага qwone. Согласен на все 100. Возьму/невозьму - не сутьт, суть о подходах к вопросу, я то начотдела разработки поработал, я б тоже не взял :) ИМХО, осознание того что глюконуть может все и ошибка быть везде (свой код, чужой, либы, ОС, компилятор - без разницы) - важнейшая составляющая професианализма работника ИТ. И умение работать с учетом этого необходимо. Считать что учтено все и код будет работать всегда недопустимо.
Так, господа, не подслушивать молча ))))
ПС. Как исчез эсэсовец, хоть поговорить можна, а то б нам ща доказывали что на STM таких проблем нет ))
qwone,
да ладно Вам. У людей спор перешёл в философскую фазу, не сбивайте их, давайте лучше последим - интересно же! :)
в беспредел приглашается профессиональный комментатор-рефери.
а, то я не пойму, какой счёт.
1:1
Мы не взяли друг друга в команды друг друга. Которых правда нет )))
1:1
Мы не взяли друг друга в команды друг друга. Которых правда нет )))
Я бы сказал, победила дружба, так как у меня не было цели убедить человека, что он не прав. Была цель донести до него, что у него в коде мина замедленного действия, с чем он, де факто, согласился )
Абсолютного надежного кода не существует.
Кто бы сомневался? Но существуют технологии и методики существенного уменьшения количества ошибок в коде. Причем уже оправдавшие себя десятилетиями опыта.
А в данном случае спор был о вечном:
Есть стандарт (даташит, ТУ) и есть использование недокументированной возможности (функции, частоты, тока). Logik считает использование недокументированых возможностей нормальной практикой. Я нет, так как неоднократно видел отрицательные последствия этого. Вот и все )
Которых правда нет )))
Говорите про себя. Я сейчас и на РосСетях и в СУЭК. Разрываюсь между двумя проектами. И там, и там, профессиональных разработчиков не хватает катастрофически. А молодежь, которая приходит, пальцы веером, а сами ноль (
Если есть желание ко мне в команду - присылайте резюме: https://hh.ru/employer/622121
Я сейчас и на РосСетях и в СУЭК. Разрываюсь между двумя проектами. И там, и там, профессиональных разработчиков не хватает катастрофически.
какие проблемы? - переманивайте у Гугла, Майкрософт и Епла.
Блин как в анекдоте
Если бы видели отрицательные последствия у Logik, то тогда да. Программы пишут программисты, и борятся с ошибками тоже программисты. И результат у каждого получается свой. Но не видя работы человека, а так же плачевный результат, и при этом заявлять так котегорично. Это сильно. Тут забегают уникумы, открывают темы : У меня программа не работает. При чем ни текста программы, и что она должна делать не пишут. Может это ваши клиенты. А мы вам работу отбиваем. Программисты- экстрасенсы здесь на форуме очень нужны.
ПС: И все эти "печальные последствия" это бальный распил бюджета и выбить новое финансирование.
Если бы видели отрицательные последствия у Logik, то тогда да.
Logik в своем коде использовал недокументированную особенность функции memcpy(), что, кстати, сам признает. Что еще Вам надо?
какие проблемы? - переманивайте у Гугла, Майкрософт и Епла.
Спасибо, но индусов нам не надо. Уже столько раз в Майкрософт телеги катал на этот индийский код, что только его мне не хватало от своих же программистов )
Если претензии такого же уровня как ко мне, что в будущем их код возможно перестанет работать, то их можете рассылать веером всем, но не забудте себе одну оставить.
Если претензии такого же уровня как ко мне, что в будущем их код возможно перестанет работать, то их можете рассылать веером всем, но не забудте себе одну оставить.
К счастью, руководители в MS явно адекватней Вас и честно инициируют правки таких багов в очередном rollout update. Могут, конечно и год тянуть, редко - полтора. Но заявить, что "и так работает" не пытались ни разу )
Не верите? Просмотрите хотя бы те KB, которые к винде сыпятся. Половина из этой категории - на большинстве конфигураций работали и без исправления )
ПС: И все эти "печальные последствия" это бальный распил бюджета и выбить новое финансирование.
Вы специалист в распиле бюджета и выбивании финансирования?
Вы специалист в распиле бюджета и выбивании финансирования?
К сожелению нет. Но когда в моем городе меняют на главной улице асфальт , причем на тех же местах, то не думаю, что это связано с конфликтом в коде этого самого асфальта при обновлении.
Вы специалист в распиле бюджета и выбивании финансирования?
К сожелению нет.
В таком случае, не лучше ли воздержаться от высказываний типа как в посте №60?
ptr, уважаемый, я вот что заметить хочу:
На мой взгляд, весьма опытного человека, нет абсолютной истины. Ни в каком вопросе.
Использовать недокументированную возможность или нет, тоже зависит от контекста.
Если решение не тиражируемое, собирается один раз на конкретном компиляторе для конкретного проекта, то что мешает использовать хоть чОрта лысого?
----
Просто пример будет совсем конкретный и про Вас и про меня и про Логика и про Евгения.
Мы ведь на форуме Ардуино, так? Не Атмела, а Ардуино, так? Поскольку среда поддерживает не только Атмел контроллеры.
Среда нам ничего не говорит про порты контроллера. В рамках Ардуино НЕОБХОДИМО писать digitalWrite(pinxxx, HIGH), а не PORTB |= (1<<pin).
С точки зрения Ардуино - это НЕДОКУМЕНТИРОВАННАЯ возможность, поскольку документация на контроллер не является частью документации среды, так?. Но мы все так пишем и наш код не откомпилируется на Esp8266 или Arm, в рамках Arduino IDE естественно, для поддерживаемых плат.
То есть мы все, и Вы в том числе, поступаем так, как РАЗУМНО, а не так, как положено, по Вашему мнению.
РОВНО таже ситуация с memcpy(). Логик точно знает, что на ЭТОЙ версии среды, для ЭТОГО контроллера - все работает.
Если решение не тиражируемое, собирается один раз на конкретном компиляторе для конкретного проекта, то что мешает использовать хоть чОрта лысого?
Осознание того, что данный код будет еще не раз мигрировать из проекта в проект, да еще и модифицироваться и поддерживаться кем-то другим.
Ну еще рефлекс. Когда вертишь головой влево при повороте направо, даже если поворачиваешь на зеленый цвет )
Среда нам ничего не говорит про порты контроллера. В рамках Ардуино НЕОБХОДИМО писать digitalWrite(pinxxx, HIGH), а не PORTB |= (1<<pin).
Не утрируйте. С точки зрения Ардуино и sprintf() недокументированная функция что ли? )))
Кстати написано неправильно. Вы забыли запретить прерывания до и разрешить их после.
Да, первый код кроссплатформенный. Второй - нет. Но при правильном использовании препроцессора, он успешно будет работать и на ESP, и на ARM.
То есть, я пишу так:
РОВНО таже ситуация с memcpy(). Логик точно знает, что на ЭТОЙ версии среды, для ЭТОГО контроллера - все работает.
Я тоже это знаю. Но буду писать в подобных ситуациях memmove() просто потому, что дополнительных усилий это не требует никаких, на производительность прогаммы почти не повлияет, но зато при миграции этого кода на другой проект и даже на другую платформу, мне лишние баги ловить не потребуется.
К тому же Logik честно признался, что код писал еще под i8080: "Что работает последние 40 лет, лучше не трогать" http://arduino.ru/forum/programmirovanie/mnogourovnevoe-menyu-dlya-arduino-i-strokovogo-zhk-displeya-16x2#comment-225203
40 лет назад, в 1976 году, других микропроцессоров просто не было.
ptr! Уже глаза слипаются, но не могу не позанудствовать! ;)
Нет! cli и sei ненужны на Атмеле. Компилятор установку значения порта делает ОДНОЙ командой контроллера, не ДВЕ: чтение и запись, а одна - установка бита, что легко проверяется листингом..
Опять таки - это недокументировано ;););), но факт. Вокруг одной команды Вы, я очень надеюсь!, - скобки из cli и sei ставить не станете?
Уж простите зануду...
Нет! cli и sei ненужны на Атмеле. Компилятор установку значения порта делает ОДНОЙ командой контроллера, не ДВЕ: чтение и запись, а одна - установка бита, что легко проверяется листингом..
Легко проверяется. Проверьте, когда номер бита у вас в переменной, а не в константе )
Абсолютного надежного кода не существует.
Ваши сведения устарели. Закон Брукса уж две недели как отменён, так что теперь такой код вполне возможен :)))
ptr!
Так то уж да, конечно! ;) Если пин в переменной, то тут компилятор уж целый огород городит.
Но скетч для ардуино и большой проект - разные вещи. Скетч. чаще всего, пишет один человек, и он точно знает, есть ли в его коде прерывания, могущие поменять используемый порт. Если есть - он скобки (cli-sei) поставит, если нет - не поставит. Опять же аппелируя К РАЗУМУ, а не общим правилам. Если же проект пишут несколько человек, я полностью соглашусь - страховка не лишняя.
-----
Хотя тут я вынужден признать, что наша дискуссия - вопрос не профессии, но мировоззрения.
Вы, я пытаюсь гадать :) , вероятно, и весь луч обесточиваете, когда дома лампочку меняете, и, прости господи, ремни безопасности пристегиваете? ;) ;) ;)
Это совсем-совсем не укор! Б..же упаси! Я уважаю Вашу предусмотрительность. Просто это действительно разный взгляд на себя и на мир.
Вы, я пытаюсь гадать :) , вероятно, и весь луч обесточиваете, когда дома лампочку меняете, и, прости господи, ремни безопасности пристегиваете? ;) ;) ;)
Это совсем-совсем не укор! Б..же упаси! Я уважаю Вашу предусмотрительность. Просто это действительно разный взгляд на себя и на мир.
Это, скорее, Вам в укор. Сдав на допуск к ремонту электроустановкок до 1 киловольта, я на такое насмотрелся, что купив кваритиру сразу же там электрику переделал. И да, под напряжением не работаю и другим не даю. С неисправным УЗО или без выравнивания потенциалов ветку не включу тоже.
И с места не тронусь, если пассажир даже на заднем сиденьи не пристегнут. И эта моя привычка уже однажды (лет 15 назад) жизнь дочке спасла. Машина была всмятку (газель в задницу без тормозов), но на дочке - ни царапины.
ptr!
Так то уж да, конечно! ;) Если пин в переменной, то тут компилятор уж целый огород городит.
Но скетч для ардуино и большой проект - разные вещи. Скетч. чаще всего, пишет один человек, и он точно знает, есть ли в его коде прерывания, могущие поменять используемый порт.
Совершенно уникальный случай. Особенно, в случае сектча, с которым уже точно, хотя бы arduino.h, написанный не Вами, будет включен в Ваш исходник. Ну и написать что-то на C не используя вообще хотя бы GLIBC возможно, но совершенно бессмысленное занятие. Так что пишет не один человек, не льстите себе )
А то получается, что Вы лицемерите. Сами используете чужой код в своем скетче, полагаясь на то, что он написан корректно, а свой код корректно писать не считаете нужным )
Есть множество правил и методик написания кода. Когда используешь какие-то из их, вырабатывается привычка, рефлекс, соблюдать их вне зависимости от того, сколь объемный проект делаешь. Я, кстати, считаю стиль программирования одним из важнейших показателей и по коду оцениваю профессионализм программиста.
Даже в Вашем примере, если "pin" констаната, определяемая на уровне компиляции, я бы ее указал в макроопределении и имя этого макроса было бы заглавными буквами. Потому мне даже в голову не пришло, что у Вас "pin" не локальная переменная.
Спасибо, но индусов нам не надо. Уже столько раз в Майкрософт телеги катал на этот индийский код, что только его мне не хватало от своих же программистов )
отбирайте претендентов по национальному признаку, анализу ДНК и форме черепа - русских, например.
Исходя из того, что один дед у меня русский, другой татарин, одна бабка еврейка, другая гречанка, а сам я вообще родом со Львова, то претензии в национализме не принимаются )
Проблема у индусов не в национальности, а в особенностях их местной школы программирования. Попадались мне хорошие программисты среди индусов. Но их очень мало.
Проблема у индусов не в национальности, а в особенностях их местной школы программирования. Попадались мне хорошие программисты среди индусов. Но их очень мало.
кто тебе нассал в голову байку, что в Майкрософт работают исключительно индусы?
кто тебе нассал в голову байку, что в Майкрософт работают исключительно индусы?
Детка, когда научишься вежливо общаться и извинишься - я тебе отвечу.
кто тебе нассал в голову байку, что в Майкрософт работают исключительно индусы?
Детка, когда научишься вежливо общаться и извинишься - я тебе отвечу.
какой смысл с тобой вежливо общаться, если ты слился с ответа по существу и перевёл тему на индусов в Майкрософт.
а, у Эпла и Гугла почему не желаешь переманивать профессионалов в солнечный Сургут?
какой смысл с тобой вежливо общаться
Не научился, детка. Неучем остаешься )
какой смысл с тобой вежливо общаться
Не научился, детка. Неучем остаешься )
про индусов в Эпле и Гугле давай, потерпевший от дефицита прохфесаналов.
Выбирайте-ка выражения, молодой человек. А когда вы общаетесь с
Выбирайте-ка выражения, молодой человек.
пля. ещё один телепат-воспитатель - если я молодой, то тебе триста лет.
драку заказывали?
Стыдно не знать классических фильмов и не менее классических фраз. А что до возраста - я с трудом верю, что Вы могли бы дожить до моего возраста с такой манерой общения.
К тому же Logik честно признался, что код писал еще под i8080
Ну заметно менше чем 40лет, но писал и на 580ИК80 и под СP/M и на черта лысого, например на TMS320. Перфокарты не застал к счастью. И как думаете сколько написаного мной, и теми кого я лично знаю, кода нынче востребовано с тех времен. Называю точную цифру - 0. И дело не в его написании, а в задачах которые ставились. Например под ДОС написать часики реального времени, чтоб всегда, в любом приложении время в углу экрана было. Резиденты, INT9, INT13. Уже смешно? Кому щас есть дело до того соберется ли тот код? Я вобще не уверен что он сохранился. Или на DSP модем 2400 )). Этот на асме точно есть - потому что распечатан.
Точно также, и все ваше лет через 20 будет хламом способным только улыбнуть. Соберется ли оно со свежими либами даже проверять не будут. Не теште себя наивными надеждами, нетленка делается из камня)) Поскольку и методы и проблемы тогдашние мы себе даже представить не можем.
ПС. Вписал ща в код itoa, совершенно нестандартную, но неизменную. Вы за такое наверно просто увольняете)))
Стыдно не знать классических фильмов и не менее классических фраз. А что до возраста - я с трудом верю, что Вы могли бы дожить до моего возраста с такой манерой общения.
классических фильмов - "знать"?
стыдно не обладать чувством юмора и свой кретинизм прикрывать вежливостью.
И как думаете сколько написаного мной, и теми кого я лично знаю, кода нынче востребовано с тех времен. Называю точную цифру - 0.
ПС. Вписал ща в код itoa, совершенно нестандартную, но неизменную. Вы за такое наверно просто увольняете)))
Самокритично. У меня так часть кода, начиная с конца 80-х, до сих пор под рукой и востребована. То b-tree обходы и балансировки, то сжатие Хаффманом или LZW, то десятичная арифметика. Ассебмлеры, PL/I, COBOL, Fortran, SAS, Pascal повыкидывал уже. C, Perl и REXX еще храню, так как использую. Последний уже совсем редко. Видимо, все же зависит от того, что и как писалось )
Если буфер под itoa() выделен корректно, то возражений нет. memcpy() и memmove(), кстати тоже not safe. Однако они все управляемы. А вот за gets() точно по башке бы дал )
P.S. Ой! Про bash забыл. Без него то как?
И как думаете сколько написаного мной, и теми кого я лично знаю, кода нынче востребовано с тех времен. Называю точную цифру - 0.
ПС. Вписал ща в код itoa, совершенно нестандартную, но неизменную. Вы за такое наверно просто увольняете)))
Самокритично. У меня так часть кода, начиная с конца 80-х, до сих пор под рукой и востребована. То b-tree обходы и балансировки, то сжатие Хаффманом или LZW, то десятичная арифметика. Ассебмлеры, PL/I, COBOL, Fortran, SAS, Pascal повыкидывал уже. C, Perl и REXX еще храню, так как использую. Последний уже совсем редко. Видимо, все же зависит от того, что и как писалось )
Если буфер под itoa() выделен корректно, то возражений нет. memcpy() и memmove(), кстати тоже not safe. Однако они все управляемы. А вот за gets() точно по башке бы дал )
P.S. Ой! Про bash забыл. Без него то как?
Так вы Хаффман, с того света или bash писали? Мы тут вобще про свой код. Или Вы их переписывали, улучшали таксказать, вгоняли в стандарт. Шото за 30 лет ИТ сообщество не оценило преимущества полного соответствия стандарту Вашего кода. Вы публикуйте, сравним со свеженьким https://github.com/facebook/zstd или не очень свеженьким, но пока пожалуй лучшеньким http://ftp.gnu.org/gnu/gzip/ Все в открытую, все есть. Смысла использовать худшее?
))) memcpy() уже можна! А с itoa() я Вас совсем не понял, функция даже не во всех версиях либ GCC есть, онож не соберется. Это непоследовательно!
Но в принципе матметоды - самая консервативная часть, но и там либки обновляются и держать старе смысла нет, хотяб потому что выходят новые процы и оптимизация под них - не лишнее дело.
Молодой человек ставит диагноз на расстоянии? Может быть, Вам осчастливить человечество, нехорошо зарывать ТАКОЙ талант в землю. И классических фильмов - именно "знать", видимо я просмотрел Ваш, несомненно более удачный вариант, либо вы его написали шрифтом белого цвета.
Так вы Хаффман, с того света или bash писали?
Не понял вопроса. Хаффман имеет целую пачку модификаций. У меня болтается Vitter и чистый. Причем только для Vitter несколько вариантов с разной структурой деревьев. От плоской в массивах до связываемой указателями. Хаффман вообще очень сильно зависит от того, какие данные сжимаются. Порой выгодней не больше 7-15 слов в словаре держать, инициализируя дерево на 8-ом (16) новом слове.
bash это вообще то язык. И скриптов на нем у меня не мало уже накопилось.
Мы тут вобще про свой код. Или Вы их переписывали, улучшали таксказать, вгоняли в стандарт.
И я про свой. Что я должен был переписывать? Когда я первый раз Хаффманом на Синклере файлы на дискетте жал, я про GZIP и не слышал еше )
А с itoa() я Вас совсем не понял, функция даже не во всех версиях либ GCC есть, онож не соберется. Это непоследовательно!
Жаль что Вы столь... непонятливы. Мне казалось, что Вы несколько умнее. Я тут столько писал именно про безопасность и надежность кода. А до Вас дошло только что-то про стандарт и документированность. Отсутствие функции в бибилиотеке будет выявлено еще до выполнения. Скорее всего, на этапе компиляции. В крайнем случае, на этапе компоновки. То есть, на работоспособность исполняемого кода и на возникновение в программе трудноуловимых ошибок не повлияет вообще. Никак.
потому что выходят новые процы и оптимизация под них - не лишнее дело.
А мне оно надо? Математические алгоритмы GCC и LLVM уже сейчас умеют оптимизировать не хуже человека. Это уже как на счетах Excel проверять получиться )
Перфокарты не застал к счастью. И как думаете сколько написаного мной, и теми кого я лично знаю, кода нынче востребовано с тех времен. Называю точную цифру - 0.
Точно также, и все ваше лет через 20 будет хламом способным только улыбнуть.
Говорим за себя.
Из того, что я писал и вводил а свое время с перфокарт, кое-что работает до сих пор. А это уже далеко не 20 лет.
Естественно, не для ПК. Впрочем, на ПК перфокарт никогда и не было. Даже для CP/M.
Перфокарты не застал к счастью.
Интересное понимание счастья.
Вы, ptr, немного не из того окна на ситуацию смотрите.
Я ведь полностью с Вами соглашусь, что учить нужно безопасному коду, по принципу "Делай хорошо, а плохо - оно само получится".
Вот сравнение - ученика водить машину учат четко по правилам.
НО!!! Опытный водитель обязан учитывать более широкие возможности, не только ради самого нарушения, но и для реакции на нарушения других.
Если человек не умеет управлять автомобилем без тормозов, на лысой резине, без печки и света, и на льду, то он, конечно, водитель, но не очень профессиональный, согласитесь? А уметь это все, соблюдая правила - НЕВОЗМОЖНО.
Нельзя понять, почему не стоит использовать gets(), пока сам не ломал или твой сервер не ломали через известную дыру в этой функции.
=================================
Но дискуссия наша - между старыми дядьками, я еще с БК-0010 начинал, а Вы с Синклера, как я понимаю.
Мы все в другой весовой категории, и слышать менторские нотки - смешно. Ученику своему я бы сказал так же, как и Вы.
Не отказывайте старому алкоголику в праве верить в свой опыт и в возможность отличить ситуацию где, условно говоря, "нужно пристегиваться" и где нет.
Так вы Хаффман, с того света или bash писали?
Не понял вопроса. Хаффман имеет целую пачку модификаций.дело.
О боже! Хаффман - человек. Вот этот - https://ru.wikipedia.org/wiki/Хаффман,_Дэвид
ПС. Слава КПСС - не человек.
О боже! Хаффман - человек. Вот этот - https://ru.wikipedia.org/wiki/Хаффман,_Дэвид
Вы точно трезвы? Или это ваше обычое состояние? Я же писал выше, и Вы даже квотили "сжатие Хаффманом".
Если человек не умеет управлять автомобилем без тормозов, на лысой резине, без печки и света, и на льду, то он, конечно, водитель, но не очень профессиональный, согласитесь? А уметь это все, соблюдая правила - НЕВОЗМОЖНО.
Не соглашусь. Когда лет 15 назад ходил на курсы по безопасному вождению, на льду и в снегу многое отрабатывали нисколько не нарушая ПДД. Но без тормозов я на дорогу не выеду. И без света в темное время суток тоже. Не хочу быть убийцей.
Было бы желание и возможности, я бы продолжил и летом на автодроме. Тоже не нарушая ПДД.
До сих пор, каждую осень, как только приморозит, выезжаю на пустую площадку за городом и вспоминаю, когда машину несет, куда несет, и как ловить сцепление с дорогой. Просто потому, что за лето рефлексы теряются.
Ну и Ваша оценка профессиональности водителя не по тому, в каком состоянии у него автомобиль и как часто он попадает в ДТП и получает письма счастья, а по тому, как он умеет управлять автомобилем, доведенным до состояния металлолома, мне не понятна.
Может быть у нас разные понятия о профессионализме водителя? Я так считаю профессионализмом, когда водитель за согласованное время может в целости и сохранности доставить груз и пассажиров из пункта А в пункт Б. Ведь именно в этом заключаются его профессиональные обязанности. Не правда ли?
P.S. Первым компьютером, который я сам собрал, был Синклер. Но еще до этого удалось попрограммировать на Наири-2 и Наири-К