LINUX.ORG.RU
ФорумTalks

Если вы пишете на c++98/99, то какие ограничения не позволяют вам перейти на c++11/14/17?

 ,


0

5

Я могу придумать только одно и одно с большой натяжкой:

На какой-то embedded железке нельзя обновить ос и компилятор. Ну или начальство не разрешает... что странно.

Какие есть ещё? И да, разумеется разработка под Linux.

★★★★★

Ответ на: комментарий от tailgunner

И вывод... какой? Что тем, кто писал на C++98, вообще не следует эти возможности использовать?

Я бы сформулировал так: «Хочешь использовать C++11 — бери компилятор, поддерживающий C++11. Использовать промежуточные версии не стоит».

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Я бы сформулировал так: «Хочешь использовать C++11 — бери компилятор, поддерживающий C++11. Использовать промежуточные версии не стоит».

Лучше быть богатым и здоровым, чем бедным и больным, конечно. Но иногда нужно делать выбор между «бедным и больным» и «бедным и здоровым».

tailgunner ★★★★★
()

Не вижу большого смысла в C++. Для быстрого и оптимизированного кода для высоких нагрузок есть C, для всего остального, C# гораздо лучше C++.

cvs-255 ★★★★★
()
Ответ на: комментарий от tailgunner

ну действительно, какой смысл в C++? В C# большинство идей реализовано гораздо лучше. А по скорости C уделывает обоих

cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

В чистом C - несколько лет разработки высоконагруженных приложений

Даже интересно - какие высоконагруженные приложения в наше время пишут на Си?

tailgunner ★★★★★
()
Ответ на: комментарий от cvs-255

несколько лет разработки высоконагруженных приложений

Даже интересно - какие высоконагруженные приложения в наше время пишут на Си?

Анализ сетевого трафика и системы защиты датацентров

Неортодоксальное определение «высоконагруженных приложений».

tailgunner ★★★★★
()
Ответ на: комментарий от cvs-255

Такие системы с успехом пишутся и на C++. Так что для использования C там есть всего два оправдания:

1. Код растет из бородатых 80-х годов.

2. Религиозный фанатизм.

eao197 ★★★★★
()
Ответ на: комментарий от cvs-255

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

Тогда 90% тех, кто пишет на Си, «разрабатывают высоконагруженные приложения», и термин становится бессмысленным.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от eao197

Например, если мы хотим защитить приложения, хостящиеся в датацентре, от sql, xml, подделки кук, xss, ddos, то нагрузка на систему защиты будет очень хорошая.

C++ заметно медленнее, чем C, если это не просто «C с классами», а полноценное использование C++. И благодаря использованию C можно сэкономить ресурсы, ставя не несколько серверов для фильтрации, и раскидывая по ним трафик, а 1.

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

Например, если мы хотим защитить приложения, хостящиеся в датацентре, от sql, xml, подделки кук, xss, ddos, то нагрузка на систему защиты будет очень хорошая.

Повторюсь, такие системы успешно делают и на C++.

C++ заметно медленнее, чем C, если это не просто «C с классами», а полноценное использование C++.

Во-первых, хотелось бы понять, что такое «полноценное использование».

Во-вторых, «заметно» — это чем-то кроме авторитетного мнения подтверждается? Замерами, скажем.

eao197 ★★★★★
()
Ответ на: комментарий от cvs-255

Тогда 90% тех, кто пишет на Си, «разрабатывают высоконагруженные приложения», и термин становится бессмысленным.

Ну так да

Забавно. Оказывается, я большую часть жизни занимался «высоконагруженными приложениями».

tailgunner ★★★★★
()
Ответ на: комментарий от eao197

Во-вторых, «заметно» — это чем-то кроме авторитетного мнения подтверждается? Замерами, скажем.

Да, реализации одного и того же алгоритма средствами C++ и C как правило имеют разницу в скорости от 1,5 и более раз. Замеры проводились, и мной в том числе.

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

Хотелось бы посмотреть на такой алгоритм и такую реализацию.

По поводу «полноценного использования» какие-нибудь пояснения можно получить?

eao197 ★★★★★
()
Ответ на: комментарий от i-rinat

Ну, если std::string по значению возвращать и передавать, то можно еще и не то получить. Или если std::vector поэлементно заполнять через push_back без предварительных reserve.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Во-первых, хотелось бы понять, что такое «полноценное использование».

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

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

Ну прям стандартный набор заблуждений.

умные указатели,

Чем вы их заменяете в чистом C?

использование абстрактных классов для описания интерфейсов классов,

Что вместо абстрактных классов в чистом C?

лямбды.

А уж лямбды-то какой оверхед дают?

eao197 ★★★★★
()
Ответ на: комментарий от cvs-255

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

Именно потому любая достаточно сложная программа на С содержит косо-костыльную реализацию половины языка С++ и его стандартной библиотеки.

oldstable
()
Ответ на: комментарий от i-rinat

