Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: С/С++
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
Страницы: 1, 2, 3
Abell
Цитата(ViKo @ Sep 8 2014, 09:45) *
Может, вернемся к ассемблеру? rolleyes.gif

+1 sm.gif У "правильного" программиста на ассемблере со временем накапливается своя библиотека решений, причем - досконально отработанных, оптимизированных и наглядных, так что программирование на ассемблере сложности уже не представляет laughing.gif ИМХО, ассемблер - единственный язык, понятный и машине, и человеку, все остальное - лишь оболочки и переводчики разной степени кривости laughing.gif
Major
Общение двух, это излишне и уже не по теме получается.
По С/C++ на МК: понял что писать можно только если приперло. После C++11 и других языков все кажется серым и убогим.

По медиане: сделал обобщенный алгоритм, который принимает любой тип объектов с оператором сравнения '<' (другие операции не нужны).
Сложный объект копируется один всего раз. Функция nth_element оказалась не нужна (обошлось min и max_elements).
На ПК обгоняет Ekstrom в 1,7 раз (N=32, случайный поток + пила). На единицу выходят только для N=4.
Вечером залью в реп. Кому надо пользуйте, вопросы можно в личку.
juvf
В одной канторе ПО для МК(для всякой мелочи) пишут исключительно на UML, а вы говорите С++ не для эмбэддед.
Russky
Всем привет!
Очень интересная тема! Люблю такие. sm.gif

Мне показалось, что большенство ответов пытаются перевести обсуждение asm/C/C++/C# (ява как аналог C#) из технологической области в филосовскую. Это не правильно.
Я знаком со всей линейкой и вот что скажу.
По идее переходя от этапа к этапу, т..е. от ами к С, к С++ и к С# мы жертвуем чем-то ради достижения чего-то.
При переходе от ассемблера, мы унифицируем структуру процессора (его ассемблер на все случаи жизни) в язык С. При этом обязанность использования ассемблера максимально эффективно мы отдаем компилятору.
При переходе к С++ мы унифицируем вызовы виртуальных ф-й в вызов виртуальных методов и наследование. И еще динамическое размещение объектов. (С++ имеет смысл только если используется virtual. Все остальное в нем вторично). Оптимальность вызова и размещение памяти мы снова передаем компилятору.
При переходе к С# мы вообще переходим от компилятора к интерпретатору. Это когда компилятор думает не о том как преобразовать язык в ассемблер, а о том, как вызвать блок из фреймворка (библиотеки оптимально реализованных блоков). И вот этот момент очень важен и как-то не прозвучал здесь. Работа с памятью и указатели, это все вторично. Изначально .NET можно сравнить с громадной DSP библиотекой в которой содержаться все блоки обработки, а C# это такой язык, который эти оптимально реализованные блоки соединяет. Чисто симулинк. sm.gif
Канечно, при каждом переходе мы приносим в жертву производительность. Но приобритаем мы функциональность и удобство в отладке и разработке. Но процесс этот нелинейный. Чем сложнее приложение, тем меньше будет разница в производительности кода написанного на С# (с использованием оптимизированных библиотек, написанных на С или даже на asm) и кода написанного на С. В связи с тем, что все больше ф-й уже реализованно в виде оптимизированных библиотек, выигрывает тот, кто может не реализовывать и писать эти самые библиотеки, а соединять блоки между собой и использовать их.
Лично мне очень нравится C#. Просто потрясный язык и среда. MSVS13 просто фантастика! Но даже VS2008 неплохо, по сравнению с CCS и эклипсом. sm.gif
И еще. Стоимость процессоров и памяти упала настолько, что смысла выбирать и оптимизировать ее просто нет.

И совсем еще. Переводя разработку для устройств на C#, вы автоматом переносим разработку из области embedded в разработку software. Это совсем другие правила, стоимость разработки и рынок труда. sm.gif

В общем резюмируя: самые критические по производительности и времени части я пишу а ассемблере. Менее критические на С. Затем, инициализацию и размещение real-time объектов я пишу на С++. Просто потому что это удобно. И приложения не критические к производительности, и где это возможно, я пишу на С#.Отказываться от asm, С или С++ я не собираюсь, хотя мой любимый язык именно C#.

Как-то так. sm.gif
dxp
QUOTE (Russky @ Nov 17 2014, 18:58) *
При переходе к С++ мы унифицируем вызовы виртуальных ф-й в вызов виртуальных методов и наследование.

Не расскажете, чем виртуальные функции отличаются от виртуальных методов? И как одно "унифицируется" в другое?


QUOTE (Russky @ Nov 17 2014, 18:58) *
С++ имеет смысл только если используется virtual. Все остальное в нем вторично).

<...>

Затем, инициализацию и размещение real-time объектов я пишу на С++.

Правильно ли я понял, что инициализация и размещение выполняются исключительно путём виртуальных вызовов?

И ещё поясните, пожалуйста, что такое "real-time объекты"?
Xenia
Цитата(dxp @ Nov 17 2014, 16:47) *
Не расскажете, чем виртуальные функции отличаются от виртуальных методов? И как одно "унифицируется" в другое?

Википедия утверждает, что в отношении к C++ это слова-синонимы.

Цитата(dxp @ Nov 17 2014, 16:47) *
Правильно ли я понял, что инициализация и размещение выполняются исключительно путём виртуальных вызовов?

Нет. Инициализация и размещение происходит при вызове конструктора (функции, одноименной с именем класса), который вызывается неявно при создании объекта. Конечно, при желании конструктор, как и любую другую функцию, тоже можно объявить виртуальным, но вам оно надо? sm.gif

Цитата(dxp @ Nov 17 2014, 16:47) *
И ещё поясните, пожалуйста, что такое "real-time объекты"?

А фиг его знает! sm.gif Я полагаю, что это объекты , порождаемые динамически в процесе работы программы с коротким временем жизни - порождаем объект, используем, объект самоудалился. Но скорее всего эта терминология не из языка C++, а откуда-то еще.
Russky
Цитата(dxp @ Nov 17 2014, 17:47) *
Не расскажете, чем виртуальные функции отличаются от виртуальных методов? И как одно "унифицируется" в другое?

В С можно вызывать ф-и через указатели на эти ф-и. Я просто это называю виртуальными ф-ми. Всю инициализацию, в зависимости от того что вы хотите вызвать, естевственно Вы должны делать сами.
В С++ это делается автоматом в зависимости от типа создаваемого объекта через таблицу виртуальных методов.
Ну и указатель на объект не надо передавать самому. Это делает компилятор.
Недостаток данного метода, и почему его нельзя использовать в приложениях критичных к времени исполнения (real-time) вот в чем. Вместо того чтобы просто взять и вызвать метод, С++ сначала определяет тип объекта, потом находит таблицу виртуальных методов, и только потом вызывает метод.
Если я это делаю на С, то я просто беру и вызываю: my_object->function1(my_object, ...). my_object это структура объекта. Но при этом я сам руками должен инициализировать указатель на function1.
В С++ я просто пишу: my_object->method(). А компилятор добавляет в зависимости от типа нужный метод.
В общем на С++ это делает компилятор, а на С я сам. Если мне нужно чтобы метод быстро и часто вызывался без большого оверхеда, я использую С. Например метод фильтрации в обработке аудио. А если мне нужно использовать менеджер памяти для инициализоции кодека, то я использую метод mem_manager->Alloc(...), перед тем как кодек будет запущен. И мне вообще всеравно сколько он выполняется. sm.gif
Как-то так. sm.gif


Цитата(dxp @ Nov 17 2014, 17:47) *
Правильно ли я понял, что инициализация и размещение выполняются исключительно путём виртуальных вызовов?

Не совсем. Я имел в виду то, что если часть кода не критична к времени выполнения: парример инициализация кодека или олгоритма, то я использую виртуальные методы например для менеждера памяти: (Alloc, Free, Clean). Эти методы вызываются на этапе инициализации кодека, но не приложения. Но когда инициализируется приложение, оно уже определяет типы используемых менеджеров. И т.д.
Еще поясню.
У кодека внутри есть секция которая отвечает за инициализацию его самого. Именно эта секция размещает память, последоваетльность блоков и т.д. И здесь этот кодек вызывает виртуальные методы. А сами объекты били размещены приложением, или даже мной в ф-и main() в зависимости от конфигурации и типа приложения. sm.gif

Цитата(dxp @ Nov 17 2014, 17:47) *
И ещё поясните, пожалуйста, что такое "real-time объекты"?

Это те объекты которые вызываются постоянна как поток и критичны ко времени исполнения и ресурсам. Например блоки фильтрации входного сигнала с АЦП.
Если обобщить, то вот что получается.
Например блок фильтра на 128 отсчетов выполняется за 100 мкС, а расчет коэффициэнтов для этого фильтра выполняется 3 секунды. Но ... расчет коэффициентов я делаю один раз, при старте приложения, а вызов фильтра я делаю 1000 раз в секунду на протяжении всей жизни приложения. В итоге получается что фильтр у меня написан на ассемблере, а расчет коэффициентов я могу написать хоть на С++ хоть на яве. Даже 10 секунд не будут критичны. sm.gif
Так вот, фильтр в данном случае - real-time. sm.gif
AlexandrY
Цитата(Russky @ Nov 17 2014, 13:58) *
Мне показалось, что большенство ответов пытаются перевести обсуждение asm/C/C++/C# (ява как аналог C#) из технологической области в филосовскую. Это не правильно.


Вижу не читали новейшее исследование по теме выбора языков - http://macbeth.cs.ucdavis.edu/lang_study.pdf

Обязательно подучите TypeScript.
Получите наиболее качественный код. biggrin.gif




Цитата(Russky @ Nov 17 2014, 16:28) *
Так вот, фильтр в данном случае - real-time. sm.gif


Ну нееее..т, это просто будет DSP блок и не более.

А realtime-ом это станет если фильтр будет прерываться еще кучей задач, обслуживать несколько асинхронных входных и выходных потоков и все сделает вовремя.
Russky
Цитата(AlexandrY @ Nov 17 2014, 18:56) *
Вижу не читали новейшее исследование по теме выбора языков - http://macbeth.cs.ucdavis.edu/lang_study.pdf

Обязательно подучите TypeScript.
Получите наиболее качественный код. biggrin.gif

sm.gif
Странная статья. Я понимаю когда сравнивают С и раскаль или С# и яву. Но зачем все в кучу мешать? sm.gif


Цитата(AlexandrY @ Nov 17 2014, 18:56) *
Ну нееее..т, это просто будет DSP блок и не более.

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


Да. Слово вовремя здесь решает. sm.gif
dxp
QUOTE (Xenia @ Nov 17 2014, 21:15) *
Википедия утверждает, что в отношении к C++ это слова-синонимы.

Тов. Б.Страуструп не согласен с ru.wikipedia, он утверждает, ведя речь, конечно, конкретно про С++, что

"Виртуальные функции иногда называют методами". (с).

Это точная цитата. Заметьте, не виртуальными методами, а просто методами, сиречь, синонимами являются термины "виртуальная функция" и "метод". Конкретно в контексте ЯП С++. В других ЯП это может быть по-иному.

Впрочем, товарищ, к которому был вопрос, уже пояснил, что виртуальными функциями он называет обычные функции, которые вызываются через указатель. Правда, непонятно, почему и что в них такого виртуального. Вызвал функцию обычным образом - она обычная, вызвал через указатель - стала виртуальной. Та же самая функция. Я вот всегда полагал, что функция - она сразу и всегда либо обычная, либо виртуальная, и это определяется квалификатором virtual в её объявлении и порождает вполне конкретное поведение. Ну, да ладно...


