AG>P.S. Я не спорю, что разработка нового пректа — в разы интереснее, нежели копание в старом "г/м", но тем не менее, факт наличия старых (нуждающихся в рефакторинге) проектов — AG>также способствует появлению новых рабочих мест!
Консультанты на COBOLе сейчас одни из самых высокооплачиваемых разработчиков
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, Basil2, Вы писали:
B>>Я бы сказал что Rust это как будто из С снова делают С++, только с учетом опыта делания С++. B>>Я думал о Go, но что-то он совсем не глянулся. С одной стороны странноватый синтаксис, с другой — все тоже самое как в С++. В Расте все же виден некий стержень, вокруг которого все делается.
KP>В Расте народ борется с ветряными мельницами, по большому счету, вот и весь стержень. Управление памятью в C++ уже много лет как не проблема вот прям совсем, но по старой памяти многие используют эту страшилку до сих пор.
Насчет управления памятью в С++ полностью согласен, сам не вижу там проблемы. Раст я так понял своей моделью памяти больше решает проблемы многопоточности, нежели утечек (с которыми давно научились бороться). Ну и под стержнем я скорее синтаксис имел в виду. Он там менялся несколько раз по ходу дела, что отвадило от языка часть народа, но зато его в достаточной мере вылизали, имхо.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, D. Mon, Вы писали:
KP>> с тем, что современный C++ дает достаточно инструментов для безопасной работы с памятью?
DM>Он также содержит все несовременные и небезопасные способы тоже, это минное поле и lipstick on a pig. Простой
arr[idx] = 1;
легко рушит всю безопасность, т.к. границы массива не проверяются.
Это как раз совсем не проблема — в дебаге это обычно проверяется. Да и дебажная версия STL тоже много чего чекает. Проблемой является переезд памяти, когда один объект подсирает другому объекту. И если это например попадает на счетчик ссылок, кто-то подвисает в памяти и понеслось...
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, Basil2, Вы писали:
DM>> т.к. границы массива не проверяются.
B>Это как раз совсем не проблема — в дебаге это обычно проверяется.
В дебаг версии-то проверяется для векторов, но в продакшн-то идет релиз версия, где никакой гарантии нет, а есть лишь надежда, что тестами мы достаточно хорошо все случаи покрыли и у себя проверили, и надежда эта весьма наивна.
B> Проблемой является переезд памяти, когда один объект подсирает другому объекту. И если это например попадает на счетчик ссылок, кто-то подвисает в памяти и понеслось...
Это да. В частности, любовь С++ передавать объекты по значению, и разрешение для них наследования, это прямая дорога к тому, чтобы или стек рядом запороть, или объект неполный сформировать... Другие языки тут сделали выводы, но С++ было уже поздно.
Здравствуйте, AlexGin, Вы писали:
AG>Начнём с того, что более 15 лет назад, когда мы изучали .NET вообще и C# в частности, всё было другое. Да и мы моложе
Но я то лет 5 всего назад изучал
B>>Стандарт С++11 внес много хороших плюшек, но после 14 и 17 стало понятно, что вещей к изучению там море. AG>+100500 AG>Да, после выхода стандарта 2011 года — можно сказать, что новый C++ это другой язык...
А я бы так не сказал. Имхо там нет ни одной фичи, которая бы сделала его другим языком. Auto? For loop? Initialization lists? Lambdas? Smart pointers? Threads? Все это было так или иначе в Boost. Только move-семантика достаточно прорывная штука, но только ухудшает пользование языком, причем значительно.
AG>P.S. Ни один язык не удасться узучить как Вы пишите "знаю_язык_от_и_до"
На 100% да, но можно прилично таки приблизиться. Например, если это LUA.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, wamaco, Вы писали:
W>стань гуру Delphi! W>всем назло!
Я начинал с Pascal, так что Delphi меня в свое время восхитил. Правда, несложно восхититься, когда на закате MS-DOS ты за пару часов делаешь программу с графическим GUI.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, Basil2, Вы писали:
AG>>Да, после выхода стандарта 2011 года — можно сказать, что новый C++ это другой язык...
B>А я бы так не сказал. Имхо там нет ни одной фичи, которая бы сделала его другим языком.
Не утверждаю, что принцыпиально новым, но всё-таки другим
Вот насчет новых фич: https://habr.com/ru/post/182920
B>Auto? For loop? Initialization lists? Lambdas? Smart pointers? Threads? Все это было так или иначе в Boost. Только move-семантика достаточно прорывная штука, но только ухудшает пользование языком, причем значительно.
Да та же самая auto — написал четыре буквы, а реальный тип за тебя компилятор подставил
И чтобы прописать этот реальный тип — зачастую приходилось ешё немало поискать его.
Насчёт smart pointers — также отличная штука (да и boost не надо за собой тащить).
Когда начинаешь усиленно пользоваться возможностями Modern С++, уже не хочется работать в стиле C++03/C++99
AG>>P.S. Ни один язык не удасться узучить как Вы пишите "знаю_язык_от_и_до"
B>На 100% да, но можно прилично таки приблизиться. Например, если это LUA.
+100500
Скажем так: любой язык можно прилично изучить, так чтобы владеть основными возможностями в рамках практического использования.
Здравствуйте, AlexGin, Вы писали:
AG>Не утверждаю, что принцыпиально новым, но всё-таки другим AG>Вот насчет новых фич: AG>https://habr.com/ru/post/182920
Так я большую половину и перечислил. Nullptr и свободные begin/end это и не фичи можно сказать.
AG>Да та же самая auto — написал четыре буквы, а реальный тип за тебя компилятор подставил
И ей тут же начали злоупотреблять, пихая куда ни попадя. Меня например просто бесит код с множественными авто. Вроде бы все знают, что "код чаще читается, чем пишется", но увы. Вместо того, чтобы потратить пару секунд и написать тип, потом остальные каждый раз тратят эту пару секунд чтобы мысленно(!) сделать работу компилятора!
AG>И чтобы прописать этот реальный тип — зачастую приходилось ешё немало поискать его.
Мне всегда хватало нажать F12.
AG>Насчёт smart pointers — также отличная штука (да и boost не надо за собой тащить).
Они были уже в std::tr1. Ну и в самих плюсах был auto_ptr, хотя он конечно был кривоват. И таки да, нормальный указатель появился только в C++11, даже в бусте его полностью не было.
AG>Когда начинаешь усиленно пользоваться возможностями Modern С++, уже не хочется работать в стиле C++03/C++99
Это правда. Из относительно концептуальных фич можно назвать constexpr. Она действительно привносит в язык новые необычные возможности.
AG>Скажем так: любой язык можно прилично изучить, так чтобы владеть основными возможностями в рамках практического использования.
Это да, но мне очень нравится ощущения "я знаю про это практически всё". С текущим С++ его увы не получить.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, Kswapd, Вы писали:
K>Относительно малыми усилиями можно быстро создавать богатые функционалом, краткие, читабельные, легко поддерживаемые программы.
На питоне нельзя? K>Что это, если не мощь?
Ну... хз. На С++ тоже можно. Мне казалось мощь языка раскрывается через его выразительность и тулинг. С первым у Го есть проблемы, со вторый вроде не всё плохо.
Относительно большими усилиями . Конечно, это всего лишь моё субъективное мнение. Тем не менее, появляются отзывы людей, чьи команды начали использовать Go вместо другого языка, к чему это привело.
K>Относительно малыми усилиями можно быстро создавать богатые функционалом, краткие, читабельные, легко поддерживаемые программы. Что это, если не мощь?
Здравствуйте, Mamut, Вы писали:
K>>Относительно малыми усилиями можно быстро создавать богатые функционалом, краткие, читабельные, легко поддерживаемые программы. Что это, если не мощь?
Вот и я про это!
Здравствуйте, Kernan, Вы писали:
K> K>Что это, если не мощь? K> Ну... хз. На С++ тоже можно.
Go со своей стандартной библиотекой заточен под относительно узкую область перекладывания данных по сети из одного места в другое — то, чем заняты 99% веб-сервисов. Можно на плюсах. Наверное можно и на питоне. Но в Go это сделано out of box что называется. Например, чтобы использовать tls session resumption & tickets в Go требуется одна строка. В плюсах (в зависимости от библиотеки) придется немного поприседать с "сырым" tls-сокетом и кэшем. Питонисты меня с моими хотелками пару лет назад послали далеко и на долго (там monkey patching в urllib был, если память не подводит). Если работа связана вот с этим всем, то в какой-то момент от Go начинает неиллюзорно штырить.
Если хочется реально "повернуть мозг в другом направление", то на мой взгляд для твоего конкретного случая есть всего лишь один реальный вариант (несмотря на то, что тебе тут много чего насоветовали). Просто потому, что с одной стороны хороший C++ программист уже знаком на практике со всеми актуальными парадигмами (приходится использовать и функциональные приёмы и метапрограммирование и много чего ещё, разве что логической ещё нет в языке, но она и не особо актуальна к сожалению), а с другой должен не плохо разбираться в устройстве компьютерного железа. И сочетание данных факторов даёт нам ровно одно пересечение: Verilog! Ну или сразу его обобщение под названием SystemVerilog, хотя можно начать с простого. Это реально совершенно другое программирование и при этом крайне перспективное в наше время. Но оно потребует серьёзных вложений времени в изучение предметной области... Точнее hello world можно написать за пару минут, скачав простейший компилятор и эмулятор. А вот сделать что-то сложное на современном уровне уже так не получится — придётся изучать принятые в данной области приёмы, которые совершенно не такие как в привычном программирование.
P.S. Если честно, то не вижу ничего сложного в современном C++ и с нетерпением ожидаю C++20, в котором будет (это уже точно зафиксировано комитетом) новая большая (намного больше чем в C++14/C++17) гора вкусностей! Однако удовлетворённость основным инструментом разработки (хотя у меня ещё и Питон и ещё десяток мелких языков есть) конечно же совершенно не означает, что не надо изучать новые языки и парадигмы.