260

Программирование на C в эпоху ООП. Оно такое

Программирование на C в эпоху ООП. Оно такое

Лига программистов C/C++

69 постов4.8K подписчиков

Правила сообщества

Соблюдайте правила Pikabu:

https://pikabu.ru/html.php?id=wtf


Помимо этого ЗАПРЕЩЕНО:

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

3
Автор поста оценил этот комментарий
Не могу прочесть... Здесь что-то на эльфийском
раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Я блин большинство того что тут народ понаписал понять не могу, потому что всю жизнь прогал микрокнтроллеры на историческом Си, а понабежали в основном Джависты, Плюсовики и другие PHP-шники. И это при том что я блин программист. Просто не на том языке и не совсем ООП.

7
DELETED
Автор поста оценил этот комментарий

Я в свое время учился по какой то книге где это было упомянуто совсем вскользь, мол это дело такое - для узкоспециализированных спецов, вам скорее всего не пригодится. А потом я уже во взрослом возрасте столкнулся с программированием микроконтроллеров, совершенно случайно полез разбираться что это и меня как по голове стукнули - это же гениально !

раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Именно. А ещё полезно для парсинга проприетарных протоколов. Принял фрейм в массив. Преобразовал тип к структуре и работаешь с принятыми байтами уже как с полями. Ничего сдвигать и маскировать не надо.

показать ответы
27
Автор поста оценил этот комментарий

Ну так если вам не нужны битовые поля и целочисленные типы кроме int32_t/int64_t, то не стоит по этому поводу переживать. Переживать надо начинать, когда они понадобились

раскрыть ветку (1)
4
Автор поста оценил этот комментарий
По сути они нужны везде где надо описывать кучу однобитных флагов например. Если конечно есть желание экономить память.
показать ответы
1
DELETED
Автор поста оценил этот комментарий
Больше всего бесит, что такой подход работает

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


Если бы разработка велась на более низком уровне абстракции (с более высокой эффективностью по памяти и CPU), сложность задач не позволила бы их реализовать.


Ну то есть если бы условный Кибарпанк писали с нуля на С так, чтобы он максимально эффективно использовал каждый бит и каждый такт, он бы не был в два раза быстрее. Он бы не был даже отложен до 2022 года. Его бы просто никогда не существовало. Современное ПО часто невозможно реализовать на том же уровне абстракции, на котором пишется софт для микрожелезок.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Это расслабляет и отрезает ряд возможностей разработчику невидимой рукой рынка. У меня на работе например стоит задача реализовать запись HD видео на флешку 60fps h.264. Энергоэффективно это могут делать DSP, но на них программируют 1.5 человека в стране. Значит учиться этому я буду года 2. Зато малину, которая тоже это может, но жрёт в 2 раза больше из-за линукса, знают все. НО! Если я сделаю на малине своё устройство, то оно будет жить в 2 раза меньше китайских аналогов на их дешёвых и эффективных DSP. Ну и кто у меня такое купит? В итоге начальство завернуло проект ещё до начала.
1
Автор поста оценил этот комментарий

Сушить портки на свитче - это отдельный вид быдлокодерства, ящитаю... 3-5 строк, а дальше - по рукам бить. Но тут тоже как и в ретарне про KISS скорее, и про комплексную сложность, и конкретно свитч тут не причем, пяток экранов в ветке if тоже не сахар.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Интересно, если не сушить портки на свитче, то как организовать парсинг протокола, в котором пару сотен типов пакетов? Тип пришедшего пакета определяется 8-битным идентификатором. Каждый пакет может парсится по разному, но есть и одинаковые, что неизбежно приводит к конструкции типа:

...

case(PACK_VELOCITY)

case(PACK_TEMPERTURE)

case(PACK_BAT_LEVEL)

{

break;

}

case(ANY_OTHER)

{

break;

}

...

Ну и как? Тоже самое в форме if-else смотрелось бы лучше? На if-else религия разрешает сушить портки?

показать ответы
6
DELETED
Автор поста оценил этот комментарий

Две из шести претензий я разделяю.