QUOTE (Xenia @ Nov 17 2014, 21:15) *
Но скорее всего эта терминология не из языка C++, а откуда-то еще.

Посмею вас заверить, что к терминологии С++ это не имеет ни малейшего отношения.

QUOTE (Russky @ Nov 17 2014, 21:28) *
В С можно вызывать ф-и через указатели на эти ф-и. Я просто это называю виртуальными ф-ми. Всю инициализацию, в зависимости от того что вы хотите вызвать, естевственно Вы должны делать сами.

Я до сих пор наивно полагал, что в С нет виртуальных функций.

QUOTE (Russky @ Nov 17 2014, 21:28) *
В С++ это делается автоматом в зависимости от типа создаваемого объекта через таблицу виртуальных методов.
Ну и указатель на объект не надо передавать самому. Это делает компилятор.
Недостаток данного метода, и почему его нельзя использовать в приложениях критичных к времени исполнения (real-time) вот в чем. Вместо того чтобы просто взять и вызвать метод, С++ сначала определяет тип объекта, потом находит таблицу виртуальных методов, и только потом вызывает метод.

Вот этот момент можно поподробнее? Как "С++ сначала определяет тип объекта"? Он RTTI анализ с ним производит, что-ли? И когда я писал, например, на MSP430 программу, там вызов виртуальной функции вылился в в две быстрых, однотактовых регистровых команды:

1. загрузка vptr регистр;
2. косвенный вызов функции по адресу из vtbl, которая адресуется из регистра (со смещением, если указателей в vtbl несколько), загруженного на предыдущем шаге.

В общем, я тут не видел, чтобы "С++ определял тип объекта". И, соответственно, каких-то накладных, мешающих real-time тоже не усматривается. Код на С (или асме), который будет звать функции из таблицы указателей, будет ровно таким же. Упомянутый тов. Б.Страуструп утверждал (в книжке "Дизайн и эволюция С++"), что когда проектировался механизм виртуальных функций, была цель получить максимально эффективное решение, при котором всё, что можно разрешить на этапе компиляции, должно быть разрешено на этом этапе, а для рантайма оставить только малое количество простых действий - как то: взять указатель vptr у конкретного экземпляра, по нему добраться до vtbl и по адресу из неё вызвать функцию. Никаких определений типов объекта на рантайме уже не выполняется, всё определено и проверено статически на этапе сборки.
AlexandrY
Цитата(Russky @ Nov 17 2014, 16:58) *
Странная статья. Я понимаю когда сравнивают С и раскаль или С# и яву. Но зачем все в кучу мешать? sm.gif


Почему же куча?
Вы разве не знаете что одним из языков программирования beagleboard и других подобных встраиваемых плат является JavaScript?
Дроны, квадракоптеры программируются на JavaScript.
Я использую JavaScript в своих разработках.

Теперь, когда узнал о TypeScript обязательно на него перейду.
Все таки наиболее защищенный от ошибок язык. biggrin.gif
Mahagam
QUOTE
И когда я писал, например, на MSP430 программу, там вызов виртуальной функции вылился в в две быстрых, однотактовых регистровых команды:

что-то мне подсказывает, что это не могли быть однотактовые регистровые команды ))
что всего две - вполне верю.
Russky
Цитата(dxp @ Nov 17 2014, 19:25) *
Та же самая функция. Я вот всегда полагал, что функция - она сразу и всегда либо обычная, либо виртуальная, и это определяется квалификатором virtual в её объявлении и порождает вполне конкретное поведение. Ну, да ладно...


Я могу задать структуру и передавать эту структуру всем заинтересованным объектам как указатель. Эти объекты будут вызывать ф-ю через указатель в этой структуре. Но значение ф-и которую они будут вызывать определяю я, в зависимости от типа объекта. Это по своей сути то-же самое что и виртуальный метод, только таблица храниться не отдельно а в самой структуре. Но таблицу можно сделать статической. И т.д. В общем это детали реализации виртуальных методов. Но сам принцып остается неизменным, что объект который вызывает метод, не знает что за метод он вызывает. Это определяется объектом.


Посмею вас заверить, что к терминологии С++ это не имеет ни малейшего отношения.


Цитата(dxp @ Nov 17 2014, 19:25) *
Вот этот момент можно поподробнее? Как "С++ сначала определяет тип объекта"? Он RTTI анализ с ним производит, что-ли? И когда я писал, например, на MSP430 программу, там вызов виртуальной функции вылился в в две быстрых, однотактовых регистровых команды:

1. загрузка vptr регистр;
2. косвенный вызов функции по адресу из vtbl, которая адресуется из регистра (со смещением, если указателей в vtbl несколько), загруженного на предыдущем шаге.

В общем, я тут не видел, чтобы "С++ определял тип объекта". И, соответственно, каких-то накладных, мешающих real-time тоже не усматривается. Код на С (или асме), который будет звать функции из таблицы указателей, будет ровно таким же. Упомянутый тов. Б.Страуструп утверждал (в книжке "Дизайн и эволюция С++"), что когда проектировался механизм виртуальных функций, была цель получить максимально эффективное решение, при котором всё, что можно разрешить на этапе компиляции, должно быть разрешено на этом этапе, а для рантайма оставить только малое количество простых действий - как то: взять указатель vptr у конкретного экземпляра, по нему добраться до vtbl и по адресу из неё вызвать функцию. Никаких определений типов объекта на рантайме уже не выполняется, всё определено и проверено статически на этапе сборки.

Не совсем так, но в общем верно. Все зависит от компилятора и того как вы реализуете вызов. По личным наблюдениям, С++ в разы медленней (чисто вызов). Именно поэтому я использую в некоторых моментах именно С. Не потому что я против С++, а просто С быстрее. И еще учитавайте, что С++ компиляторы разные на разных платформах.
В общем, если говорить о asm/C/C++, то на асме у меня 10 ф-й, на С - 20, а на С++ все остальное... sm.gif
Как-то так.
AlexandrY
Цитата(Russky @ Nov 17 2014, 18:05) *
По личным наблюдениям, С++ в разы медленней (чисто вызов). Именно поэтому я использую в некоторых моментах именно С. Не потому что я против С++, а просто С быстрее. И еще учитавайте, что С++ компиляторы разные на разных платформах.

Как-то так.


Десять баллов! lol.gif
Обсуждение действительно становится нескучным.

Я тут недавно взял и переименовал все свои файлы в проекте с .c на .cpp.
Просто ради эксперимента, чтобы проверить насколько легко перейти на C++.
Вышло в лет, и медленней работать почему-то не стало .

Потом правда вернул обратно. Зачем этот гем.. если все вокруг написано на C-и.
juvf
Цитата(Russky @ Nov 17 2014, 17:58) *
По идее переходя от этапа к этапу, т..е. от ами к С, к С++ и к С# мы жертвуем чем-то ради достижения чего-то.
...
Канечно, при каждом переходе мы приносим в жертву производительность.
....

Это паранойя что с++ медленнее с. Какая может быть жертва при переходе от С к С++? Как упадет производительность при вызове виртуальной функции? Сами же пишете, что компилятор всё сам сделает.

Цитата
Эти объекты будут вызывать ф-ю через указатель в этой структуре. Но значение ф-и которую они будут вызывать определяю я, в зависимости от типа объекта. Это по своей сути то-же самое что и виртуальный метод, только таблица храниться не отдельно а в самой структуре.
Ну так с++ призван чтоб эту рутину за вас компилятор сделал.
Russky
Цитата(juvf @ Nov 18 2014, 00:05) *
Это паранойя что с++ медленнее с. Какая может быть жертва при переходе от С к С++? Как упадет производительность при вызове виртуальной функции? Сами же пишете, что компилятор всё сам сделает.