Ну например у меня когда-то была задача вычисления большого количества математики, raytracing в искривленном пространстве. Ну и будучи написанным на C и C++ у меня разница более чем в 2 раза была. Да, когда я писал на C++, я активно использовал абстрактные классы, перегрузку операторов и методов и прочие радости C++.

cvs-255 ★★★★★
()
Ответ на: комментарий от oldstable

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

cvs-255 ★★★★★
()
Ответ на: комментарий от i-rinat

Ну самое первое, пересечение абстрактной частицы с абстрактным объектом. И поиск пересечения с фактическим объектом наследуется от него.

cvs-255 ★★★★★
()
Ответ на: комментарий от i-rinat

Конечно, наверное этот код можно было хорошо оптимизировать, но скорее всего и получился бы «C с классами»

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

я активно использовал абстрактные классы, перегрузку операторов и методов и прочие радости C++.

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

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Эээ... Зачем?

Ну а какой же это C++ без абстрактных-то классов?

Вообще типичная ошибка неофита: как дорвешься до новых возможностей, так и не остановишься, пока не впихнешь в программу их все.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

абстрактные классы - стандартнейшая вещь C++. Если для написания высокопроизводительного кода надо использовать лишь подмножество языка, то это и значит, что язык - медленный.

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

В теории. Обычно открываешь что-то на С - а там велосипеды на велосипеде, обязательно с истинно сишной эмуляцией ООП с ручной инициализаций и освобождением ресурсов. У старого кода на С++ так же проблема, к слову.

oldstable
()
Ответ на: комментарий от cvs-255

Если для написания высокопроизводительного кода надо понимать что делаешь, то это и значит, что язык - медленный.

Вот так как-то правильнее.

oldstable
()
Ответ на: комментарий от cvs-255

абстрактные классы - стандартнейшая вещь C++

Да?

Вы еще скажите, что абстрактные классы должны быть в любой C++ программе.

Если для написания высокопроизводительного кода надо использовать лишь подмножество языка, то это и значит, что язык - медленный.

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

Повторюсь, вы повторяете стандартную ошибку тех, кто плотно с C++ дел не имел: если в программу не удается засунуть _все_ фичи C++, то речь уже идет как бы и не о C++.

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Если для написания высокопроизводительного кода надо использовать лишь подмножество языка, то это и значит, что язык - медленный.

Ха-ха! Удачи в использовании strcpy/strcat/strlen для обработки строк!

i-rinat ★★★★★
()
Ответ на: комментарий от eao197

Ну а какой же это C++ без абстрактных-то классов?

Вроде pimpl+virtual проигрывает абстрактному интерфейсу. Сам не мерял, правда. Какая-то заметка в блоге была.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

это библиотечные функции, пусть и входящие в стандартную библиотеку.

А перегрузка операторов и абстрактные классы - объекты самого языка.

cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от i-rinat

Из кода ядра линукс ты не можешь использовать стандартную библиотеку. Например, если я правильно помню, в пространстве ядра нет malloc(). Но это же не значит, что ядро написано не на C?

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

Но это же не значит, что ядро написано не на C?

Ядро написано на подмножестве языка Си. Более того, оно как бы и не совсем на Си, так как активно используются расширения GCC и его особенности. Когда GCC ломает эти свои особенности, даже недокументированные, Линус очень громко ругается.

i-rinat ★★★★★
()
Ответ на: комментарий от cvs-255

А перегрузка операторов и абстрактные классы - объекты самого языка.

Я начинаю понимать... и всё, что является «объектом языка», должно иметь одинаковую стоимость?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

В идеале - да, один и тот же алгоритм, записанный разными конструкциями, должен давать одну и ту же скорость, потому что делает он одно и то же и совершает в процессе одни и те же шаги

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

Ну самое первое, пересечение абстрактной частицы с абстрактным объектом. И поиск пересечения с фактическим объектом наследуется от него.

А чем пересечение абстрактной частицы с абстрактным объектом заменили в коде на C, и почему код на C, реализующий то же самое, был быстрее?

Zenom ★★★
()
Ответ на: комментарий от cvs-255

и всё, что является «объектом языка», должно иметь одинаковую стоимость?

В идеале - да

А в реальности это не так и надо знать, что сколько стоит. Пока же то, в чем ты винишь Си++ - это твое собственное невежество.

И кстати, в Си тоже не все все «объекты языка» имеют одинаковую стоимость.

один и тот же алгоритм, записанный разными конструкциями, должен давать одну и ту же скорость

фейспалм.жпг

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

И кстати, в Си тоже не все все «объекты языка» имеют одинаковую стоимость.

Как будто есть языки, в которых всё имеет одинаковую стоимость.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

И кстати, в Си тоже не все все «объекты языка» имеют одинаковую стоимость.

Как будто есть языки, в которых всё имеет одинаковую стоимость.

Может быть, есть. Но не вижу в своих словах ничего, что могло бы навести на такую мысль.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.