|
|
  |
С/С++, Почему до сих пор все сидят на древних языках вроде С и С++ |
|
|
|
Sep 1 2014, 04:04
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(ASN @ Aug 31 2014, 01:46)  juvf IMHO, ответ на вопрос "Почему до сих пор "сидят" на С/С++? " очень прост. Потому, что в embedded большинство задач (и следовательно программистов) решают достаточно тривиальные задачи. Для таких задач язык С прост и понятен. А также удобен и достаточен. Чем си удобней с++? Чем си проще и понятней с++? Я не говорю об ооп. ООП и на си можно реализовать и на асме. Я говорю о с++. Я написал пример тривиального кода на с++. Перепишите этот же код на си, что в си-коде будет проще и понятнее? Цитата Вот тогда поймете чего действительно стоят 'плюшки' на C++. О каких плюшках вы говорите? Я привел пример кода на с++ - где там плюшки, которые действительно стоят? в с++ есть плюшка bool - чего она стоит? в с++ есть плюшка for(int i = 0; i<10; i++) - чего стоит плюшка внутри for объявлять i? в с++ есть плюшка передачи аргументов в функцию по умолчанию - чего стоит эта плюшка? Меня услышали так "А мне не ясно нежелание писать на с++ с использованием ООП и STL, с использованием паттернов и т.п. в приложениях малого среднего размера". А говорил я так "А мне не ясно нежелание писать на с++ в приложениях малого среднего размера". Зачем вообще изучать си и писать на нем ПО (за исключением поддержки старого), если есть с++? С++ почти полностью включает си. Т.е. можно изучить в с++ только ту часть, которая стоит столько же, сколько и в си, которая проста и понятна и с помощью которой можно решать тривиальные задачи. Если не нравиться ооп и плюшки - не используй их в коде, но пиши на с++. Пиши в стиле си, но на с++. Зато потом, если понадобится какойнить перегруз функции, или класс, или другая плюшка.... то без проблем добавил в код и поехал дальше. Не нужно изучать новый язык, не нужно переписывать си код на с++ и не нужно скрещивать в проекти си код с с++. Кто-то считает что с++ это обязательно плюшки и дает уроки по чистому с++ как здесь. Но это не так. Не нужно перегружать код всякими ненужными плюшкам. Вот пример холоворда на с++ Код #include <iostream.h> #include <string.h> class string { private: int size; char *ptr; public: explicit string(const char* chrs = 0) : size(chrs ? strlen(chrs) : 0) { ptr = new char[size + 1]; if (chrs) strcpy(ptr, chrs); else ptr[size] = 0; } string(const string &s) : size(s.size) { ptr = new char[size + 1]; strcpy(ptr, s.ptr); } ~string() { delete [] ptr; } friend ostream &operator <<(ostream &, const string &); string &operator=(const char *); string &operator=(const string&); }; ostream &operator<<(ostream &stream, const string &s) { return(stream << s.ptr); } string &string::operator=(const string &s) { this->~string (); new (this) string (s); return(*this); } string &string::operator=(const char *chrs) { *this = string(chrs); return(*this); } int main() { string str; str = "Hello World"; cout << str << endl; return(0); } Убиться об стену! Тривиальная задача решена.... из пушки по воробъям! Зачем? Вы думаете что си не позволит начудить оверинженеринга? Ошибаетесь.
|
|
|
|
|
Sep 1 2014, 10:46
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(ASN @ Sep 1 2014, 11:02)  juvf Дык, в моём сообщение и не было утверждения, что си удобней с++. Просто исторически сложилось, что для ОМЭВМ сначала появились эффективные компиляторы С, а уже потом С++. Поэтому и "переползали" на С, а не на С++. А в силу тривиальности задач на С и остались. Если "с нуля", то конечно С++. У нас теперь ВСЁ программное обеспечение разрабатывается на С++: специалист растёт в рамках одного языка. Это экономически выгодно. Надо понимать это поверх линукса вы пишите ВСЁ на C++ ? С++ нишевой язык не из-за своей недосягаемой могучести. А потому что его уже проехали. Теперь гики косеют от Python, Swift, Go и проч. В психбольнице ничего не меняется. Цель новых языков не что там ускорить, а сделать процесс увлекательным, о чем и пишет Apple в аннотации к Swift. Хотел бы я посмотреть наколько быстрее напишет программист на C++ приложение для Kinetis по cравнению с программистом на C-и базируясь на инструментах и библиотеках предоставляемых Freescale. Вот на 100% уверен, что C-и победит.
|
|
|
|
|
Sep 1 2014, 14:08
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(juvf @ Aug 30 2014, 09:28)  А мне не ясно нежелание писать на с++ в приложениях малого среднего размера...... И мне не ясно нежелание писать на Форт (Forth) приложения малого и среднего размера (хотя как это оценить) Возможно это Цитата(juvf @ Aug 30 2014, 09:28)  Хотя наверно ясна... это консервативность... или "нежелание" "неумение" расставаться со "своими" "скелетами в шкафу" или "ограничнность" восприятия иных реалий программирования. Цитата(juvf @ Aug 30 2014, 09:28)  т.е. если прогер в си как рыба в воде, а в с++ его в ступор вводит символы ::, то конечно ТОЛЬКО СИ. Но если ты знаешь с++ или ты не знаешь ни си, ни с++, то однозначно учи и пользуй с++. Пример: маленькая программа, холоворд на с++ Код int main() { printf("hello world!"); } Банально холоворд на Форт Код ." Hello world!" и так во многих моментах Форт реалий Цитата(juvf @ Aug 30 2014, 09:28)  Зачем учить новый язык? везде нужно использовать с++. Учить или хотя бы иметь представление для программиста разных языковых подходов. Цитата(juvf @ Aug 30 2014, 09:28)  Конечно при написании программы на с++ нужно адекватно оценивать возможности эмбэдэда и потребность в тех или иных плюшка. Там где достаточно массива интов, не нужно использовать std::list<MyClass>, где MyClass содержит в привате инт, и в паблике кучу методов для чтения/модификации этого инта. Всё программирование в конечном счёте сводится к пересылкам одних ячеек памяти в другие (или одного потока данных процедуры к другой процедуре) с какими то преобразованиями при этом. А для этого многие искусственные абстракции типа опять ООПа не так важны. Достаточно иметь возможность делать векторным (переназначаемыми на разный код) некоторые процедуры в программе и по возможности избавляться от бездумного использования глобальных переменных. P.S. Это мне "видится" так  Патерны проектирования для меня увы почти незнакомы т.к. мне не приходится вести "позиционные войны" с используемым языковым инструментарием (что подумаю то и запрограммирую). Пример вызова цикла for из другого слова с передачей диапазона цикла (тоже банально просто) печати 10-ть раз Hello World Код : for 0 do ." Hello World" cr loop ; : print_for 10 for ; print_for Вопросы? и интересный аспект Форт творчества CC14 LIfe: Wild Demo - #1 'Forth DemoTool' похожая направленность детского творчества в проекте reda4 программирование как игра.
Сообщение отредактировал Kopa - Sep 1 2014, 15:50
|
|
|
|
|
Sep 3 2014, 08:26
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Major @ Sep 3 2014, 11:07)  А как связаны линукс и С++? Про скуку просто смешно. Если Вы не используете: 1 автоматический вывод типов 2 static_assert 3 шаблоны (копипастите по случаю и без) 4 семантически безопасные контракты-классы (передаете указатели на структуры в функции) 5 про STL уже и так понятно, можно еще сказать про лямбды и семантику пеермещения то Вы зря тратите время. Прочитайте новый стандарт, или введение в него. Язык это не буковки и ключевые слова. Язык это фразы и ++ гораздо богаче С. C++ тоже не идеал, но держаться за С (даже если это С99) сомнительная затея. Я ща википедию открою и еще больше лабуды из C++ перечислю.  А что нибудь нам реально показать из своей нетленки на C++ (для микроконтроллеров, разумеется) ? А то с STL мы тут уже разобрались - http://electronix.ru/forum/index.php?showt...6&hl=medianНичего впечатляющего. Слезы. В IAR вообще катастрофа.
|
|
|
|
|
Sep 3 2014, 09:27
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 18-03-09
Из: Минск
Пользователь №: 46 221

|
может не по теме, но навеяно хабром выстрелить себе в ногу
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|