Уболтали!
Вспомнил я почему я использую С вместо С++! Хотя изначально все было именно на С++! sm.gif
В общем так.
Действительно, разницы между С++ и С при вызовах виртуальных методов практически нет, НО!
Разница появляется когда мы начинаем вызывать объекты из кешированной памяти.
Если в случае с С я могу руками указать что структура будет размещаться в быстрой памяти (точнее я ее просто могу разместить динамически там), то в случае с С++ я не могу сказать компилятору чтобы он таблицу виртуальных методов для данного класса хранил в быстрой памяти. Либо я указываю что все таблицы для всех классов должны храниться там, а это как правило больше чем доступно памяти, либо ВМТ должна храниться во внешней памяти, и тогда облом с быстродействием... sm.gif
Но еще скажу, что для С и для С++ я использую С++ компилятор. sm.gif
Т.е. разница не в компиляторе как таковом, а в методах вызова.


andrew_b
Цитата(AlexandrY @ Nov 17 2014, 23:21) *
Я тут недавно взял и переименовал все свои файлы в проекте с .c на .cpp.
Просто ради эксперимента, чтобы проверить насколько легко перейти на C++.
Вам мало троллинга в теме про SVN, вы пришил сюда порезвиться?
Хорошо, покормлю немного.

От того, что вы переименовали файлы, код как был на Си, так он на Си и остался. То, что компилятор Си-два-креста умеет компилировать код на Си, плюс ему, а не вам. Однако не всякий валидный код на Си является валидным кодом на Си-плюс-плюс. Вы, наверное, это и так знаете.
Вот честно перепишите свой Си-код на Си-плюс-плюс, тогда и оцените, легко ли перейти на другой язык.
AlexandrY
Цитата(andrew_b @ Nov 18 2014, 07:35) *
От того, что вы переименовали файлы, код как был на Си, так он на Си и остался. То, что компилятор Си-два-креста умеет компилировать код на Си, плюс ему, а не вам. Однако не всякий валидный код на Си является валидным кодом на Си-плюс-плюс. Вы, наверное, это и так знаете.
Вот честно перепишите свой Си-код на Си-плюс-плюс, тогда и оцените, легко ли перейти на другой язык.


Что значит честно?

Обязательно применить библиотеку шаблонов?
Так они показали свою неэффективность. Cм. примеры выше.

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

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

Что еще надо честно сделать?
andrew_b
Цитата(AlexandrY @ Nov 18 2014, 11:24) *
Что еще надо честно сделать?
Сначала ответьте на вопрос: зачем вы переименовали файлы из *.c в *.cpp?
den_po
Цитата(andrew_b @ Nov 18 2014, 13:07) *
Сначала ответьте на вопрос: зачем вы переименовали файлы из *.c в *.cpp?

очевидно, чтобы лично убедиться, что "С++ в разы медленней (чисто вызов)"
AlexandrY
Цитата(andrew_b @ Nov 18 2014, 10:07) *
Сначала ответьте на вопрос: зачем вы переименовали файлы из *.c в *.cpp?


Как зачем? Чтобы показать какой я крутой программер.
Вот дескать, все пишу на C++. biggrin.gif
dxp
QUOTE (Mahagam @ Nov 17 2014, 22:30) *
что-то мне подсказывает, что это не могли быть однотактовые регистровые команды ))
что всего две - вполне верю.

Речь шла о накладных расходах на виртуальный вызвов, сам вызов, ессно, не учитывается - он ровно тот же по затратам, что и обычный вызов. Насчёт однотактовых, вы правы, я, наверное, погорячился: первая команда - загрузка vptr по this (который уже в регистре) - это загрузка из памяти, она занимает пару тактов, вторая - загрузка адреса из vtbl, т.е. тож из памяти, опять пару тактов.

