Re: Go заменяет С++ ?
От: DiPaolo Россия  
Дата: 08.05.25 07:14
Оценка: +2
M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".
Я бы лично такое написал, подразумевая, что с сишной/плюсовой базой человек элементарно более скилловый и понимая разработку на низком уровне (хотя плюсы — ЯВУ), с легкостью освоит и Го. Ну и в целом с такой базой проще работать на любом языке (за минусом экзотики) и фреймворке.

M>Область плюсов сужается

да

M>идет замена в принципе

да

M>нет областей где плюсы выглядели бы незаменимы?

такие области есть, но их все меньше

Тут основной критерий: стоимость разработки. А он включает в себя: стоимость специалистов, скорость найма, скорость написания кода, время на поддержку (maintenance), затраты на баги. И в большинстве своем (а сейчас 90% — это стандартный CRUD) плюсы ну очень сильно проигрывают всем другим языкам (питон, Шарп, джава, пхп, JS/TS и т.д.) в этом аспекте.

При всем при этом, да, есть области, где без него никуда: требуется скорость, низкоуровневое взаимодействие, есть много старых либ на плюсах и Си, с которыми надо интегрироваться, много кодовой базы на плюсах, ну и люди — хранители доменных знаний, которые знают лучше всего плюсы.

Из примеров: игровые движки, CAD, все что касается сети, эмбеддед, ессно, ну и мультимедиа на низком уровне. Есть и еще — это что навскидку вспомнил.
Патриот здравого смысла
Re: Go заменяет С++ ?
От: B0FEE664  
Дата: 12.05.25 14:32
Оценка: +1 :)
Здравствуйте, merge, спасибо за новый афоризм.
Неоднозначность фразы

Go заменяет С++

это как

любовь побеждает смерть

— совершенно не ясно, кто кого побеждает и что чего замещает.
И каждый день — без права на ошибку...
Re[2]: Go заменяет С++ ?
От: Нomunculus Россия  
Дата: 14.05.25 13:02
Оценка: :))
Здравствуйте, undo75, Вы писали:

U>а так — немецкий значительно лучше для ругани, например подходит, чем французский. и т.д. и т.п.


У меня впн иногда через Германию подключает. И ютуб крутит мне немецкую рекламу. Это жесть. Они даже про туалетную бумагу говорят, как будто на расстрел тебя ведут.
Re[4]: Go заменяет С++ ?
От: rg45 СССР  
Дата: 19.05.25 05:40
Оценка: 5 (1)
Здравствуйте, undo75, Вы писали:



M>>Они замечательно пишутся и на плюсах, и получается гораздо лучше. Ну, если, конечно, под железку есть плюсовый компилятор


U>всегда думал что под ембеддед на асме пишут. нафиг на высокоуровневом языке. даже с?


Как сейчас помню, 98-й год, Visual Studio 5.0. Нам понадобилось реализовать вычисление квадратного корня для чисел с фиксированной точкой. Табличное решение с интерполяцией. Я сразу же взялся за ассемблер, а вариант писать на C я даже не рассматривал. После того как реализовал и всё это успешно взетело, мне мой тогдашний руководитель предложил реализовать то же самое на Сях, благо это было не сложно. Когда же я сделал это и посмотрел в сгенерированный код, я прозрел. И навсегда потерял желание состязаться с компилером в оптимизациях. Компилер меня уделал и по памяти, и по производительности.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 19.05.2025 5:58 rg45 . Предыдущая версия . Еще …
Отредактировано 19.05.2025 5:49 rg45 . Предыдущая версия .
Re[8]: Go заменяет С++ ?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.05.25 02:32
Оценка: 4 (1)
Здравствуйте, Философ, Вы писали:

M>>Что за ерунда? Самый простой путь — берёшь uint32_t, и говоришь, что точка посередине, т.е. число с фикс точкой формата 16b.16b.


Ф>Да, ты прав — я тут посовещался с qwen'ом на эту тему. BCD действительно сильно медленее. Квэн говорит, что именно твой подход использовался в игровых движках.

Ф>Однако, похоже, всё определяют цели.

Да ты мыслитель


Ф>Я всякие чаты вот таким вопросом мучал:

Ф>

Действительно ли ручная реализация fixed-point арифметики может привести к потере точности. Приведи примеры, где ручная реализация fixed-point приведёт к потере точности, а использование BCD — нет.


Ф>
Когда лучше использовать BCD

Ф>

Ф>📌 BCD позволяет точно представлять такие числа, как `0.1`, `0.01`, `0.001` и т.д., без ошибок округления.


Да, фиксед поинт не позволяет точно хранить десятичные числа с дробной частью. Собственно, как и floating point числа — там мантисса и экспонента всё равно по основанию 2, но десятичные числа для бухгалтерии можно хранить не в целых рублях и дробных копейках, а в целых копейках или даже в долях копеек, и тогда ничего не потеряется.

Или, если очень нужно точное представление дробных десятичных чисел, можно использовать что-то типа marty::Decimal (если что, точка там плавает). Точность у меня может теряться только при делении (по умолчанию для деления используется точность 18 знаков после точки).

А если нужны целые большой размерности, то можно глянуть в буст, или посмотреть на marty::BigInt — целые числа произвольного размера.
Маньяк Робокряк колесит по городу
Go заменяет С++ ?
От: merge  
Дата: 07.05.25 12:23
Оценка: :)
Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".
Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?
Re[2]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 07.05.25 15:20
Оценка: +1
Здравствуйте, Pzz, Вы писали:

M>>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?

Pzz>А в какой области плюсы были бы незаменимы?

Из очевидного — браузеры?

ТАкже библиотеки со всякой математикой, параллельные вычисления, СУБД, сетевые приложения с видеокодеками и всякой обработкой. Короче, там где надо писать производительный код одновременно на разных уровнях абстракции: и ближе к железу, и оптимизации, и логику.
Re[3]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 14.05.25 18:48
Оценка: :)
Здравствуйте, Нomunculus, Вы писали:

Н>У меня впн иногда через Германию подключает. И ютуб крутит мне немецкую рекламу. Это жесть. Они даже про туалетную бумагу говорят, как будто на расстрел тебя ведут.


https://youtu.be/DIAWUT-EJzs?si=37fWATIks6Pi-Luo
Re[5]: Go заменяет С++ ?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 19.05.25 04:01
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>Современные принтеры, сканеры разговаривают по HTTP/HTTPS.


Pzz>Докеры всякие умеют грузить всякие запчасти по HTTP/HTTPS.


Эти дрова скорее всего в юзерспейсе пасутся, такая "системщина" ничем особым от обычных приложух не отличается
Маньяк Робокряк колесит по городу
Re[2]: Go заменяет С++ ?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 19.05.25 04:03
Оценка: +1
Здравствуйте, robo-forex, Вы писали:

RF> DSP алгоритмы вообще пишутся на Си, особенно в области embedded


Они замечательно пишутся и на плюсах, и получается гораздо лучше. Ну, если, конечно, под железку есть плюсовый компилятор
Маньяк Робокряк колесит по городу
Re[3]: Go заменяет С++ ?
От: undo75  
Дата: 19.05.25 05:30
Оценка: :)
M>Они замечательно пишутся и на плюсах, и получается гораздо лучше. Ну, если, конечно, под железку есть плюсовый компилятор

всегда думал что под ембеддед на асме пишут. нафиг на высокоуровневом языке. даже с?
Re[6]: Go заменяет С++ ?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 19.05.25 22:55
Оценка: +1
Здравствуйте, Философ, Вы писали:

Ф>Фиксированную точку вроде через BCD реализуют (реализовывали). Это вроде бы наиболее корректный и производительный путь.


Что за ерунда? Самый простой путь — берёшь uint32_t, и говоришь, что точка посередине, т.е. число с фикс точкой формата 16b.16b.

Сложение/вычитание — просто складываешь/вычитаешь, ничего больше делать не нужно (ну, только следить за переполнением, но это тоже элементарно).

Умножение — расширяешь множители до uint64_t, умножаешь, результат сдвигаешь на 16 бит вправо, усекаешь до uint32_t — всё, готово.

Деление — аналогично умножению, только сдвигать надо влево (или не нужно, сейчас что-то лень думать).

Куда уж проще и быстрее
Маньяк Робокряк колесит по городу
Re[10]: Go заменяет С++ ?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.05.25 11:39
Оценка: :)
Здравствуйте, Философ, Вы писали:

M>>Да ты мыслитель


Ф>Не смейся — я впервые в эту тему полез.


Но вполне уверенно ворвался в тему
Маньяк Робокряк колесит по городу
Re: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.25 15:03
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".


У меня такое впечатление, что на Go пишут в основном бакенд и прочие микросервисы.

M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?


А в какой области плюсы были бы незаменимы?
Re[3]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.25 16:38
Оценка:
Здравствуйте, Nuzhny, Вы писали:

M>>>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?

Pzz>>А в какой области плюсы были бы незаменимы?

N>Из очевидного — браузеры?


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

N>ТАкже библиотеки со всякой математикой, параллельные вычисления, СУБД, сетевые приложения с видеокодеками и всякой обработкой. Короче, там где надо писать производительный код одновременно на разных уровнях абстракции: и ближе к железу, и оптимизации, и логику.


По моим наблюдениям, библиотеки со всякой математикой сейчас всё больше на питоне пишут. Я понимаю, что у неё внутри неонка реальный код на C/C++, а питон этим всем только дерижирует, но тем не менее.

Насчет СУБД и сетевых приложений я бы поспорил. В основном этот код говорит, где взять и куда положить, а остальную работу делают даже не драйвера накопителей и сетевых карт, а их контроллеры, если уж мы говорим о реально высокой производительности.

Видеокодеки, опять же, их мало кто пишет, остальные в основном используют. И пишут их нередко на Си, не на C++. Там же из высокоуровневых абстракций, в основном, массив чисел или матрица их же. С другой стороны, я не вижу причин, почему бы и на Rust-е не написать...
Re[2]: Go заменяет С++ ?
От: merge  
Дата: 07.05.25 18:50
Оценка:
Здравствуйте, Pzz, Вы писали:



M>>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?


Pzz>А в какой области плюсы были бы незаменимы?


automotive, биржа?
вся низкоуровневая логика машинного зрения?
железное оборудование типа касс, бензоколонок?

то что я слышал лет 10 назад, как сейчас не в курсе
Re[4]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 07.05.25 19:05
Оценка:
Здравствуйте, Pzz, Вы писали:

N>>Из очевидного — браузеры?

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

Подожди, а Сафари? Получается, что три.
И ещё был один от Майкрософт а, который после IE, но до текущего. Его писали, писали, пальчики устали и забросили. К этому времени, C# был уже хорошей взрослой технологией. Был Rust. Но нет же.

Pzz>По моим наблюдениям, библиотеки со всякой математикой сейчас всё больше на питоне пишут. Я понимаю, что у неё внутри неонка реальный код на C/C++, а питон этим всем только дерижирует, но тем не менее.


Не тем не менее, а так и есть. От низкого уровня до прикладного написано на C++. Конечный код математики и дата саентимты уже на Питоне. Но его же можно свободно писать и на C++, потому что API для него присутствует параллельно с питоновским.

Pzz>Насчет СУБД и сетевых приложений я бы поспорил. В основном этот код говорит, где взять и куда положить, а остальную работу делают даже не драйвера накопителей и сетевых карт, а их контроллеры, если уж мы говорим о реально высокой производительности.

Pzz>Видеокодеки, опять же, их мало кто пишет, остальные в основном используют. И пишут их нередко на Си, не на C++. Там же из высокоуровневых абстракций, в основном, массив чисел или матрица их же. С другой стороны, я не вижу причин, почему бы и на Rust-е не написать...

То есть ты отрицаешь тот факт, что системное ПО тоже кто-то пишет? Или что? Да, понятно, что ниша плюсов сузилась, но вопрос же был в том, где он незаменим, а не в том насколько эта ниша широка.
Re[5]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.25 19:16
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>>>Из очевидного — браузеры?

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

N>Подожди, а Сафари? Получается, что три.

N>И ещё был один от Майкрософт а, который после IE, но до текущего. Его писали, писали, пальчики устали и забросили. К этому времени, C# был уже хорошей взрослой технологией. Был Rust. Но нет же.

Сафари — близкий родсвенник гуглохрому. Можно сказать, дядя. Который ит MS, тот умер и больше уже ни на чём не пишется.

N>То есть ты отрицаешь тот факт, что системное ПО тоже кто-то пишет? Или что? Да, понятно, что ниша плюсов сузилась, но вопрос же был в том, где он незаменим, а не в том насколько эта ниша широка.


Что есть системное ПО? docker — это системное ПО?
Re: Go заменяет С++ ?
От: Артём Австралия жж
Дата: 07.05.25 21:42
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".


Переписывают код из лихих 90-х с сомов с форточками?
Re: Go заменяет С++ ?
От: Doom100500 Израиль  
Дата: 08.05.25 05:30
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".


Я так пишу. Мне нравится Go своей еб*****стью (не такой как все). Появляется мотивация пошевелить мозгами в другую сторону — дофамин. Но думаю, что если писать на ставке каждый день, то надоест так — же, как и всё C-подобное.

M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?


Так сравнивать Go с плюсами, думаю, не корректно. Go — это сборщик мусора. Сборщик мусора — это вмешательство в работу твоего кода. В плюсах такого нет. Драйвер со сборщиком мусора писать неприятно. Встойку — тоже.
Спасибо за внимание
Re: Go заменяет С++ ?
От: Shmj Ниоткуда  
Дата: 08.05.25 06:02
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".

M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?

Ничего общего.

Тут дело в другом. Часто учат студентов именно по классическим языкам — как С++. Другого они тупо не знают пока.

А реальная жизнь требует более приземленных языков, которые решают более простые задачи — ведь не всем компиляторы да движки браузеров писать. Вот и приходится приглашать таким образом.
=сначала спроси у GPT=
Re[2]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.05.25 07:21
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Тут дело в другом. Часто учат студентов именно по классическим языкам — как С++. Другого они тупо не знают пока.


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


Эдсгер Дейкстра считал, что сложные задачи требуют простых языков. Но нонешнее поколение решателей сложных задач, наверное, круче Дейкстры...
Re: Go заменяет С++ ?
От: __kot2  
Дата: 08.05.25 10:58
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".

M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?
Мне предлагали работу по переписыванию сервисов с cpp на go. Наверное, просто хотели отрефакторить старое и сделать более поддерживаемым и начальство почему-то посчитало что одновременный переход на go имеет смысл. Сам я go знаю поверхностно, не могу сказать, насколько это хорошая идея
Re: Go заменяет С++ ?
От: _NN_  
Дата: 09.05.25 08:53
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".

M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?

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

В области бэкэнда гораздо больше библиотек для Go и интеграций с различными сервисами.
У Go есть определённые преимущества ну и конечно недостатки в виде недоязыка (кхе-кхе ).
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 09.05.25 16:13
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Сафари — близкий родсвенник гуглохрому. Можно сказать, дядя. Который ит MS, тот умер и больше уже ни на чём не пишется.


То есть браузеры, раз возражений нет.

Pzz>Что есть системное ПО?


Ты знаешь ответ на этот вопрос.

Pzz>docker — это системное ПО?


Конечно системное. Но много ли написано докеров? Или его написали один раз и все пользуются.
Re[3]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 09.05.25 16:15
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Эдсгер Дейкстра считал, что сложные задачи требуют простых языков. Но нонешнее поколение решателей сложных задач, наверное, круче Дейкстры...


Что-то мне подсказывает, что Дейкстра писал совсем другое ПО с другими требованиями
Re[7]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.05.25 16:24
Оценка:
Здравствуйте, Nuzhny, Вы писали:

Pzz>>Что есть системное ПО?


N>Ты знаешь ответ на этот вопрос.


Не уверен. Кажется, разные люди дают разный ответ на этот вопрос.

Pzz>>docker — это системное ПО?


N>Конечно системное.


А system-config-printer?

N>Но много ли написано докеров? Или его написали один раз и все пользуются.


А много ли написано ядер операционных систем, которыми люди пользуются?
Re[4]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.05.25 16:25
Оценка:
Здравствуйте, Nuzhny, Вы писали:

Pzz>>Эдсгер Дейкстра считал, что сложные задачи требуют простых языков. Но нонешнее поколение решателей сложных задач, наверное, круче Дейкстры...


N>Что-то мне подсказывает, что Дейкстра писал совсем другое ПО с другими требованиями


Ну я и говорю, ношнешнее поколение круче Дейкстры.
Re[2]: Go заменяет С++ ?
От: merge  
Дата: 12.05.25 06:11
Оценка:
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, merge, Вы писали:


M>>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".

M>>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?
__>Мне предлагали работу по переписыванию сервисов с cpp на go. Наверное, просто хотели отрефакторить старое и сделать более поддерживаемым и начальство почему-то посчитало что одновременный переход на go имеет смысл. Сам я go знаю поверхностно, не могу сказать, насколько это хорошая идея

видимо очередному менеджеру требуется в достижениях за год написать "переписали старый говносервис на новый которые быстрее и легче поддерживать"
Re[8]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 12.05.25 07:33
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А system-config-printer?


Не знаю, что это такое, но по названию явно оно. Там тоже много математики, которую можно и нужно переносить на GPU?

Pzz>А много ли написано ядер операционных систем, которыми люди пользуются?


Явно не много. И они написаны не только на С. Значит ли это, что С не нужен?
Re[9]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.05.25 07:47
Оценка:
Здравствуйте, Nuzhny, Вы писали:

Pzz>>А system-config-printer?


N>Не знаю, что это такое, но по названию явно оно. Там тоже много математики, которую можно и нужно переносить на GPU?


Это — стандартная прогдамма настройки принтеров для Linux.

Pzz>>А много ли написано ядер операционных систем, которыми люди пользуются?


N>Явно не много. И они написаны не только на С. Значит ли это, что С не нужен?


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

system-config-printer так ваще на питоне написан.

Но конечно, если что-то уже написано на C++, то оно так и будет по наследству тянуться до бесконечности.
Re: Go заменяет С++ ?
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.05.25 07:51
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".

M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?
С какой-то точки зрения все языки "заменяют С++".
Ну, просто потому, что на C++ можно написать вообще всё.
Значит, всякий раз, когда кто-то выбирает для проекта X язык Y, он (осознанно или неосознанно) делает выбор между Y и С++. Не в пользу С++.
И либо этот выбор оказывается ошибкой (ой, мы так и не смогли написать прошивку для bluetooh-метки автосигнализации на питоне), либо приводит к успеху проекта.
Если проекты в какой-то нише при реализации на Y оказываются успешными достаточно часто, значит можно говорить о том, что Y заменяет C++ в этой нише.
Вот в нише "RESTful web-services" С++ заменяется на примерно любой язык, от Перла и Лиспа до JavaScript.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 12.05.25 08:44
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Тезис, который я оспариваю, заключается в незаменимости C++ для системного программирования.


Я этот тезис и не выдвигал, кстати. Исходный посыл:

Из очевидного — браузеры?

ТАкже библиотеки со всякой математикой, параллельные вычисления, СУБД, сетевые приложения с видеокодеками и всякой обработкой. Короче, там где надо писать производительный код одновременно на разных уровнях абстракции: и ближе к железу, и оптимизации, и логику.


Если какое-то ПО является системным, но его пофиг на каком языке и писать, то пусть и пишут.

Переход на системное ПО был в свете:
Pzz>Видеокодеки, опять же, их мало кто пишет, остальные в основном используют

Мы же не говорим о том, что много пишут, а что мало. Понятно, что чем дороже разработка, тем меньше народа такое пишет. И что ниша С++ сжимается. Но тут также как с браузерами — пока никто и не пытается, хотя и возможности, и шанс у той же Майкрософт были. Ну и что, что кодеков пишут мало? Их же пишут. Вот, нейросети 99% пишут на Питоне на PyTorch, но ядро его libTorch написано на С++. Ну и что, что на С++ мало — пишут же, тут Питон его заменить не может, Go тоже, Rust не пытается. И таких системных библиотек, новых и свежих, довольно много. Могу ссылок накидать, если хочешь.
Re[11]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.05.25 09:28
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Мы же не говорим о том, что много пишут, а что мало. Понятно, что чем дороже разработка, тем меньше народа такое пишет. И что ниша С++ сжимается. Но тут также как с браузерами — пока никто и не пытается, хотя и возможности, и шанс у той же Майкрософт были. Ну и что, что кодеков пишут мало? Их же пишут. Вот, нейросети 99% пишут на Питоне на PyTorch, но ядро его libTorch написано на С++. Ну и что, что на С++ мало — пишут же, тут Питон его заменить не может, Go тоже, Rust не пытается. И таких системных библиотек, новых и свежих, довольно много. Могу ссылок накидать, если хочешь.


Я тут выяснил случайно, что задача:

1. Прочитать PNG-файл размером 5100x7016, цветной, 8-битный
2. Смасштабировать в два раза в любую сторону методом билинейной интерполяции
2. Записать в виде PNG-файла

требует примерно одинакового времени CPU, как в реализации на чистом Go, так и в реализации с помощью ImageMagic (на чём он там написан? C или C++, не помню точно).

Так что я не вижу таких уж особых проблем в написании кодеков на Go.
Re[12]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 12.05.25 09:58
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>требует примерно одинакового времени CPU, как в реализации на чистом Go, так и в реализации с помощью ImageMagic (на чём он там написан? C или C++, не помню точно).


О, на Go уже свои libpng есть? Круто

Pzz>Так что я не вижу таких уж особых проблем в написании кодеков на Go. Не скинешь ссылку? Интересно
Re[13]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.05.25 10:31
Оценка:
Здравствуйте, Nuzhny, Вы писали:

Pzz>>требует примерно одинакового времени CPU, как в реализации на чистом Go, так и в реализации с помощью ImageMagic (на чём он там написан? C или C++, не помню точно).


N>О, на Go уже свои libpng есть? Круто


Даже прям в стандартной библиотеке.
Re[14]: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 12.05.25 12:52
Оценка:
Здравствуйте, Pzz, Вы писали:

N>>О, на Go уже свои libpng есть? Круто

Pzz>Даже прям в стандартной библиотеке.

Пишут, что в быстродействии очень много зависит от zlib. Видимо, много библиотек уже используют многопоточные версии всех стандартных библиотек, в отличие от классических на С, поэтому так хорошо и выступают. Но круто, да.

Видеокодеки для видео сильно сложнее, их разрабатывают отдельные команды конкретно под устройство обычно (наряду с ванильными версиями, да). Не уверен, что у Го получится так просто ворваться.
Re[15]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.05.25 13:04
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>>>О, на Go уже свои libpng есть? Круто

Pzz>>Даже прям в стандартной библиотеке.

N>Пишут, что в быстродействии очень много зависит от zlib. Видимо, много библиотек уже используют многопоточные версии всех стандартных библиотек, в отличие от классических на С, поэтому так хорошо и выступают. Но круто, да.


Не, он однопоточный, насколько я понимаю.

N>Видеокодеки для видео сильно сложнее, их разрабатывают отдельные команды конкретно под устройство обычно (наряду с ванильными версиями, да). Не уверен, что у Го получится так просто ворваться.


Зависит от потребности.
Re[12]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 12.05.25 13:52
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Я тут выяснил случайно, что задача...

Pzz>Так что я не вижу таких уж особых проблем в написании кодеков на Go.

Гошка плохо подходит для задач нагруженных вычислениями — её для другого делали: гошка — превосходный инструмент для задач, сильно нагруженных I/O операциями.
В гошке управление планировщиком скрыто от программиста — нет возможности "привязать" горутину к конкретному ядру. Это мешает оптимизации кэширования: непредсказуемость попадания горутин на потоки OS приводит к "cache coherence overhead". Тащемта это одна из основных причин, по которым в игровых двужках прибивают отдельные потоки к ядрам с помощью CPU affinity mask.

