C ++ Streams по сравнению с .NET Streams? - PullRequest
2 голосов
/ 29 января 2010

Есть ли причина, по которой стандартная библиотека все еще использует потоки, которые она использует? Кажется, что потоки .net гораздо проще в использовании и реализации. Я понимаю, что они хранят их по причинам совместимости, но почему они не добавили новую потоковую реализацию, более похожую на .net?

Каковы некоторые плюсы и минусы потоков C ++ по сравнению с потоками .NET? Я не могу придумать никаких плюсов для потоков C ++:.

Как сказал nos
«Он говорит о концепции, а не о реализации MS. Замените, например, .NET на Java, и вопрос будет означать почти то же самое (поскольку его концепции потоков аналогичны концепции .NET, но в отличие от C ++)»

Ответы [ 4 ]

9 голосов
/ 29 января 2010

Хотя они оба придерживаются основной абстракции, C ++ и .NET интерпретируют «поток» в разных смыслах. Имея это в виду, не совсем справедливо сравнивать .NET Stream с C ++ *stream, потому что они служат разным целям: один предназначен для перемещения байтов в хранилище и из него, а другой предназначен для помощи в представлении данных. , Обе структуры имеют аналоги в других, однако:

  • .NET: Stream: *Reader
  • C ++: streambuf: iostream

Что касается C ++, ознакомьтесь с цитатой из GNU C ++ Iostream docs , в которой сказано, что лучше, чем я могу:

Классы istream и ostream предназначены для обработки преобразования между объектами в вашей программе и их текстовым представлением.

Напротив, базовый класс streambuf предназначен для передачи необработанных байтов между вашей программой и входными источниками или выходными приемниками.

Я думаю, вы найдете, когда вы сделаете соответствующее сравнение, что вещи имеют больше смысла. (Списки участников для Stream против streambuf очень похожи, как и TextReader и istream.)

2 голосов
/ 29 января 2010

Потоки C ++ - это старая особенность C ++, и изменение их сейчас было бы недопустимым. Это не значит, что они не могут быть улучшены, но они не будут заменены. Никто из близких к C ++ Standard Committee не собирается предлагать реализацию параллельного потока. Это может привести к путанице из-за ограниченных выгод.

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

1 голос
/ 29 января 2010

Я не знаю, что такое .Net, но, поскольку вы говорите, что вопрос будет одинаковым для потоков Java, наиболее очевидным преимуществом потоков C ++ является то, что все форматирование встроено в std :: ios. Вы можете вполне обоснованно утверждать, что это ортогонально бизнесу шунтирования байтов вокруг, и поэтому должно быть отдельной задачей. Затем C ++ снова разделяет их (см. Streambuf), просто то, что происходит с , вызывает поток, это то, что также выполняет форматирование, тогда как Java вызывает простую вещь как поток, а затем программист украшает его сканерами, читателями или еще чем-то.

Как обычно, Java предоставляет простой интерфейс, C ++ предоставляет «чрезвычайно настраиваемый и чрезвычайно мощный» интерфейс, который выглядит довольно неудобно. Простота использования - не единственная забота комитета по стандартизации C ++.

Что касается того, почему комитет не предоставил более Java-подобный альтернативный API, как Microsoft сделал в .NET, я подозреваю:

  • Комитет предпочитает, чтобы третьи лица выполняли такую ​​работу с адаптером.
  • Комитету нравятся многие аспекты текущего API, например, универсальная перегрузка operator<< и operator>>. Я не уверен, является ли это частью того, что вам не нравится в потоках C ++, но это, безусловно, часть того, что людям, которые им нравятся, нравится в них.

Во всяком случае, с тех пор как он был впервые опубликован, на самом деле существенного обновления стандарта C ++ не было, поэтому даже если бы комитет хотел изменений (а это не AFAIK), к настоящему времени он все еще был бы только в черновом варианте. , для выпуска возможно в этом году, может быть в следующем году.

0 голосов
/ 29 января 2010

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

Пользуясь потоками C ++ в течение многих лет, я больше не использую его в каких-либо новых проектах. Google Coding Guidelines согласен со мной. Там написано «Используйте потоки только для регистрации».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...