Russky
Раз уж мы разобрались с С и С++, определив что ООП можно и на С делать, если нужно... sm.gif
Предлагаю приступить к обсуждению С#. sm.gif
Интересно мнение тех кто пишет на С# под WinCE, т.е. использует .NET Compact Framework. Яву я предлагаю не обсуждать, так как тормоза которые она показывает на гигагерцовых телефонах отбивает всякое желание ее использовать. А вот C# вполне себе шустренько летает, если конечно бездумно не использовать. sm.gif

Как я уже писал, лично мне C# очень нравится. Иногда напрягает кастрированность .NETCF, но это мелочи. В принципе не так критично. Например нету нормального WCF, но базовые ф-и есть, и то хорошо.

Xenia
Цитата(Russky @ Nov 18 2014, 15:28) *
Предлагаю приступить к обсуждению С#. sm.gif


А я предлагаю этого не делать. sm.gif

Причина популярности языка C/C++ среди электронщиков именно в том, что мы на нем прошивки для МК пишем! Поскольку этот язык позволяет создавать рабочий код при минимальной поддержке операционной системы, а зачастую и при полном отсутствии последней. Все же остальные языковые монстры требуют для своей поддержки не только операционную систему, но и порой очень больших по объему библиотек.

Но если мы не прошивку для МК пишем, а лабаем какую-то прогу на большом ПК, то тут пусть каждый выбирает языковую среду под стать своему вкусу и поставленным задачам. В этом случае добиваться синхронизации во взглядах/предпочтениях не имеет смысла.
Russky
Цитата(Xenia @ Nov 18 2014, 21:10) *
А я предлагаю этого не делать. sm.gif


Убедили! В принципе согласен, что С++ наиболее универсальное и оптимальное решение для микроконтроллеров. Тут весь вопрос в том, а что можно называть микроконтроллером?
Уже сейчас можно найти за 20 баксов "микроконтроллер" в виде платы с мегабайтами памяти, питанием и т.д. и готовой ОС. sm.gif
Да что там... 4-х ядерный 2 ГГц SoC с графикой и DSP стоит 20 $. sm.gif
В итоге получается что время на разработку стоит дороже чем переплата за отдельный девайс. sm.gif
К чему это я?
К тому, что мне кажется что сейчас четко видна тенденция переноса решений с PC на "микроконтроллеры". Если раньше нужен был сервер, мощный комп и сервер БД. то теперь все можно делать локально на флешке. sm.gif
Поэтому понятие embedded сильно размывается, так как маленькое устройство может содержать в себе ресурсы больше чем большущий сервер еще каких-то 10 лет назад. sm.gif
В итоге получается что С++ остается только за драйверами и реалтаймом. sm.gif

Ну да ладно. sm.gif
TSerg
Весело тут у вас, особенно с переименованием *.c в *.cpp.

А, тем временем, Microsoft делает очередной крупный шаг в сторону предоставления свободных средств разработки:

Visual Studio Community 2013
A full-Featured IDE - Free.
Start coding the app of your dreams for Windows, Android, and iOS.
http://www.visualstudio.com/products/visual-studio-co..
USD/JPY
Если говорить о Workstation/Server, то кроме системного программирования,
где управление аппаратными ресурсами и связанными с ними структурами данных
и kernel API-неотемлемая часть, C/C++ нужно там где требуется свехпроизводительность
и наносекундный отклик, которе во многом обеспечиваются глубокой оптимизацией струкур данных и
блоков кода на привязанность к отображению на кэши и протоколам когерентности для
мультипроцессорных систем, продвинутых алгоритмов синхронизации
потоков с использование соответствующего API и быстрых алгоритмов упраления памятью.
Поэтому С/С++ очень интенсивно используется в серверной части програмных продуктов для
электронной торговли, в частности почти все market data feed (FIX over UDP), HFT algorithms.
svss
Цитата(USD/JPY @ Oct 31 2015, 09:55) *
C/C++ нужно там где требуется свехпроизводительность и наносекундный отклик, ...
Поэтому С/С++ очень интенсивно используется в серверной части програмных продуктов для электронной торговли.

