C++ побеждает просто потому, что самый быстрый без всяких компромиссов.
Не. За счёт того, что очень долгое время был единственным вариантом языка практически не накладывающим ограничений (можно выразить практически всё, что позволяет аппаратура).
Да множество есть попыток исправить строки в С++. Но сама эта множественность свидетельствует о неуспехе. Вот, в языках, при создании которых сначала головой подумали, Java, например, или Go (там и зарплаты выше), такой фигнёй не страдают.
Не. За счёт того, что очень долгое время был единственным вариантом языка практически не накладывающим ограничений (можно выразить практически всё, что позволяет аппаратура).
Почему был, остался же. Rust даёт гораздо больше ограничений: пока напишешь то же самое, что на крестах, в дурку уже увезут. Да, получится в итоге строже и формально верифицируемо, но Rust не единственный путь достигать такого, если это нужно: есть всякие там статические анализаторы и доказатели корректности, а если программа зависит от данных, то и в Rust будет оверхед на проверки в рантайме… Ну и часть возможностей Rust достигается оборачиванием его кода в какой-то там unsafe блок, что превращает его в сишечку с void* указателями.
С++ — это длящаяся уже четыре десятилетия безуспешная попытка написать годный класс для строк. А быстро у вас получается только память портить.
Эту задачу не решили в стандарте, чтобы оставить эту задачку для собесов, ведь нужно фильтровать даунов на входе в профессию!
P.s. никогда не испытывал проблем со строками в проклятых крестах, не понимаю почему эта тема так раздута. Щас же есть возможность написать
auto s = std::format("hello {} blabla {}, hehehe {}", 1, 2, 3);
и где тут какие проблемы я чё-то не понял. Кому там чего не хватает? Ладно, тупой вопрос, всегда есть те, кому чего-то не хватает - живут у кремля и жалуются, что метро далековато. Ну ладно не будем поднимать срачь, у меня есть гораздо более интересные проблемы в жизни - например как эффективно сливать блоки B+-Tree дерева
Да, на C++ бывает сидиш пишешь маленький велосипед для какой-то мелкой вещи. Каждый крестовик уже давно в жизни разработал свою маленькую библиотеку и таскает из проекта в проект. Типа строки свои там всякие зачем-то. Можно сказать, что С++ - язык со встроенным в жизненный цикл профилактическим прохождением LeetCode.
tcpfinhello ()
Последнее исправление: tcpfinhello
(всего
исправлений: 5)
Да был в соседней теме тоже один, которому пробелы мешали. Мол считать сложно. Он их, наверное, с калькулятором проставляет, чтобы со счёта не сбиться.
Таким объяснять что-то - только время зря тратить.
Немеркнущая классика: два С++’шника выразили два прямо противоположных мнения о строках в С++. Стоит ли удивляться, что у вас там эдакий зоопарт творится.
С x86 асма - да, тяжело. А какой-нибудь ARM/RISC-V/MIPS - очень даже неплохо.
В принципе, чтобы понять суть и смысл всей этой охоты с программированием достаточно вообще на Z80/6502 или 8-мибитных однокристалках потренироваться. Как дойдёт что именно вот в это всегда и превращается код на абсолютно любом языке и что вся глубинная суть программирования - заставить вот именно так устроенную железку решать нужную задачу, можно уже и к прочим аспектам программирования переходить.
Ну ИМХО 6502 и PDP-11 (KP1801ВМ) всё-же попроще будут. Правда PDP-11 нынче туговато, хотя вроде Ангстрем до сих пор какую-то продвинутую версию 1801 выпускает. Зато у Z80 зачаточный гипертрединг есть, в виде теневого набора регистров. :)
На самом деле сгодится вообще любой простой фон-неймановский процессор с простой системой команд. Можно обойтись эмулятором, но потыкать реальную железку будет намного эффективнее, в смысле обучения, и намного забавнее.
Немеркнущая классика: два С++’шника выразили два прямо противоположных мнения о строках в С++. Стоит ли удивляться, что у вас там эдакий зоопарт творится.
Никогда не понимал с каких пор это минус. Чем больше возможностей у языка, тем больше разных сортов одного и того же в нём естественным образом появляется. Ну типа у идеи «4 колеса и мотор» получается очень много разных видов автомобилей и это нормально.
Никогда не понимал с каких пор это минус. Чем больше возможностей у языка, тем больше разных сортов одного и того же в нём естественным образом появляется.
Так то оно конечно так, но что лучше, взял диск, вставил и работает или диск DVD-R, а проигрыватель DVD+R. Или наоборот, но несовместимый?
Вот тут все пишут +- одно и тоже в духе «бери этот ЯП - он лучше» или «сейчас актуален этот» или «изучать надо 100500 ЯП а не один какой то»…это все фигня. можешь с таким же успехом свой вопрос адресовать гуглу/ии..
Прежде всего стоит уяснить самое главное: программирование это лишь род деятельности, т.е. действия, которым ты будешь решать (бизнес) задачи. Важно другое: какие (бизнес) задачи тебе интересно было бы решать (особенно это станет критически важно на этапе, когда это станет рутиной - работой). Другими словами стоит перво наперво определиться, какая сфера для тебя наиболее интересна: будь разработка программок для компика/мобилки, или же ембеддыд, а может и вовсе веб-кодинг, ну и тд. А вот в каждой сфере свой(и) ЯП, свои технологии и тд.
Сам(и) ЯП проще изучать прямо в процессе работы над задачкой (особенно в эпоху гуглей/ии). Во-первых когда тебе реально интересна задачка, нейроны в мозге намного эффективней выстраивают связи (факт) - кароче обучение проходит в буст-режиме, во-вторых ты получаешь новые знания/умения полностью соотвествующие насущной «проблеме», избирательно, а не в режиме «изучить все на всякий случай». Ну и в третьих, как я уже обозначил выше, когда натеребонькаешься на IT, выгорешь, и станешь бородатым скуфом с 20ти летним проф стажем, все это давно перестанет вставлять, будет оч важно что б сфера (задачи) над которым работаешь, хоть немного вызывали интерес. Это очень важно. Блеска в глазах как в молодости уже не будет, но хотя бы не будет тошнить от работы..
Уволить сразу. Всегда волосы дыбом, когда приходишь в новую контору, а там на проекте свой велосипед
Лучше делать одно и то же много раз заново, чем использовать уже написанное однажды? Иногда бывает смысл использовать свои реализации, тем более если они уже есть.
Не надо тащить свои велосипеды в проект, где кроме тебя работают другие люди. Ты уйдешь, а тому кто придет после тебя, изучать твои велосипеды. Для петпроектов это конечно нормально.
Loki13★★★★★ ()
Последнее исправление: Loki13
(всего
исправлений: 1)
Я про низкоуровневые вещи, которые в stdlib. Да, если что-то есть в stdlib, то я стараюсь другие библиотеки не использовать для этого. Даже boost, только в самых безвыходных ситуациях, если и правда надо.
Loki13★★★★★ ()
Последнее исправление: Loki13
(всего
исправлений: 1)
Песни новые сочиняют те, у кого старые хреновые. Если вы пишете пятнадцатый класс для обработки строк, значит предыдущие четырнадцать у вас не получились. Слово «стандартный» в «стандартная библиотека» стоит не просто так. Предполагается, что если стандартная библиотека сделана хорошо (как это случилось практически во всех остальных языках), то программисту не нужно переизобретать колесо в каждом новом проекте, что увеличивает продуктивность работы и снижает количество ошибок.
P.S. Если уж мы вступили на стезю автоаналогий, то С++ — это автомобиль с семью колёсами, каждое из которых отличается от других и ни одно из них не круглое.
Ты получаешь зарплату, а созданная тобой добавленная стоимость остается у работодателя-буржуя. И он эту добавленную стоимость продаëт на рынке. Вот только добавленная стоимость и зарплата дорожают вместе с ростом цен на всë необходимое для производства, поэтому буржуй ищет способы снизить затраты на производство добавленной стоимости. Он не может снижать зарплату – иначе к нему никто не пойдëт работать, а вот снижать общие затраты на зарплату он может, что и делает, внедряя автоматизацию и механизацию труда, в том числе умственного, именно с этой целью крупные буржуи вкладываются в ИИ и робототехнику.
Так то оно конечно так, но что лучше, взял диск, вставил и работает или диск DVD-R, а проигрыватель DVD+R. Или наоборот, но несовместимый?
Если у тебя в проекте свои строки, то там всё совместимо с твоими строками. Иначем откуда бы там взяться твоим строкам, если они не работают. Ну и плюс что-то подшаманить, чтобы было совместимо - 5 сек работы, это же не дом из кирпича строить, на кнопки нажимать. Ну типа подпилил метод конвертации в «обычные» строки и всё работает.
tcpfinhello ()
Последнее исправление: tcpfinhello
(всего
исправлений: 1)
Предполагается, что если стандартная библиотека сделана хорошо
У профессионалов в любой сфере таких понятий нет. Есть инженерные категории «подошло под такую-то цель». Ну значит захотели управлять памятью иначе, чем это делает std::string или избавиться от возможных свобод std::string. Например я могу приплюсовать к std::string другую строку и оно сконкатенирует и получит новую строку, но в проекте хочется такую фичу запретить, чтобы аноны не спровоцировали обращение к аллокатору…
tcpfinhello ()
Последнее исправление: tcpfinhello
(всего
исправлений: 1)
В кресты идут не за продуктивностью работы, а чтобы сделать работающую систему бескомпромиссно быстрой. Сколько на это потребуется грёбли со стороны разработчика дело вторичное. Тем более, что плюсистам мало платят, так что не важно сколько они будут ковыряться.
В стандарте языка цпп семь реализаций строк? Я что-то упустил?
Стандарт С++ я никогда не читал, но думаю что там понятия срок быть особо не должно. Это же просто класс какой-то, который как-то реализует что-то, что по случайному стечению обстоятельств оказалось строкой, а не массивом пикселей. В стандарте же просто про память, типы и всё такое базовое по идее должно быть. Строка - это типа как целая квартира, а стандарт описывает только свойства кирпичей по идее. Я конечно хз, не читал иво.