Типы короче 32 бит нужны наверное только тогда, когда они в массиве сколько-нибудь значимой длины или в сериализации (во всех формах). В остальных случаях просто получается дроч с "а не переполнится ли у меня в этом месте и что делать если да" и "обмажься же еще этими static_cast-ами".


Битовые поля -- это не поля класса, хотя они выглядят такими. Для них не работает адресная арифметика, а еще для них не работают привычные гарантии многопоточной работы. Так что использовать их там, где они не необходимы, я бы не стал. Если нужны только флаги -- пускай это будет bitfield или просто int -- они хотя бы не притворяются тем, чем они не являются.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

А вам известно, что битовые поля работают как битовые поля только тогда, когда включена соответствующая настройка компилятора? Посему интерпретация битовых полей в одном и том же коде может быть настроена разработчиком для каждого конкретного случая. Но это опять очень сложна! сложна! Давайте писать такой код, который прочитает даже школьник. Это ведь важнее.

показать ответы
0
Автор поста оценил этот комментарий

Да это так.

Но это не правильно. Школа программирования вырождается из решения шахматной задачи в бухгалтерию перебора библиотек. Библиотек написанных брутфорсом. Уже начинает вступать в силу жизненные реалии. когда продукты жиждятся на какой-нибудь библиотеке, которую вдруг перестают поддерживать по чисто физиологическим причинам.


Я не говорю что этот подход нижизнеспособен. Наверное он единственный в текущей системе мировоззрения.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Наверное лучше и не скажешь. Очень ёмко и кратко! Плюсую.
показать ответы
0
Автор поста оценил этот комментарий

Я смотрю тут каждый своё разделяет.

Тут надо смотреть кто в какой области и на чём пишет.

Я вот goto вообще не использую,  return один на всю процедуру.

мне претит. Я бы ещё и циклы в список добавил. Кроме главного.

Вот что можно сделать циклом, чего не позволяет сделать аппаратура МК?

Циклы - потенциал для зависания МК.

А битовые поля и разные длины типов - так на раз. Иначе-то как на МК программировать?


По мне и ООЯ для МК это лишний машинный код. хотя щас и МК залили просто как ОЗУ так и флэш. О ресурсах вообще не думаешь. Разве только для оптимизации скорости. Языки ООП нужны для скорости написания кода и его кооперативности(взаимное использование). Хоть и порождают они монструозов типа прикрутил теплоход в качестве поворотника на велосипед.


Как рассказик о роботе которого научили брать+наливать+ставить на плиту+зажигать газ=кипятить чайник, а потом задачу облегчили. Чайник полный на плите. Робот вылил воду и свёл задачу к первой...


Но МК есть МК. Хотя кому-то и тут недосуг даже ручками прописать инициализацию. пользуют библиотеки которые мигать светодиодом преобразуют в пару килобайт кода, а не в десяток-два команд.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Щас тебе ответят:
Да хоть мегабайт для мигания. Если это ускоряет разработку, хоть малину для этих целей тыкай!
Больше всего бесит, что такой подход работает.
показать ответы
0
Автор поста оценил этот комментарий

Мне кажется, тут лучше применить паттерн обсерверов или его микс с другим. Есть отдельные классы обработчиков, есть механизм, который по опкоду шлёт поток на обработку в конкретный класс.

Не си, но джава - я встречал сетевой хендлер длиной в 14к строк на условиях, это локальный адок. Переделал на обсерверы - стало просто, понятно, и гибко.

Если совсем современнить - то можно DI применить, и даже вручную регистрировать все классы в хендлере не придется.

Хеш-таблицы, безусловно, медленнее линковки, но всё еще достаточно быстры для подобных задач.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Вы свои высокоуровневые штучки спрячьте))) Я про Си говорю) Тут нет классов, методов и прочих умных слов.

показать ответы
4
DELETED
Автор поста оценил этот комментарий
Давайте писать такой код, который прочитает даже школьник. Это ведь важнее.
Давайте писать такой код, который _не_ создает гонки, когда обращаешься к двум _разным_ полям класса из разных потоков. Нет, серьезно, это же жопа.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А что если есть возможность получить какое-то поле быстрее чем другое, это проблема? Нормально ли приносить 7 бит в жертву дьяволу, когда нужен только один?

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества