Re[10]: С - зло... :)
От: Пацак Россия  
Дата: 12.01.11 22:55
Оценка:
Здравствуйте, The Lex, Вы писали:

TL>Не вопрос! Выносим 19 и 91 в хедер, а вместе с ними — и еще 93 сопуствующие константы, которые все называем красивыми символическими именами.

TL>И в коде путаем не 19 и 91, а символические имена.
TL>Таки разница!

Таки да, разница — опечататься и набить в коде HASH_OFFSET вместо MAX_REPEAT_COUNT несколько сложнее, чем 91 вместо 19.

TL>Нормальные компиляторы в курсе, что "вьюноши с горящими глазами" частенько лажают и путают оператор присваивания с оператором эквивалентности в местах, где логично ожидать таки оператор эквивалентности. Рестрикта там нет. Более того, старый добрый "сишный стиль" повсеместно использует присваивание вместе с проверкой в одном и том же выражении.


Ну дык в том и вопрос, нафига он нужен — такой стиль-то? Минусы, которые он приносит, видны невооруженным глазом, плюсы же [лично мне] мягко говоря неочевидны. Нет, ну то есть я могу предположить, что это играло какую-то роль в те далекие времена, когда компьютеры были большими, а компиляторы неоптимизирующими — но сейчас-то зачем?
Ку...
Re: Я - фигею со здешнего народа! :)
От: LaptevVV Россия  
Дата: 12.01.11 22:56
Оценка: +2
1. Совершенно не обращают внимания на смайлик в заголовке темы...
2. Совершенно не обращают внимания (то есть, смотрят в текст, а видят ФИГУ) на то, что означенный пример с винграда.
LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.
Тут же сделали выводы о квалификации меня и моих студентов — заклеймили типа абсолютных неучей...
Могу в ответ только посочувствовать сослуживцам и начальникам таких программеров...
3. Совершенно не обращают внимания, что писал начинающий... То есть — СОВСЕМ начинающий, первый раз изучающий программирование (незнакомый мне первокурсник, фиг знает, с какого города)...
Если вы ездить еще не умеете, а вам сразу болид формулы — 1 в руки — и вперед!
А рядом стоит кто-нить и утверждает, что вы тупой, поскольку не можете ехать...
Короче, я под столом...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: С - зло... :)
От: The Lex Украина  
Дата: 12.01.11 23:03
Оценка: 1 (1) +1
Здравствуйте, CreatorCray, Вы писали:

CC>С макросами в основном Сшники сношаются.

CC>В С++ эквилибристика на макросах используется крайне редко, бо есть более удобные средства генерации кода.

Я постоянно пользуюсь. В основном для максимального уменьшения вероятности описок в очень похожих строчках кода.

МС>> а в сочетании с препроцессором иногда очень трудно сказать, что же ты конкретно навключал.

CC>Для особо тяжких случаев есть /showIncludes

В особо тяжком случае я нахально проставил #error message в местах между #ifdef-ами и отладил таким образом компиляцию.

МС>>Хотя бы то, что при неосторожном обращении получаем полное копирование на каждый чих.

CC>А можно пример? А то что то у меня не придумывается что надо с ними делать чтоб на каждый чих копировалось. В C# стиле писать что ли.

Я что-то пропустил: а в паскале строки не копируются? Там встроенные счетчики обращений есть?

МС>> А проблема стандартных сишных строк относится скорее к проблеме сишных массивов как таковых, а это потеря размерности при передаче в другую функцию вследствие приведения к указателю.

CC>Честно говоря не сильно помню когда мне приходилось использовать массивы кроме как временного буфера для вызова Сшных функций, который за пределы небольшого scope никуда не выходил.
CC>Всё больше контейнеры и обёртки.

Угу. Я, например, вот только сегодня нашел (в смыле: свежая статистика — опыт-то старый, не умеют давно... никогда не умели...), что "контейнерами и обертками" никак не умеют пользоваться "выросшие на контейнерах и обертках программисты" и хак — (char*)std_string_value.c_str() — для передачи строки в качестве буфера — "нормальное" дело.
Голь на выдумку хитра, однако...
Re[10]: С - зло... :)
От: Пацак Россия  
Дата: 12.01.11 23:06
Оценка:
Здравствуйте, MescalitoPeyot, Вы писали:

MP>А теперь попробуй перепутать знаки в !=. Шо, не получается? Shift мешает? Ну так и о чем речь, проблема высосана из пальца.


Конкретный пример — да, но вообще присваивание и сравнение перепутать имхо довольно несложно. Особенно если программист не чистый сишник, а пишет параллельно на нескольких языках.
Ку...
Re[5]: С - зло... :)
От: Michael7 Россия  
Дата: 13.01.11 00:02
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Тут тебе и базы данных (+курсовая), и SQL Server (+курсовая), и программирование компьютерной графики, и операционные системы, и системное программирование (и все на С++) и еще много...