biggrin.gif
samosud2017
Скоро все перейдут на Яву)
Kopa
Цитата(samosud2017 @ Feb 3 2017, 23:12) *
Скоро все перейдут на Яву)

Не факт sm.gif
Познавательно Снимок базы проекта RosettaCode

P.S. Github добавил и поиск по тегам в строке поиска в форме Topic:тэг (можно и несколько Topic:тэг перечислить)
но проекты ещё мало классифицированы по тегам и поиск по словам даёт больше проектов.
Проверил и текущий Topic:Forth sm.gif
Olej
Цитата(samosud2017 @ Feb 3 2017, 23:12) *
Скоро все перейдут на Яву)

Все, кто не настолько глупы maniac.gif ... и кто хотел бы до сих пор попрактиковаться на древних языках вроде С и С++ 1111493779.gif ... вот здесь могут свободно взять сборники задач с решениями santa2.gif :

Задачи по программированию на языке C++, часть 2 (обновление)
Цитата
редакция 48 от 11.04.2017, страниц 110.
Задач с примерами на сегодня представлено 66


Задачи по программированию на языке C, часть 1 (обновление)
Цитата
редакция 39 от 14.11.2016, страниц 106.
Задач с примерами на сегодня представлено 102.


Задачи не тривиальные, сложные ... рассчитаны на программистов, имеющих уже изрядный уровень в C/C++.
Olej
Цитата(juvf @ Jul 17 2014, 23:48) *
Очередной хлоливар С/С++ vs Java/C# возник в месте обсуждения РТОС для мк. Я его переместил сюда.

Чтобы добавить вашему весёлому обсуждению интриги, я добавлю сюда загадку:
- обращали ли вы внимание, что на сегодня ("аж 2017-й год" - как кого-то там волнует) осталось крайне мало языков программирования (среди широко применяемых), которые выполняют компиляцию программного кода в нативный код процессора?
- на сегодня это только C, C++ и Go ... а среди продвинутых "не древних" - так и вовсе нет.

Вот и загадка: кто сможет назвать ещё языки программирования (из широко применяемых!), которые предполагают компиляцию в нативный (машинный) код?

P.S. Все "отмершие" языки, начиная с FORTRAN и, особенно, всю линейку от Pascal (Delphy, Turbo..., Modula-2, ...) - не надо беспокоить biggrin.gif

P.P.S. И ещё более - всякий дерибас индивидуального применения, слепленный "на коленке", типа язык D и т.п. - не называть. crying.gif

Цитата(Olej @ Apr 17 2017, 11:03) *
P.S. Все "отмершие" языки, начиная с FORTRAN и, особенно, всю линейку от Pascal (Delphy, Turbo..., Modula-2, ...) - не надо беспокоить biggrin.gif

Я даже табличку здесь рядом привёл, чтобы не показаться предвзятым: Паскаль повержен - впервые за много лет
arhiv6
В процессе развития - Rust, в процессе отмирания - Fort.
Olej
Цитата(arhiv6 @ Apr 17 2017, 11:38) *
в процессе отмирания - Fort.

Forth никогда не компилировался в нативный код, а компилировался в собственный байт-код стековой машины, т.е. код требовал исполняющую среду.


Цитата(arhiv6 @ Apr 17 2017, 11:38) *
В процессе развития - Rust

Rust - никогда не был в числе применяемых, восстребованных языков, по свежему рейтингу TIOBE Index for April 2017 от зависает там где-то на 41-й позиции ... и так навсегда и останется "в процессе развития"...
Цитата
Вечно молодой
Вечно пьяный

laughing.gif
arhiv6
Цитата(Olej @ Apr 17 2017, 15:44) *
Forth никогда не компилировался в нативный код, а компилировался в собственный байт-код стековой машины, т.е. код требовал исполняющую среду.

А как же форт-процессоры, вроде GA144 или синтезированных в ПЛИС?
Rst7
Moderator: Все, хватит, тему закрыл.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.