Вторая причина — в гошке нет штатных способов контроля за расположением полей в памяти — это чрезвычайно важно, например для того, чтобы избежать false-sharing. Из-за этого там используют вот такие уродские решения:

type PaddedShared struct {
    A int64
    _ [56]byte // Заполнение до размера кэш-линии (64 байта)
    B int64
}


Третья — поддержка SIMD ограничена: пакет simd появился и существует именно потому, что мы до сих пор не можем положиться на автовекторизацию — вынуждены распространённые операции над массивами векторизовать руками. По крайней мере в марте в документации об этом было написано прямо.


Не надо писать на гошке вычислительные задачи!

Всё сказанное выше — личное мнение, если не указано обратное.
Re[13]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.05.25 14:10
Оценка:
Здравствуйте, Философ, Вы писали:

Pzz>>Я тут выяснил случайно, что задача...

Pzz>>Так что я не вижу таких уж особых проблем в написании кодеков на Go.

Ф>Гошка плохо подходит для задач нагруженных вычислениями — её для другого делали: гошка — превосходный инструмент для задач, сильно нагруженных I/O операциями.


В принципе, да. В корпусе — не такая уж она и медленная, как выясняется.

Ф>В гошке управление планировщиком скрыто от программиста — нет возможности "привязать" горутину к конкретному ядру. Это мешает оптимизации кэширования: непредсказуемость попадания горутин на потоки OS приводит к "cache coherence overhead". Тащемта это одна из основных причин, по которым в игровых двужках прибивают отдельные потоки к ядрам с помощью CPU affinity mask.


runtime.LockOSThread — привязывает гороутинку к нити операционной системы.
Ну а дальше можно системно-зависимыми способоами приделять нить к ядру.

Ф>Вторая причина — в гошке нет штатных способов контроля за расположением полей в памяти — это чрезвычайно важно, например для того, чтобы избежать false-sharing. Из-за этого там используют вот такие уродские решения:


Ну, примерно как и в Си

Недавно появились маркеры раскладки структур. Пока только struct.HostLayout

Ф> Третья — поддержка SIMD ограничена: пакет simd появился и существует именно потому, что мы до сих пор не можем положиться на автовекторизацию — вынуждены распространённые операции над массивами векторизовать руками. По крайней мере в марте в документации об этом было написано прямо.


Это да.
Re[14]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 12.05.25 14:46
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>runtime.LockOSThread — привязывает гороутинку к нити операционной системы.

Pzz>Ну а дальше можно системно-зависимыми способоами приделять нить к ядру.

не знал! Спасибо.
Погуглил про этот вызов — похоже на поход по минному полю: https://github.com/golang/go/issues/21827
Сейчас на скорую руку попробовал оригинальный код из гугловой группы — использование этого вызова похоже на хождение по минному полю, оно и понятно: он в общем-то не для этого делался.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[13]: Go заменяет С++ ?
От: · Великобритания  
Дата: 12.05.25 15:51
Оценка:
Здравствуйте, Философ, Вы писали:

Ф> Третья — поддержка SIMD ограничена: пакет simd появился и существует именно потому, что мы до сих пор не можем положиться на автовекторизацию — вынуждены распространённые операции над массивами векторизовать руками. По крайней мере в марте в документации об этом было написано прямо.

А в каком ЯП (ну кроме ассемблера) можно _полагаться_ на автовекторизацию?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[14]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 12.05.25 16:25
Оценка:
Здравствуйте, ·, Вы писали:

·>А в каком ЯП (ну кроме ассемблера) можно _полагаться_ на автовекторизацию?


А что не так с C/C++? Говорят, -O3 чудеса творит, особенно с укзанием целевой архитектуры. Говорят, что GCC может автоматически векторизировать циклы
Говорят, что LLVM — один из самых продвинутых компиляторов с т.з. оптимизаций и векторизации.
Я не плюсовик, если что.

Насчёт ассемблера ты круто пошутил конечно Где автоXXXX и где ассемблер...

Мои эксперименты с плюсами регулярно упирались в то, чтобы как-нибудь сделать так, чтобы компилятор не выкинул мой код и время выполнения не было равно нулю. Сломать это поведение было не так то и просто.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[15]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.05.25 16:59
Оценка:
Здравствуйте, Философ, Вы писали:

Pzz>>runtime.LockOSThread — привязывает гороутинку к нити операционной системы.

Pzz>>Ну а дальше можно системно-зависимыми способоами приделять нить к ядру.

Ф>не знал! Спасибо.

Ф>Погуглил про этот вызов — похоже на поход по минному полю: https://github.com/golang/go/issues/21827

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

Я использовал этот вызов, когда надо было кое-какой гошный код на венду перенести. У венды встречается API, в котором надо сделать серию вызовов, и все должны быть на контексте одного и того же потока операционной системы. Иначе венде плохеет.
Re: Go заменяет С++ ?
От: undo75  
Дата: 14.05.25 08:53
Оценка:
M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".
M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?
языки лишь инструменты. не знаю го, но уверен, что какой-нить квейк написать на с++ куда проще чем на бейсике через поук.
сильно сомневаюсь, что на го системные задачи проще решать, чем на с++.
а так — немецкий значительно лучше для ругани, например подходит, чем французский. и т.д. и т.п.
Re[2]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 14.05.25 12:56
Оценка:
Здравствуйте, undo75, Вы писали:

U>языки лишь инструменты. не знаю го, но уверен...


Сильно советую с ним познакомиться — ты его ещё не раз увидишь, это годный инструмент. Ну а так — да, молотком гвозди забивать удобнее чем гаечным ключом.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.05.25 18:26
Оценка:
Здравствуйте, undo75, Вы писали:

U>сильно сомневаюсь, что на го системные задачи проще решать, чем на с++.


Смотря какие задачи.

Например, если задача включает в себя много HTTP и много работы с TLS-сертификатами, то ее значительно проще делать на Go. Благодаря первоклассной поддержке того и другого в стандартной библиотеке.

А много HTTP и много TLS — не редкость для определенного класса системных задач.
Re[3]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.05.25 18:27
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>У меня впн иногда через Германию подключает. И ютуб крутит мне немецкую рекламу. Это жесть. Они даже про туалетную бумагу говорят, как будто на расстрел тебя ведут.