LVV>А четвертый курс — это NET-программирование — годовой курс, и опять курсовая.
LVV>Так что учим мы — на совесть.

Не с целью как-то усомниться в последнем предложении, но просто из интереса, что сейчас проходят, входит ли в программу обучение написанию компиляторов и правильному составлению собственных языков для предметной области? Это я помимо прочего намекаю на парадигму LOP — Language Oriented Programming
Re[6]: С - зло... :)
От: Michael7 Россия  
Дата: 13.01.11 00:09
Оценка: 1 (1) +3 -1
Здравствуйте, The Lex, Вы писали:

TL> Очевидно, товарищу начинающему программисту про дебаггеры и прочие излишества всякие нехорошие рассказать забыли.


Мне кажется, что для начинающего программиста дебаггеры — зло и им надо категорически запретить ими пользоваться. В том числе, чтобы учились подобные ошибки выявлять тестами и внимательным чтением кода.
Re[2]: Я - фигею со здешнего народа! :)
От: jazzer Россия Skype: enerjazzer
Дата: 13.01.11 00:56
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>3. Совершенно не обращают внимания, что писал начинающий... То есть — СОВСЕМ начинающий, первый раз изучающий программирование (незнакомый мне первокурсник, фиг знает, с какого города)...

Причем либо японец, либо индус, либо носитель еще какого языка, в котором отрицание ставится после отрицаемого слова.
В русском все же "не равно" транслируется буквально в "!=", если знать, что "!" — это "не" (что "=" — это "равно", надеюсь, все абитуры знают... ну большинство, хотя бы...)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: С - зло... :)
От: CreatorCray  
Дата: 13.01.11 09:00
Оценка:
Здравствуйте, 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, значит пора закрыть эту страницу.
Всем пока
Re[9]: С - зло... :)
От: alpha21264 СССР  
Дата: 13.01.11 09:33
Оценка:
Здравствуйте, The Lex, Вы писали:

TL>Здравствуйте, alpha21264, Вы писали:


A>>>>С альтернативами пока плохо.

A>>>>Но это не отменяет того факта, что в программировании накопилось дохрена идей,
A>>>>(например функциональное программирование) которые в С++ уже не впихнешь.

TL>>>А нужно впихнуть?


A>>Нуу... было бы полезно.


TL>И шо таки мешает?


Ну например в чистом финкциональном программировании нет разрушающего присваивания.
То есть например i++ написать нельзя.

TL>У меня сейчас серверная часть на питоне (вроде — я кроме бинарных пакетов и чатов с "серверными инженерами" ничего в живом виде не видел) написана. Вот ведь страшная вещь: серверные инженеры отладочный сервер подняли (после 3-недельной переписки с попытками выпытать у меня что же именно у меня не работает, после чего нашелся хороший человек и правильно их пнул и оказалось, что на сервере ничего-то и не поднято вообще ) — а вот релизный теперь не могут. Причем отписаться "сам дурак" тоже не могут: на отладочном все работает. Страшная, видать, сила, этот ваш питон!


Нуу... Ты-ж понимаешь, что тут дело не в питоне. Сдуру можно и такую вещь сломать, которая вроде не ломается.

Течёт вода Кубань-реки куда велят большевики.
Re[6]: С - зло... :)
От: LaptevVV Россия  
Дата: 13.01.11 10:01
Оценка:
Здравствуйте, Michael7, Вы писали:

M>Здравствуйте, LaptevVV, Вы писали:


LVV>>Тут тебе и базы данных (+курсовая), и SQL Server (+курсовая), и программирование компьютерной графики, и операционные системы, и системное программирование (и все на С++) и еще много...

LVV>>А четвертый курс — это NET-программирование — годовой курс, и опять курсовая.
LVV>>Так что учим мы — на совесть.

M>Не с целью как-то усомниться в последнем предложении, но просто из интереса, что сейчас проходят, входит ли в программу обучение написанию компиляторов и правильному составлению собственных языков для предметной области? Это я помимо прочего намекаю на парадигму LOP — Language Oriented Programming

На 3-м курсе есть дисциплина Системное ПО (это помиомо операционных систем). С целью врубить народ в современную реализацию языков, лабы такие: написать интерпретатор виртуальной машины, написать ассемблер для означенной машины, в процессе писания ассемблера — сделать интерпретатор выражений (арифметических и логических), где ознакомление с конечными автоматами и грамматиками. Потом отладчик для означенной машины, потом уж компилятор для простого императивного языка — для означенной машины. Все должно работать и выдавать конкретный результат для совершенно конкретных программ: для виртуальной машины, ассемблер, отладчик и компилятор.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: С - зло... :)
От: The Lex Украина  
Дата: 13.01.11 10:37
Оценка:
Здравствуйте, Michael7, Вы писали:

