Перейти к содержанию
    

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);
}

Убиться об стену! Тривиальная задача решена.... из пушки по воробъям! Зачем? Вы думаете что си не позволит начудить оверинженеринга? Ошибаетесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

juvf

Дык, в моём сообщение и не было утверждения, что си удобней с++.

Просто исторически сложилось, что для ОМЭВМ сначала появились эффективные компиляторы С, а уже потом С++.

Поэтому и "переползали" на С, а не на С++. А в силу тривиальности задач на С и остались.

Если "с нуля", то конечно С++.

У нас теперь ВСЁ программное обеспечение разрабатывается на С++: специалист растёт в рамках одного языка. Это экономически выгодно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в с++ есть плюшка bool - чего она стоит?

в с++ есть плюшка for(int i = 0; i<10; i++) - чего стоит плюшка внутри for объявлять i?

Ничего не стоит. В C это тоже есть. C-99.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

juvf

Дык, в моём сообщение и не было утверждения, что си удобней с++.

Просто исторически сложилось, что для ОМЭВМ сначала появились эффективные компиляторы С, а уже потом С++.

Поэтому и "переползали" на С, а не на С++. А в силу тривиальности задач на С и остались.

Если "с нуля", то конечно С++.

У нас теперь ВСЁ программное обеспечение разрабатывается на С++: специалист растёт в рамках одного языка. Это экономически выгодно.

 

Надо понимать это поверх линукса вы пишите ВСЁ на C++ ? :biggrin:

 

С++ нишевой язык не из-за своей недосягаемой могучести. А потому что его уже проехали.

 

Теперь гики косеют от Python, Swift, Go и проч. В психбольнице ничего не меняется.

Цель новых языков не что там ускорить, а сделать процесс увлекательным, о чем и пишет Apple в аннотации к Swift.

 

Хотел бы я посмотреть наколько быстрее напишет программист на C++ приложение для Kinetis по cравнению с программистом на C-и базируясь на инструментах и библиотеках предоставляемых Freescale.

Вот на 100% уверен, что C-и победит.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А мне не ясно нежелание писать на с++ в приложениях малого среднего размера......

И мне не ясно нежелание писать на Форт (Forth) приложения малого и среднего размера (хотя как это оценить) :)

 

Возможно это

Хотя наверно ясна... это консервативность...

или "нежелание" "неумение" расставаться со "своими" "скелетами в шкафу" или "ограничнность" восприятия иных реалий программирования.

 

т.е. если прогер в си как рыба в воде, а в с++ его в ступор вводит символы ::, то конечно ТОЛЬКО СИ. Но если ты знаешь с++ или ты не знаешь ни си, ни с++, то однозначно учи и пользуй с++. Пример: маленькая программа, холоворд на с++

int main()
{
printf("hello world!");
}

Банально холоворд на Форт

 ." Hello world!"

и так во многих моментах Форт реалий :)

 

Зачем учить новый язык? везде нужно использовать с++.

Учить или хотя бы иметь представление для программиста разных языковых подходов.

 

Конечно при написании программы на с++ нужно адекватно оценивать возможности эмбэдэда и потребность в тех или иных плюшка. Там где достаточно массива интов, не нужно использовать 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё программирование в конечном счёте сводится к пересылкам одних ячеек памяти в другие (или одного потока данных процедуры к другой процедуре) с какими то преобразованиями при этом.

"Цель работы программиста - намагнитить быстро вращающиеся диски в нужных местах" (с).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если кейл сделает полноценную поддержку C++11/14 будет прорыв. Писать код на старом стандарте уже нет возможности.

GCC хорош, но не самый айс. Clang (llvm) все руки не доходят посмотреть.

Однозначно выбирать C++ или другие языки. Язык C - это прошлое (хотя и не плохое прошлое).

 

Хотя и в C++ есть раздражители. После питона ставить фигурные скобочки утомляет, нет контрактов, по исключению нельзя размотать стек как в яве или питоне, лишняя многословность в шаблонах (плюс еще по мелочам). Если "корпорации" подхватят D, то будет неплохо лет через 5-10.

 

Я писал на яве для восьми битного Dallas еще 10 лет назад (если кто помнит были tini). После это поверил в яву. Отклик был приемлемый, работа с сетью на полной нагрузке (10мбит вроде).

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Цель работы программиста - намагнитить быстро вращающиеся диски в нужных местах" (с).

 

:))) в точку. правда больше для эпохи DOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Однозначно выбирать C++ или другие языки. Язык C - это прошлое (хотя и не плохое прошлое).

 

Пока линукс не перепишут на C++, этот C++ отстанется только приставкой к C-и для тех кто изнывает от скуки на работе.

И потом о нем будут вспоминать как о неком таком корявом расширении C-и появившемся в конце эпохи однопоточных языков. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как связаны линукс и С++?

Про скуку просто смешно. Если Вы не используете:

1 автоматический вывод типов

2 static_assert

3 шаблоны (копипастите по случаю и без)

4 семантически безопасные контракты-классы (передаете указатели на структуры в функции)

5 про STL уже и так понятно, можно еще сказать про лямбды и семантику пеермещения

то Вы зря тратите время.

Прочитайте новый стандарт, или введение в него. Язык это не буковки и ключевые слова. Язык это фразы и ++ гораздо богаче С.

C++ тоже не идеал, но держаться за С (даже если это С99) сомнительная затея.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как связаны линукс и С++?

Про скуку просто смешно. Если Вы не используете:

1 автоматический вывод типов

2 static_assert

3 шаблоны (копипастите по случаю и без)

4 семантически безопасные контракты-классы (передаете указатели на структуры в функции)

5 про STL уже и так понятно, можно еще сказать про лямбды и семантику пеермещения

то Вы зря тратите время.

Прочитайте новый стандарт, или введение в него. Язык это не буковки и ключевые слова. Язык это фразы и ++ гораздо богаче С.

C++ тоже не идеал, но держаться за С (даже если это С99) сомнительная затея.

 

Я ща википедию открою и еще больше лабуды из C++ перечислю. ;)

А что нибудь нам реально показать из своей нетленки на C++ (для микроконтроллеров, разумеется) ?

 

А то с STL мы тут уже разобрались - http://electronix.ru/forum/index.php?showt...6&hl=median

Ничего впечатляющего. Слезы.

В IAR вообще катастрофа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Русский язык еще древнее, чем C/C++. Почему, тем не менее, на нем продолжают говорить, а не переходят на более современные языки? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По медиане - написано просто страшно, так делать нельзя. Это говнокод (и это не оскорбление).

По коду, в конце недели (суббота) могу выложить, если есть практический интерес.

Могу переписать медиану, так чтобы был использован std::nth_element. Сравним.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...