Это не потому, что в нас с детства заложена ассоциация между немцами и фашистами?
Re[4]: Go заменяет С++ ?
От: Нomunculus Россия  
Дата: 14.05.25 18:39
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Нomunculus, Вы писали:


Н>>У меня впн иногда через Германию подключает. И ютуб крутит мне немецкую рекламу. Это жесть. Они даже про туалетную бумагу говорят, как будто на расстрел тебя ведут.


Pzz>Это не потому, что в нас с детства заложена ассоциация между немцами и фашистами?


Разумеется поэтому. Я ж просто свои ощущения описал
Re[4]: Go заменяет С++ ?
От: undo75  
Дата: 16.05.25 13:42
Оценка:
Pzz>Это не потому, что в нас с детства заложена ассоциация между немцами и фашистами?

Джером К. Джером в трое в лодке писал даже) цитата совершенно не точная — по памяти. гуглить лень.
там эпизод был на каком-то приеме. исполнял кто-то песню на немецком. их разыграли, мол вы не знаете немецкого, но на самом деле это очень смешная песня и для этикета надо ржать. что они и делали. певец негодовал. на самом деле это была какая-то грустная драматическая песня, полная скорби.
в конце он ополчился на ржущих и выдал тираду ругани в их адрес на немецком. "мне кажется немецкий язык специально предназначен для ругательств!"
Re[3]: Go заменяет С++ ?
От: undo75  
Дата: 16.05.25 15:55
Оценка:
Pzz>А много HTTP и много TLS — не редкость для определенного класса системных задач.
блин. хттп и тлс это все же не уровень драйверов и высокопроизводительного графического движка.
тут и шарп и ява бы справились вполне
Re[4]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 16.05.25 17:21
Оценка:
Здравствуйте, undo75, Вы писали:


Pzz>>А много HTTP и много TLS — не редкость для определенного класса системных задач.

U>блин. хттп и тлс это все же не уровень драйверов и высокопроизводительного графического движка.
U>тут и шарп и ява бы справились вполне

Тут речь не только про HTTP — про любой IO. Если тебе надо делать множество чтений или записей (откуда угодно и куда угодно) с небольшой обработкой прочитанного, то гошка будет хорошим выбором.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[5]: Go заменяет С++ ?
От: undo75  
Дата: 17.05.25 07:32
Оценка:
Ф>Тут речь не только про HTTP — про любой IO. Если тебе надо делать множество чтений или записей (откуда угодно и куда угодно) с небольшой обработкой прочитанного, то гошка будет хорошим выбором.

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

п.с. всегда бесили вот названия и картинки типа dbeaver. бобер. сразу ларри вспоминаются с пасхалками. а конкретно в русификации надо было написать "подоить бобра" = "подрочить" ) короче по возможности только хардкор — mssms и pgadmin для постгря...
Re[6]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 17.05.25 12:35
Оценка:
Здравствуйте, undo75, Вы писали:


Ф>>Тут речь не только про HTTP — про любой IO. Если тебе надо делать множество чтений или записей (откуда угодно и куда угодно) с небольшой обработкой прочитанного, то гошка будет хорошим выбором.


U>вопрос конечно холивора и закостенелости. но повод ли для этого изучать что-то, если инструмент прекрасно справляется с задачей?


Если ты про шарп, то он с такими задачами справляется хуже: конкурентность в шарпе явная (я про async/await), а в гошке она из коробки — у тебя простой линейный стиль написания. Заметь, программист, который понимает как работают async/await — редкий зверь. Но это было бы половина беды: для IO-bound приложений тебе придётся что-то явно городить с размером стека — твои потоки сожрут всю доступную память под свои стеки и проблема встанет в полный рост.
Попытка уложить число потоков в кол-во ядер ОС на шарпе — задача в общем случае не решаемая, а значит твоя программа будет жрать System Time на переключение контекстов.

ЗЫ: гаечный ключ всё же нужен для закручивания, для забивания молоток лучше подходит
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 17.05.2025 13:09 Философ . Предыдущая версия .
Re[7]: Go заменяет С++ ?
От: dsorokin Россия  
Дата: 17.05.25 14:52
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Если ты про шарп, то он с такими задачами справляется хуже: конкурентность в шарпе явная (я про async/await), а в гошке она из коробки — у тебя простой линейный стиль написания.


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

"Заметь, программист, который понимает как работают async/await писать на хаскеле — редкий зверь."

Прощу прощения за почти дословное использование твоей фразы.

Такие вот дела
Re[4]: Go заменяет С++ ?
От: Pzz Россия https://github.com/alexpevzner
Дата: 17.05.25 16:16
Оценка:
Здравствуйте, undo75, Вы писали:

Pzz>>А много HTTP и много TLS — не редкость для определенного класса системных задач.

U>блин. хттп и тлс это все же не уровень драйверов и высокопроизводительного графического движка.
U>тут и шарп и ява бы справились вполне

Современные принтеры, сканеры разговаривают по HTTP/HTTPS.

Докеры всякие умеют грузить всякие запчасти по HTTP/HTTPS.

Ну и т.д. и т.п.
Re: Go заменяет С++ ?
От: robo-forex Россия [реклама удалена модератором]
Дата: 18.05.25 13:40
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".

M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?
DSP алгоритмы вообще пишутся на Си, особенно в области embedded
[реклама удалена модератором]
Re[7]: Go заменяет С++ ?
От: undo75  
Дата: 19.05.25 05:28
Оценка:
Ф>Если ты про шарп, то он с такими задачами справляется хуже: конкурентность в шарпе явная (я про async/await), а в гошке она из коробки — у тебя простой линейный стиль написания. Заметь, программист, который понимает как работают async/await — редкий зверь. Но это было бы половина беды: для IO-bound приложений тебе придётся что-то явно городить с размером стека — твои потоки сожрут всю доступную память под свои стеки и проблема встанет в полный рост.
Ф>Попытка уложить число потоков в кол-во ядер ОС на шарпе — задача в общем случае не решаемая, а значит твоя программа будет жрать System Time на переключение контекстов.