TL>> Очевидно, товарищу начинающему программисту про дебаггеры и прочие излишества всякие нехорошие рассказать забыли.


M>Мне кажется, что для начинающего программиста дебаггеры — зло и им надо категорически запретить ими пользоваться. В том числе, чтобы учились подобные ошибки выявлять тестами и внимательным чтением кода.


Как бы вам сказать... Тяжело в учении — легко в бою! (к) Если его начинать учить "внимательному вычитыванию кода" и только — как он будет "вычитывать" кода строк на полмильйона со всякими сложными "интеркоммуникейшинами"?

Юнит-тест покажет что в данной функции есть ошибка. Это все. Далее правильно бы все же попытаться пройти "фейлящийся" тест под дебагером и посмотреть — чаще всего, просветление наступает. имхо, этому надо учить в том числе — работа у нас такая, разгребать ...
Голь на выдумку хитра, однако...
Re[7]: С - зло... :)
От: The Lex Украина  
Дата: 13.01.11 10:49
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>>>С макросами в основном Сшники сношаются.

CC>>>В С++ эквилибристика на макросах используется крайне редко, бо есть более удобные средства генерации кода.
TL>>Я постоянно пользуюсь. В основном для максимального уменьшения вероятности описок в очень похожих строчках кода.
CC>А можно пример для оценки насколько твои макросы нетривиальны.
CC>Тривиальные отлаживать особо гемору нет.

Тривиальны. Для нетривиального сношения специально обученные люди пишут специально навороченные шаблоны. Их у нас тоже есть!

CC>Без понятия что там на данный момент с паскалем, но у меня строки копируются как правило если они меняются или передаются куда то на более долговременное хранение. В остальных случаях идут как & или &&


Меряться так меряться: у меня строки еще и кушают специальный флажок, который означает "строка из ресурсов" и тогда указатель — не указатель, а идентификатор (считай индекс) предустановленной строки из ресурсов.

CC>У меня правильные контейнеры. В них у строки есть метод .str() который возвращает WCHAR* спецом для получения строк из winapi и прочих C функций.


Так в школе ж твои правильные контейнеры не учат.

ЗЫ: А я вот сейчас бодаюсь с особенностями реализации юникода на маке. И хоть бы мне ж тот Мак нужен был — так мне всего-то от сервера полученный utf8 в используемый гуями wchar_t преобразовать. Причем аж (!) в одном месте аж в одной "маркетинговой единице функциональности". Причем остальное вроде работает... Вот _этому_ в школах надо учить — индустриальному подходу и что часто нужно копать и копать. имхо.
Голь на выдумку хитра, однако...
Re[10]: С - зло... :)
От: The Lex Украина  
Дата: 13.01.11 10:52
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Ну например в чистом финкциональном программировании нет разрушающего присваивания.

A>То есть например i++ написать нельзя.

Надо будет погуглить что за концепция такая "разрушающее присваивание".

TL>>У меня сейчас серверная часть на питоне (вроде — я кроме бинарных пакетов и чатов с "серверными инженерами" ничего в живом виде не видел) написана. Вот ведь страшная вещь: серверные инженеры отладочный сервер подняли (после 3-недельной переписки с попытками выпытать у меня что же именно у меня не работает, после чего нашелся хороший человек и правильно их пнул и оказалось, что на сервере ничего-то и не поднято вообще ) — а вот релизный теперь не могут. Причем отписаться "сам дурак" тоже не могут: на отладочном все работает. Страшная, видать, сила, этот ваш питон!


A>Нуу... Ты-ж понимаешь, что тут дело не в питоне. Сдуру можно и такую вещь сломать, которая вроде не ломается.


Медицина говорит: ломается — есть прецеденты. Мой опыт говорит: сервера тоже ломаются — прецеденты постоянно. Остается убедить в этом а) начальство; б) "другую сторону которая сервером управляет". В целом, второй вопрос не столь трудет — технически. Но это уже менежмент и коммуникации — этому в школе программирования тоже поди не учат.
Голь на выдумку хитра, однако...
Re[8]: С - зло... :)
От: CreatorCray  
Дата: 13.01.11 11:13
Оценка:
Здравствуйте, The Lex, Вы писали:

TL>Так в школе ж твои правильные контейнеры не учат.

Дык в школе вообще не учат разработке софта.

