Информация об изменениях

Сообщение Re[13]: Оставаться в С++ или уходить? от 30.09.2019 11:03

Изменено 30.09.2019 11:05 lpd

Re[13]: Оставаться в С++ или уходить?
Здравствуйте, Stanislav V. Zudin, Вы писали:

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


SVZ>Во-первых, из бэкенда С++ никто не вытеснял. Бэкенд — он разный бывает.


Разный бэкенд? Ну может <10% на C++, больше не видел.

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

SVZ>Там рулят ява с шарпом.

Ну о том и речь. А С++ сейчас в основном только в десктоп-софте, иначе никаких гигагерцев не хватит.

lpd>>Никто не хочет в большой программе при добавлении каждого нового указателя думать, а не получится ли кольцевая сылка. Зачем это?


SVZ>Тут ключевое: "никто не хочет думать" При правильно выбранной архитектуре думать не надо, делаешь по образу и подобию.


Для "правильности" архитектуры критериев много. Ты зачем-то добавляешь требования умных указателей(отсутствие круговых ссылок), хотя оно вполне может противоречить более важным критериям архитектуры.

lpd>>Я не особенно опытный архитектор, но как-то писал сервер для мобильных клиентов на С++, и круговые ссылки там были(умные указатели, естественно, не использовал).


SVZ>Круговые ссылки ессно нужны, иначе как ты получишь доступ от дочернего объекта к родителю.

SVZ>Но они не должны влиять на время жизни объектов.

Не понял. С умными указателями зависимость между круговыми ссылками и временем жизни объектов прямая. А ссылается на В, В обратно ссылается на А. У обоих счетчик ссылок будет =1, если не использовать weak_ptr. Я что-то упустил?

lpd>>Язык должен позволять выразить любую архитектуру, причем простым и удобным образом. А не требовать от разработчиков соблюдать какие-то искуственные правила, усложняя их жизнь разнообразием видов weak/shared/unique поинтеров.


SVZ>Ну вообще-то не должен.


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

SVZ>В каждом языке есть свои плюсы и минусы. Универсального всемогутора не получится. D был неплохой кандидат, но чегой-то не взлетает.


Не все, а бэкенд и десктоп можно было бы писать на одном и том же — не вижу сложностей кроме легаси.

SVZ>В Яве мне нравилась иммутабельность объектов и атомарность присваивания ссылок. Для многопоточного кода — просто супер.

SVZ>Но зато хрен ты сделаешь cache-friendly данные. Для Явы/шарпа это будет жутким извратом, зато на С/С++ получается естественным образом.
Яву лично я не люблю даже не из-за скорости, а из-за самого наличия JVM и промежуточного представления кода. Но это вопрос вкуса.
А размещение данных в памяти считаю элементарной необходимой для любого языка общего назначения вещью, которую в яве и c# убрали без серьезных причин, обосновывая байт-код ненужной на практике портабельностью.
Re[13]: Оставаться в С++ или уходить?
Здравствуйте, Stanislav V. Zudin, Вы писали:

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


SVZ>Во-первых, из бэкенда С++ никто не вытеснял. Бэкенд — он разный бывает.


Разный бэкенд? Ну может <10% на C++, больше не видел.

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

SVZ>Там рулят ява с шарпом.

Ну о том и речь. А С++ сейчас в основном только в десктоп-софте, иначе никаких гигагерцев и гигабайтов не хватит.

lpd>>Никто не хочет в большой программе при добавлении каждого нового указателя думать, а не получится ли кольцевая сылка. Зачем это?


SVZ>Тут ключевое: "никто не хочет думать" При правильно выбранной архитектуре думать не надо, делаешь по образу и подобию.


Для "правильности" архитектуры критериев много. Ты зачем-то добавляешь требования умных указателей(отсутствие круговых ссылок), хотя оно вполне может противоречить более важным критериям архитектуры в некоторых случаях.

lpd>>Я не особенно опытный архитектор, но как-то писал сервер для мобильных клиентов на С++, и круговые ссылки там были(умные указатели, естественно, не использовал).


SVZ>Круговые ссылки ессно нужны, иначе как ты получишь доступ от дочернего объекта к родителю.

SVZ>Но они не должны влиять на время жизни объектов.

Не понял. С умными указателями зависимость между круговыми ссылками и временем жизни объектов прямая. А ссылается на В, В обратно ссылается на А. У обоих счетчик ссылок будет =1, если не использовать weak_ptr. Я что-то упустил?

lpd>>Язык должен позволять выразить любую архитектуру, причем простым и удобным образом. А не требовать от разработчиков соблюдать какие-то искуственные правила, усложняя их жизнь разнообразием видов weak/shared/unique поинтеров.


SVZ>Ну вообще-то не должен.


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

SVZ>В каждом языке есть свои плюсы и минусы. Универсального всемогутора не получится. D был неплохой кандидат, но чегой-то не взлетает.


Не все, а бэкенд и десктоп можно было бы писать на одном и том же — не вижу сложностей кроме легаси.

SVZ>В Яве мне нравилась иммутабельность объектов и атомарность присваивания ссылок. Для многопоточного кода — просто супер.

SVZ>Но зато хрен ты сделаешь cache-friendly данные. Для Явы/шарпа это будет жутким извратом, зато на С/С++ получается естественным образом.
Яву лично я не люблю даже не из-за скорости, а из-за самого наличия JVM и промежуточного представления кода. Но это вопрос вкуса.
А размещение данных в памяти считаю элементарной необходимой для любого языка общего назначения вещью, которую в яве и c# убрали без серьезных причин, обосновывая байт-код ненужной на практике портабельностью.