C ++ или С

Тема в разделе "Микроконтроллеры AVR", создана пользователем Romjke76, 2 авг 2016.

  1. ИгорьК

    ИгорьК Победитель модулей

    ИМХО, лучше делать проекты и делиться ими :)
     
  2. railmisaka

    railmisaka Нерд

    Ну эта тема вроде не про проекты.
    А так я делаю, и как сделаю, обязательно поделюсь.
    Больше того, я надеюсь даже пользу сообществу принести=) причем, по большей части, именно тем, кто не дружит с программированием.
     
    ИгорьК нравится это.
  3. ИгорьК

    ИгорьК Победитель модулей

    Чтобы не разводить холивар на тему "какой язык лучше" (касается не только Cей) следует наблюдать прикладные моменты.
    А, как мне кажется, Вы только начинаете осваивать МК? Несколько готовых проектов, а потом все станет на место.
     
  4. railmisaka

    railmisaka Нерд

    МК только осваиваю, код пишу давно.
    Я никогда и ни с кем не буду "говорить" на тему "какой язык лучше".

    Я просто предложил подход к обучению программированию, который считаю разумным.
     
  5. ИгорьК

    ИгорьК Победитель модулей

    Обучению программированию или обучению программированию МК?
     
  6. Unixon

    Unixon Оракул

    Да пробовал уже, знаю. Что это меняет?

    В таком случае для меня чистота заключается в не разведении зоопарка из 100500 инструментов узкой специализации и последующего создания всяких химер и гибридов, требующих десятка разных тулчейнов в одном проекте.

    Вот строго наоборот.
     
  7. railmisaka

    railmisaka Нерд

    Программированию МК. Но если уровень "что вообще можно почитать", то это не важно.
    Вы хотите апеллировать к тому, что у меня нет опыта программирования МК?
     
  8. AlexU

    AlexU Гуру

    Тема находится в ветке 'Микроконтроллеры AVR' и, так полагаю, в контексте этих микроконтроллеров и стоит рассматривать обсуждаемый вопрос. Так вот выбор языка C++ кажется странным, т.к. большинство плюшек языка останутся за бортом по причине невозможности их использования. В частности:
    1. виртуальные функции -- их лучше избегать, т.к. их использование "жрёт" оперативку, которой и так капли (это касается avr-g++, за другие компиляторы не знаю);
    2. rtti -- вообще нет;
    3. динамическое создание и удаление объектов -- то же лучше избегать, всё из-за той же оперативки малого объёма и ущербности в реализации динамического выделения памяти.
    Вот и получается, что в контексте AVR остаётся только возможность написать ключевое слово 'class' и все преимущества над C на этом заканчиваются. Хотя есть ещё шаблоны... Наверно шаблоны это единственное, что можно можно принять за плюс в пользу С++ против С. И то только при создании библиотечных компонентов.
     
  9. railmisaka

    railmisaka Нерд

    Ну, либо вы не хотите понять, что я имею ввиду, либо вы не понимаете сути вещей, которые стоят за моими словами.

    Так вы как раз и создаете химеру из двух принципиально разных языков. Т.е. с одной стороны, это и не плюсы вовсе, в с другой, и не компилится как Си.

    Я уже писал, чем это вам грозит.
     
  10. railmisaka

    railmisaka Нерд

    Ну формально то плюшек достаточно. И, наверное, для небольших программ можно и на плюсах писать. Если не бояться оверхеда.

    На счет виртуальных функций, мне не хочется полностью от них отказываться. Хотя, конечно, не стоит использовать не подумав.
     
  11. Unixon

    Unixon Оракул

    Кстати, что любопытно, из всех фишек плюсов шаблоны позволяют довольно элегантно строить гибкий код, пусть и без всякой динамики с полиморфизмом. Только так немногие пишут, ибо сложно и нужно понимать, что делаешь, не только и не столько в языке, сколько в архитектуре.
     
  12. Unixon

    Unixon Оракул

    Просто мне этот подход видится чуждым и не стоящим усилий.

    Просто использую C++ в необходимой мере, не ограничиваясь подмножеством простого C, если на то есть причины. Наличие возможности у инструмента не обязывает вас ей пользоваться всегда и везде. Да и компилятор в конце концов один. Единственно проблема может возникнуть с переносом на экзотические архитектуры, для которых есть только компиляторы С, но не плюсов. Вот тогда да, это попадалово.
     
  13. railmisaka

    railmisaka Нерд

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

    Даже странно это видеть..
     
  14. railmisaka

    railmisaka Нерд

    Единственно, полиморфный, но едва ли гибкий. Только как инструмент для избегания копипасты.
     
  15. AlexU

    AlexU Гуру

    Я пытался в полутора десятков классов применить виртуальные функции. Результат 2 кило оперативы из 4-х ушло только на таблицы виртуальных функций. А только для хранения других данных нужно было около 3 кБ. В общем пришлось лепить костыль из "собственной" реализации, так сказать, виртуальных функций и таблиц с размещением их во флеш (суть в том, что с применением наследования и вирт.функций задача решалась на много проще, чем с применением процедурного подхода). Вот такие пироги...
     
  16. railmisaka

    railmisaka Нерд

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

    Из вашего описания не совсем понятно, сколько всего было инстанциировано классов, а еще лушче оцените произведение количества инстансов на среднее количество виртуальных функций в классах.
     
  17. Arkad_snz

    Arkad_snz Гик

    C# - облегченный С++ (для таких задач и строился) - хорош для изучения и понимания идеологии ООП.
    С него на С++ перейдете "как по маслу".
     
  18. railmisaka

    railmisaka Нерд

    :eek::eek::eek:

    И вот это тоже.. да, вам будет более или менее привычно. Но не более. Да и зачем программисту C# вообще переходить на плюсы?
     
  19. ИгорьК

    ИгорьК Победитель модулей

    Ответ:
    Этот маленький нюанс вносит сильные корректировки в обсуждаемую тему. Не стоит на меня обижаться - новички всегда начинают заявлять о себе на абстракциях. Но, поработав паяльником, понимают, что важнее С(ей) понимать назначение регистров и уметь ими пользоваться. Абстрактные темы отходят на второй план.

    Паяльник Unixon мне известен хорошо...
     
  20. AlexU

    AlexU Гуру

    Речь-то не о x86, а о AVR и компиляторе avr-g++, который по какому-то недоразумению виртуальные таблицы копирует из флэш в оперативку при старте микроконтроллера. Хотя таблицы эти по сути не изменяемые и создаются на этапе компиляции, и ни что не мешает их держать во флэш и от туда читать при необходимости.