TL>ЗЫ: А я вот сейчас бодаюсь с особенностями реализации юникода на маке. И хоть бы мне ж тот Мак нужен был — так мне всего-то от сервера полученный utf8 в используемый гуями wchar_t преобразовать. Причем аж (!) в одном месте аж в одной "маркетинговой единице функциональности". Причем остальное вроде работает... Вот _этому_ в школах надо учить — индустриальному подходу и что часто нужно копать и копать. имхо.


Тебе Utf8->UCS2 функцию подогнать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: С - зло... :)
От: blackhearted Украина  
Дата: 13.01.11 11:13
Оценка:
Здравствуйте, The Lex, Вы писали:

TL>Здравствуйте, blackhearted, Вы писали:


B>>ИМХО, проще микро ассемблера вообще ничего нет и ниже тоже мало кто существует.


TL>Есть еще особенности работы современных процессоров: кеширования всякие, предсказания, многопроцессорность опять же, DMA... м-м-м... у меня все.


Я в курсе.
Но тут же затык в самом начале, еще до ДМА как до луны. Какие уж кеширования?
Re[7]: С - зло... :)
От: blackhearted Украина  
Дата: 13.01.11 11:18
Оценка:
Здравствуйте, The Lex, Вы писали:

TL>Здравствуйте, blackhearted, Вы писали:


LVV>>>Поэтому для начинающих язык С — зло! Причем в сочетании с со студией — зло практически АБСОЛЮТНОЕ!


B>>Студия даже ворнинг не показала? Не верю.

B>>А если у вас ребята учатся писать на уровне ниже /W4 игонорируя вывод компилятора — то флаг им в руки.

B>>
B>>bool counter = false;
B>>if (counter =! 0)
B>>{
B>>}
B>>


B>>

B>>warning C4706: assignment within conditional expression


TL>Хм... Либо я чего-то путаю, либо в _Си_ нет ни "булов", ни... ну, просто булов нет.

My fault.


int main(int argc, char** argv)
{
    int counter = 0;
    if (counter =! 0)
    {
    }
    return 0;
}


Compile as C Code (/TC) + Level 4 (/W4)

warning C4706: assignment within conditional expression


Повторюсь, если игнорить варнинги — то ССЗБ и язык тут не при чём.
Re[7]: С - зло... :)
От: blackhearted Украина  
Дата: 13.01.11 11:19
Оценка:
Здравствуйте, Michael7, Вы писали:

M>Здравствуйте, The Lex, Вы писали:


TL>> Очевидно, товарищу начинающему программисту про дебаггеры и прочие излишества всякие нехорошие рассказать забыли.


M>Мне кажется, что для начинающего программиста дебаггеры — зло и им надо категорически запретить ими пользоваться. В том числе, чтобы учились подобные ошибки выявлять тестами и внимательным чтением кода.


да, согласен.
Но варнинги нужно читать, а не понижать их уровень, а потом искать тестами/чтением в чём же проблема.
Re[9]: С - зло... :)
От: The Lex Украина  
Дата: 13.01.11 11:28
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

CC>Тебе Utf8->UCS2 функцию подогнать?


Я еще с имеющейся в MacOSX mbstowcs не на...ся — дай человеку получить удовольствие от процесса жеж!
Голь на выдумку хитра, однако...
Re[8]: С - зло... :)
От: The Lex Украина  
Дата: 13.01.11 11:30
Оценка:
Здравствуйте, blackhearted, Вы писали:

B>[ccode]

B>Compile as C Code (/TC) + Level 4 (/W4)
B>

B>warning C4706: assignment within conditional expression


B>Повторюсь, если игнорить варнинги — то ССЗБ и язык тут не при чём.


Да, только в "простом Си" — присваивание внутри условия — довольно распространенная практика.
Голь на выдумку хитра, однако...
Re[3]: Я - фигею со здешнего народа! :)
От: B0FEE664  
Дата: 13.01.11 13:25
Оценка: +3 :))
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, LaptevVV, Вы писали:


LVV>>3. Совершенно не обращают внимания, что писал начинающий... То есть — СОВСЕМ начинающий, первый раз изучающий программирование (незнакомый мне первокурсник, фиг знает, с какого города)...

J>Причем либо японец, либо индус, либо носитель еще какого языка, в котором отрицание ставится после отрицаемого слова.
J>В русском все же "не равно" транслируется буквально в "!=", если знать, что "!" — это "не" (что "=" — это "равно", надеюсь, все абитуры знают... ну большинство, хотя бы...)

В таком случае запись
if (counter =! 0 ) {
значит: "Если счетчик равен не нулю ...", что, на мой взгляд, то же вполне по-русски.
И каждый день — без права на ошибку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.