Здравствуйте, The Lex, Вы писали:
TL>Не вопрос! Выносим 19 и 91 в хедер, а вместе с ними — и еще 93 сопуствующие константы, которые все называем красивыми символическими именами. TL>И в коде путаем не 19 и 91, а символические имена. TL>Таки разница!
Таки да, разница — опечататься и набить в коде HASH_OFFSET вместо MAX_REPEAT_COUNT несколько сложнее, чем 91 вместо 19.
TL>Нормальные компиляторы в курсе, что "вьюноши с горящими глазами" частенько лажают и путают оператор присваивания с оператором эквивалентности в местах, где логично ожидать таки оператор эквивалентности. Рестрикта там нет. Более того, старый добрый "сишный стиль" повсеместно использует присваивание вместе с проверкой в одном и том же выражении.
Ну дык в том и вопрос, нафига он нужен — такой стиль-то? Минусы, которые он приносит, видны невооруженным глазом, плюсы же [лично мне] мягко говоря неочевидны. Нет, ну то есть я могу предположить, что это играло какую-то роль в те далекие времена, когда компьютеры были большими, а компиляторы неоптимизирующими — но сейчас-то зачем?
1. Совершенно не обращают внимания на смайлик в заголовке темы...
2. Совершенно не обращают внимания (то есть, смотрят в текст, а видят ФИГУ) на то, что означенный пример с винграда. LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.
Тут же сделали выводы о квалификации меня и моих студентов — заклеймили типа абсолютных неучей...
Могу в ответ только посочувствовать сослуживцам и начальникам таких программеров...
3. Совершенно не обращают внимания, что писал начинающий... То есть — СОВСЕМ начинающий, первый раз изучающий программирование (незнакомый мне первокурсник, фиг знает, с какого города)...
Если вы ездить еще не умеете, а вам сразу болид формулы — 1 в руки — и вперед!
А рядом стоит кто-нить и утверждает, что вы тупой, поскольку не можете ехать...
Короче, я под столом...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, CreatorCray, Вы писали:
CC>С макросами в основном Сшники сношаются. CC>В С++ эквилибристика на макросах используется крайне редко, бо есть более удобные средства генерации кода.
Я постоянно пользуюсь. В основном для максимального уменьшения вероятности описок в очень похожих строчках кода.
МС>> а в сочетании с препроцессором иногда очень трудно сказать, что же ты конкретно навключал. CC>Для особо тяжких случаев есть /showIncludes
В особо тяжком случае я нахально проставил #error message в местах между #ifdef-ами и отладил таким образом компиляцию.
МС>>Хотя бы то, что при неосторожном обращении получаем полное копирование на каждый чих. CC>А можно пример? А то что то у меня не придумывается что надо с ними делать чтоб на каждый чих копировалось. В C# стиле писать что ли.
Я что-то пропустил: а в паскале строки не копируются? Там встроенные счетчики обращений есть?
МС>> А проблема стандартных сишных строк относится скорее к проблеме сишных массивов как таковых, а это потеря размерности при передаче в другую функцию вследствие приведения к указателю. CC>Честно говоря не сильно помню когда мне приходилось использовать массивы кроме как временного буфера для вызова Сшных функций, который за пределы небольшого scope никуда не выходил. CC>Всё больше контейнеры и обёртки.
Угу. Я, например, вот только сегодня нашел (в смыле: свежая статистика — опыт-то старый, не умеют давно... никогда не умели...), что "контейнерами и обертками" никак не умеют пользоваться "выросшие на контейнерах и обертках программисты" и хак — (char*)std_string_value.c_str() — для передачи строки в качестве буфера — "нормальное" дело.
Здравствуйте, MescalitoPeyot, Вы писали:
MP>А теперь попробуй перепутать знаки в !=. Шо, не получается? Shift мешает? Ну так и о чем речь, проблема высосана из пальца.
Конкретный пример — да, но вообще присваивание и сравнение перепутать имхо довольно несложно. Особенно если программист не чистый сишник, а пишет параллельно на нескольких языках.
Здравствуйте, LaptevVV, Вы писали:
LVV>Тут тебе и базы данных (+курсовая), и SQL Server (+курсовая), и программирование компьютерной графики, и операционные системы, и системное программирование (и все на С++) и еще много... LVV>А четвертый курс — это NET-программирование — годовой курс, и опять курсовая. LVV>Так что учим мы — на совесть.
Не с целью как-то усомниться в последнем предложении, но просто из интереса, что сейчас проходят, входит ли в программу обучение написанию компиляторов и правильному составлению собственных языков для предметной области? Это я помимо прочего намекаю на парадигму LOP — Language Oriented Programming
Здравствуйте, The Lex, Вы писали:
TL> Очевидно, товарищу начинающему программисту про дебаггеры и прочие излишества всякие нехорошие рассказать забыли.
Мне кажется, что для начинающего программиста дебаггеры — зло и им надо категорически запретить ими пользоваться. В том числе, чтобы учились подобные ошибки выявлять тестами и внимательным чтением кода.
Здравствуйте, LaptevVV, Вы писали:
LVV>3. Совершенно не обращают внимания, что писал начинающий... То есть — СОВСЕМ начинающий, первый раз изучающий программирование (незнакомый мне первокурсник, фиг знает, с какого города)...
Причем либо японец, либо индус, либо носитель еще какого языка, в котором отрицание ставится после отрицаемого слова.
В русском все же "не равно" транслируется буквально в "!=", если знать, что "!" — это "не" (что "=" — это "равно", надеюсь, все абитуры знают... ну большинство, хотя бы...)
Здравствуйте, The Lex, Вы писали:
CC>>С макросами в основном Сшники сношаются. CC>>В С++ эквилибристика на макросах используется крайне редко, бо есть более удобные средства генерации кода. TL>Я постоянно пользуюсь. В основном для максимального уменьшения вероятности описок в очень похожих строчках кода.
А можно пример для оценки насколько твои макросы нетривиальны.
Тривиальные отлаживать особо гемору нет.
МС>>> а в сочетании с препроцессором иногда очень трудно сказать, что же ты конкретно навключал. CC>>Для особо тяжких случаев есть /showIncludes TL>В особо тяжком случае я нахально проставил #error message в местах между #ifdef-ами и отладил таким образом компиляцию.
МС>>>Хотя бы то, что при неосторожном обращении получаем полное копирование на каждый чих. CC>>А можно пример? А то что то у меня не придумывается что надо с ними делать чтоб на каждый чих копировалось. В C# стиле писать что ли. TL>Я что-то пропустил: а в паскале строки не копируются? Там встроенные счетчики обращений есть?
Без понятия что там на данный момент с паскалем, но у меня строки копируются как правило если они меняются или передаются куда то на более долговременное хранение. В остальных случаях идут как & или &&
TL>Угу. Я, например, вот только сегодня нашел (в смыле: свежая статистика — опыт-то старый, не умеют давно... никогда не умели...), что "контейнерами и обертками" никак не умеют пользоваться "выросшие на контейнерах и обертках программисты" и хак — (char*)std_string_value.c_str() — для передачи строки в качестве буфера — "нормальное" дело.
У меня правильные контейнеры. В них у строки есть метод .str() который возвращает WCHAR* спецом для получения строк из winapi и прочих C функций.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, The Lex, Вы писали:
TL>Здравствуйте, alpha21264, Вы писали:
A>>>>С альтернативами пока плохо. A>>>>Но это не отменяет того факта, что в программировании накопилось дохрена идей, A>>>>(например функциональное программирование) которые в С++ уже не впихнешь.
TL>>>А нужно впихнуть?
A>>Нуу... было бы полезно.
TL>И шо таки мешает?
Ну например в чистом финкциональном программировании нет разрушающего присваивания.
То есть например i++ написать нельзя.
TL>У меня сейчас серверная часть на питоне (вроде — я кроме бинарных пакетов и чатов с "серверными инженерами" ничего в живом виде не видел) написана. Вот ведь страшная вещь: серверные инженеры отладочный сервер подняли (после 3-недельной переписки с попытками выпытать у меня что же именно у меня не работает, после чего нашелся хороший человек и правильно их пнул и оказалось, что на сервере ничего-то и не поднято вообще ) — а вот релизный теперь не могут. Причем отписаться "сам дурак" тоже не могут: на отладочном все работает. Страшная, видать, сила, этот ваш питон!
Нуу... Ты-ж понимаешь, что тут дело не в питоне. Сдуру можно и такую вещь сломать, которая вроде не ломается.
Здравствуйте, Michael7, Вы писали:
M>Здравствуйте, LaptevVV, Вы писали:
LVV>>Тут тебе и базы данных (+курсовая), и SQL Server (+курсовая), и программирование компьютерной графики, и операционные системы, и системное программирование (и все на С++) и еще много... LVV>>А четвертый курс — это NET-программирование — годовой курс, и опять курсовая. LVV>>Так что учим мы — на совесть.
M>Не с целью как-то усомниться в последнем предложении, но просто из интереса, что сейчас проходят, входит ли в программу обучение написанию компиляторов и правильному составлению собственных языков для предметной области? Это я помимо прочего намекаю на парадигму LOP — Language Oriented Programming
На 3-м курсе есть дисциплина Системное ПО (это помиомо операционных систем). С целью врубить народ в современную реализацию языков, лабы такие: написать интерпретатор виртуальной машины, написать ассемблер для означенной машины, в процессе писания ассемблера — сделать интерпретатор выражений (арифметических и логических), где ознакомление с конечными автоматами и грамматиками. Потом отладчик для означенной машины, потом уж компилятор для простого императивного языка — для означенной машины. Все должно работать и выдавать конкретный результат для совершенно конкретных программ: для виртуальной машины, ассемблер, отладчик и компилятор.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Michael7, Вы писали:
TL>> Очевидно, товарищу начинающему программисту про дебаггеры и прочие излишества всякие нехорошие рассказать забыли.
M>Мне кажется, что для начинающего программиста дебаггеры — зло и им надо категорически запретить ими пользоваться. В том числе, чтобы учились подобные ошибки выявлять тестами и внимательным чтением кода.
Как бы вам сказать... Тяжело в учении — легко в бою! (к) Если его начинать учить "внимательному вычитыванию кода" и только — как он будет "вычитывать" кода строк на полмильйона со всякими сложными "интеркоммуникейшинами"?
Юнит-тест покажет что в данной функции есть ошибка. Это все. Далее правильно бы все же попытаться пройти "фейлящийся" тест под дебагером и посмотреть — чаще всего, просветление наступает. имхо, этому надо учить в том числе — работа у нас такая, разгребать ...
Здравствуйте, CreatorCray, Вы писали:
CC>>>С макросами в основном Сшники сношаются. CC>>>В С++ эквилибристика на макросах используется крайне редко, бо есть более удобные средства генерации кода. TL>>Я постоянно пользуюсь. В основном для максимального уменьшения вероятности описок в очень похожих строчках кода. CC>А можно пример для оценки насколько твои макросы нетривиальны. CC>Тривиальные отлаживать особо гемору нет.
Тривиальны. Для нетривиального сношения специально обученные люди пишут специально навороченные шаблоны. Их у нас тоже есть!
CC>Без понятия что там на данный момент с паскалем, но у меня строки копируются как правило если они меняются или передаются куда то на более долговременное хранение. В остальных случаях идут как & или &&
Меряться так меряться: у меня строки еще и кушают специальный флажок, который означает "строка из ресурсов" и тогда указатель — не указатель, а идентификатор (считай индекс) предустановленной строки из ресурсов.
CC>У меня правильные контейнеры. В них у строки есть метод .str() который возвращает WCHAR* спецом для получения строк из winapi и прочих C функций.
Так в школе ж твои правильные контейнеры не учат.
ЗЫ: А я вот сейчас бодаюсь с особенностями реализации юникода на маке. И хоть бы мне ж тот Мак нужен был — так мне всего-то от сервера полученный utf8 в используемый гуями wchar_t преобразовать. Причем аж (!) в одном месте аж в одной "маркетинговой единице функциональности". Причем остальное вроде работает... Вот _этому_ в школах надо учить — индустриальному подходу и что часто нужно копать и копать. имхо.
Здравствуйте, alpha21264, Вы писали:
A>Ну например в чистом финкциональном программировании нет разрушающего присваивания. A>То есть например i++ написать нельзя.
Надо будет погуглить что за концепция такая "разрушающее присваивание".
TL>>У меня сейчас серверная часть на питоне (вроде — я кроме бинарных пакетов и чатов с "серверными инженерами" ничего в живом виде не видел) написана. Вот ведь страшная вещь: серверные инженеры отладочный сервер подняли (после 3-недельной переписки с попытками выпытать у меня что же именно у меня не работает, после чего нашелся хороший человек и правильно их пнул и оказалось, что на сервере ничего-то и не поднято вообще ) — а вот релизный теперь не могут. Причем отписаться "сам дурак" тоже не могут: на отладочном все работает. Страшная, видать, сила, этот ваш питон!
A>Нуу... Ты-ж понимаешь, что тут дело не в питоне. Сдуру можно и такую вещь сломать, которая вроде не ломается.
Медицина говорит: ломается — есть прецеденты. Мой опыт говорит: сервера тоже ломаются — прецеденты постоянно. Остается убедить в этом а) начальство; б) "другую сторону которая сервером управляет". В целом, второй вопрос не столь трудет — технически. Но это уже менежмент и коммуникации — этому в школе программирования тоже поди не учат.
Здравствуйте, The Lex, Вы писали:
TL>Так в школе ж твои правильные контейнеры не учат.
Дык в школе вообще не учат разработке софта.
TL>ЗЫ: А я вот сейчас бодаюсь с особенностями реализации юникода на маке. И хоть бы мне ж тот Мак нужен был — так мне всего-то от сервера полученный utf8 в используемый гуями wchar_t преобразовать. Причем аж (!) в одном месте аж в одной "маркетинговой единице функциональности". Причем остальное вроде работает... Вот _этому_ в школах надо учить — индустриальному подходу и что часто нужно копать и копать. имхо.
Тебе Utf8->UCS2 функцию подогнать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, The Lex, Вы писали:
TL>Здравствуйте, blackhearted, Вы писали:
B>>ИМХО, проще микро ассемблера вообще ничего нет и ниже тоже мало кто существует.
TL>Есть еще особенности работы современных процессоров: кеширования всякие, предсказания, многопроцессорность опять же, DMA... м-м-м... у меня все.
Я в курсе.
Но тут же затык в самом начале, еще до ДМА как до луны. Какие уж кеширования?
Здравствуйте, The Lex, Вы писали:
TL>Здравствуйте, blackhearted, Вы писали:
LVV>>>Поэтому для начинающих язык С — зло! Причем в сочетании с со студией — зло практически АБСОЛЮТНОЕ!
B>>Студия даже ворнинг не показала? Не верю. B>>А если у вас ребята учатся писать на уровне ниже /W4 игонорируя вывод компилятора — то флаг им в руки.
B>>
Здравствуйте, Michael7, Вы писали:
M>Здравствуйте, The Lex, Вы писали:
TL>> Очевидно, товарищу начинающему программисту про дебаггеры и прочие излишества всякие нехорошие рассказать забыли.
M>Мне кажется, что для начинающего программиста дебаггеры — зло и им надо категорически запретить ими пользоваться. В том числе, чтобы учились подобные ошибки выявлять тестами и внимательным чтением кода.
да, согласен.
Но варнинги нужно читать, а не понижать их уровень, а потом искать тестами/чтением в чём же проблема.
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, LaptevVV, Вы писали:
LVV>>3. Совершенно не обращают внимания, что писал начинающий... То есть — СОВСЕМ начинающий, первый раз изучающий программирование (незнакомый мне первокурсник, фиг знает, с какого города)... J>Причем либо японец, либо индус, либо носитель еще какого языка, в котором отрицание ставится после отрицаемого слова. J>В русском все же "не равно" транслируется буквально в "!=", если знать, что "!" — это "не" (что "=" — это "равно", надеюсь, все абитуры знают... ну большинство, хотя бы...)
В таком случае запись
if (counter =! 0 ) {
значит: "Если счетчик равен не нулю ...", что, на мой взгляд, то же вполне по-русски.