а можно пример задач таких? фантазии что-то не хватает
Re[5]: Go заменяет С++ ?
От: undo75  
Дата: 19.05.25 08:11
Оценка:
R>Как сейчас помню, 98-й год, Visual Studio 5.0. Нам понадобилось реализовать вычисление квадратного корня для чисел с фиксированной точкой. Табличное решение с интерполяцией. Я сразу же взялся за ассемблер, а вариант писать на C я даже не рассматривал. После того как реализовал и всё это успешно взетело, мне мой тогдашний руководитель предложил реализовать то же самое на Сях, благо это было не сложно. Когда же я сделал это и посмотрел в сгенерированный код, я прозрел. И навсегда потерял желание состязаться с компилером в оптимизациях. Компилер меня уделал и по памяти, и по производительности.

понятно, что сейчас на асме писать смысла нет. в каноны уже даже вошло "писать функцию извлечения квадратного корня" синоним "изобретать велосипед". а например алгоритм поиска кратчайшего пути — уже под вопросом что лучше будет в итоге
Re[6]: Go заменяет С++ ?
От: rg45 СССР  
Дата: 19.05.25 08:27
Оценка:
Здравствуйте, undo75, Вы писали:

U>а например алгоритм поиска кратчайшего пути — уже под вопросом что лучше будет в итоге


Ну, для меня это вообще не вопрос. В определенный период я написал такое количество версий поиска пути, что даже не смогу припомнить все варианты. Взвешенные, невзвешенные, с квадратной волной, с круглой волной, с одним источником, с двумя и с множеством, с различным числом и схемами распространения волны, с Бразенхамом, без него, с собственными примочками сглаживания... И всё это ещё и в различных комбинациях. При этом я постоянно мониторил сгенерированный код. В те поры я вообще был зациклен на производительности. Времена были такие. Визуализация FPS в реалтайме была неотъемлемым атрибутом разработки. Могу сказать с полной уверенностью, что, если бы я писал это на асме, то просто угробил бы кучу времени, но результат лучше не был бы. А вот хуже — легко.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 19.05.2025 8:47 rg45 . Предыдущая версия . Еще …
Отредактировано 19.05.2025 8:42 rg45 . Предыдущая версия .
Отредактировано 19.05.2025 8:42 rg45 . Предыдущая версия .
Отредактировано 19.05.2025 8:37 rg45 . Предыдущая версия .
Отредактировано 19.05.2025 8:36 rg45 . Предыдущая версия .
Отредактировано 19.05.2025 8:32 rg45 . Предыдущая версия .
Отредактировано 19.05.2025 8:28 rg45 . Предыдущая версия .
Отредактировано 19.05.2025 8:28 rg45 . Предыдущая версия .
Re[4]: Go заменяет С++ ?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 19.05.25 10:58
Оценка:
Здравствуйте, undo75, Вы писали:

M>>Они замечательно пишутся и на плюсах, и получается гораздо лучше. Ну, если, конечно, под железку есть плюсовый компилятор


U>всегда думал что под ембеддед на асме пишут. нафиг на высокоуровневом языке. даже с?


Нафиг писать годами на асме то, что можно написать за недели на плюсах, и ещё и спортировать или даже просто взять код с больших систем?
Маньяк Робокряк колесит по городу
Re[8]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 19.05.25 12:13
Оценка:
Здравствуйте, undo75, Вы писали:


U>а можно пример задач таких? фантазии что-то не хватает


Например бэкап — оч. характерный пример IO-bound задачи с высокой степенью параллелилизма. Когда-то я таким занимался.

Ещё примеры:
Поиск по дискам — просто множество IO-операций.
Инсталляция, апдейт, например — пакетные менеджеры очень много контрольных сумм считают, вычисления минимальны.
Системы мониторинга, например — сбор метрик с множества источников, агрегация данных телеметрии, парсинг и индексация логов, поиск по логам
Работа с периферийными устройствами, например — обработка данных с датчиков
Облака, например — синхронизация данных между локальным диском и облачным хранилищем
Всё сказанное выше — личное мнение, если не указано обратное.
Re[5]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 19.05.25 12:35
Оценка:
Здравствуйте, rg45, Вы писали:

R>Как сейчас помню, 98-й год, Visual Studio 5.0. Нам понадобилось реализовать вычисление квадратного корня для чисел с фиксированной точкой.


Фиксированную точку вроде через BCD реализуют (реализовывали). Это вроде бы наиболее корректный и производительный путь.
ЕМНИП, Си не умеет в BCD и никогда не умела. Даже некоторые битовые операции — только асм.
Я вообще не знаю ни одного языка общего назначения, который бы BCD знал и юзал. Неофиты даже не знают, что такое существует.

Поправь, если ошибаюсь.
Всё сказанное выше — личное мнение, если не указано обратное.
Re: Go заменяет С++ ?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 19.05.25 13:07
Оценка:
Здравствуйте, merge, Вы писали:

M>Смотрю иногда пишут "знание С++ и желание выучить Go и на нем писать в дальнейшем".

M>Область плюсов сужается или идет замена в принципе и нет областей где плюсы выглядели бы незаменимы?

Кстати, плюсовый userver в этом плане как раз является ответом гошечке, фреймворк делался с оглядкой на него в том числе. По вакансиям видно, что в Яндексе используется и userver, и Go. Значит, ни у одного из них нет явного преимущества в этих задачах.
Re[5]: Go заменяет С++ ?
От: undo75  
Дата: 19.05.25 16:37
Оценка:
M>Нафиг писать годами на асме то, что можно написать за недели на плюсах, и ещё и спортировать или даже просто взять код с больших систем?

незачем. тем более скорее всего компилятор куда лучше преуспеет с оптимизацией.
вопрос в другом — нужна ли экзотика типа го ) имхо поболит и отвалится. а классика никуда не денется. чисто мое имхо.
Re[7]: Go заменяет С++ ?
От: Философ Ад http://vk.com/id10256428
Дата: 20.05.25 01:57
Оценка:
Здравствуйте, Marty, Вы писали:

M>Что за ерунда? Самый простой путь — берёшь uint32_t, и говоришь, что точка посередине, т.е. число с фикс точкой формата 16b.16b.


Да, ты прав — я тут посовещался с qwen'ом на эту тему. BCD действительно сильно медленее. Квэн говорит, что именно твой подход использовался в игровых движках.
Однако, похоже, всё определяют цели. Я всякие чаты вот таким вопросом мучал:

Действительно ли ручная реализация fixed-point арифметики может привести к потере точности. Приведи примеры, где ручная реализация fixed-point приведёт к потере точности, а использование BCD — нет.

  здесь часть ответа
Когда лучше использовать BCD

  • Бухгалтерские программы
  • Кассовые аппараты
  • Системы учёта налогов
  • Встроенные терминалы

📌 BCD позволяет точно представлять такие числа, как `0.1`, `0.01`, `0.001` и т.д., без ошибок округления.

---

  • Когда выгоднее использовать Fixed-Point

    • Игровые движки (до FPU)
    • Графические системы
    • Аудио/видео кодирование
    • Микроконтроллеры
    • Быстрые математические библиотеки

    📌 Fixed-point эффективен по скорости и памяти, но требует аккуратности при умножении и делении.

    ---

  • Как избежать потери точности в fixed-point?

    • Используйте большие типы (`int64_t`) для промежуточных вычислений
    • Добавляйте округление перед сдвигами:
      int32_t result = (temp + (1 << 15)) >> 16; // +0.5 перед сдвигом

    • Избегайте деления, используйте предвычисленные значения
    • Храните деньги в целых копейках, а не в долях

    ---

  • Итог

    ЗадачаFixed-PointBCD
    Финансовые расчёты⚠️ Может давать ошибки✅ Точные
    Графика/физика✅ Отлично подходит❌ Неэффективно
    Вывод на экран⚠️ Нужны преобразования✅ Легко выводить
    Вычисления✅ Быстро, но с ошибками✅ Точно, но медленно
    📌 Fixed-Point — это компромисс между скоростью и точностью.
    📌 BCD — это выбор, когда точность важнее производительности.

    ---

  • Дополнительно: BCD vs Fixed-Point в ассемблере

    ОперацияFixed-Point (16.16)BCD
    Сложение
    add eax, ebx
    add al, bl
    daa
    Умножение
    mov edx, eax
    imul edx, ebx
    shr edx, 16
    mov eax, edx
    Ручная реализация, занимает много тактов
    Деление
    shl eax, 16
    idiv ebx
    shl eax, 16
    div ebx
    ---

  • Вывод

    • Fixed-point арифметика может привести к потере точности, особенно при работе с числами, которые не представимы точно в двоичном виде
    • BCD обеспечивает абсолютную десятичную точность, но менее эффективен по памяти и скорости
    • Для финансовых систем: либо BCD, либо fixed-point, работающий только с копейками (целые числа)
    • Для высокопроизводительных вычислений: fixed-point или float/double/SIMD
  • Всё сказанное выше — личное мнение, если не указано обратное.
    Re[9]: Go заменяет С++ ?
    От: Философ Ад http://vk.com/id10256428
    Дата: 20.05.25 05:47
    Оценка:
    Здравствуйте, Marty, Вы писали:

    M>Да ты мыслитель


    Не смейся — я впервые в эту тему полез. Про BCD знал из книжки Юрова "Ассемблер". Я по этой книжке асм учил, когда у меня ещё компа не было. Не надо было до этого момента.
    Вот и посидел ночью с квеном пообщался. Разметку текста для цитаты, кстати, тоже он делал.
    Всё сказанное выше — личное мнение, если не указано обратное.
    Re[6]: Go заменяет С++ ?
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 20.05.25 11:47
    Оценка:
    Здравствуйте, Marty, Вы писали:

    Pzz>>Докеры всякие умеют грузить всякие запчасти по HTTP/HTTPS.


    M>Эти дрова скорее всего в юзерспейсе пасутся, такая "системщина" ничем особым от обычных приложух не отличается


    Мне не близка идея считать системным ПО, которое в именно вот в кернелспейсе.

    А как быть с микроядрами? Там примерно всё в юзерспейсе.
    Re[6]: Go заменяет С++ ?
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 20.05.25 11:52
    Оценка:
    Здравствуйте, Философ, Вы писали:

    Ф>Я вообще не знаю ни одного языка общего назначения, который бы BCD знал и юзал. Неофиты даже не знают, что такое существует.


    PL/1, наверное.
    Re[9]: Go заменяет С++ ?
    От: undo75  
    Дата: 20.05.25 12:08
    Оценка:
    Ф>Например бэкап — оч. характерный пример IO-bound задачи с высокой степенью параллелилизма. Когда-то я таким занимался.
    зачем в бэкапе параллелизм? наоборот же процесс тормозиться будет. ио-устройство ведь одно? или не одно? ну тогда да

    Ф>Ещё примеры:

    Ф>Поиск по дискам — просто множество IO-операций.
    Ф>Инсталляция, апдейт, например — пакетные менеджеры очень много контрольных сумм считают, вычисления минимальны.
    Ф>Системы мониторинга, например — сбор метрик с множества источников, агрегация данных телеметрии, парсинг и индексация логов, поиск по логам
    Ф>Работа с периферийными устройствами, например — обработка данных с датчиков
    Ф>Облака, например — синхронизация данных между локальным диском и облачным хранилищем

    ты считаешь высокоуровневый язык с этим лучше справится?
    Re[10]: Go заменяет С++ ?
    От: Nuzhny Россия https://github.com/Nuzhny007
    Дата: 20.05.25 12:44
    Оценка:
    Здравствуйте, undo75, Вы писали:

    U>зачем в бэкапе параллелизм? наоборот же процесс тормозиться будет. ио-устройство ведь одно? или не одно? ну тогда да


    Это сильно зависит от диска (HDD/SSD), бэкап по сети, на один или несколько источников и т.д. и т.п. Он может быть инкрементальгый, например, или надо что-то заархивировать.

    U>ты считаешь высокоуровневый язык с этим лучше справится?


    Я слышал, что тот же Zabbix с С на Го переписывают.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.