Но если, гипотетически, затраты на его реализацию были бы небольшими, какое обоснование помешало бы это сделать?
Похоже, вы предлагаете немного тавтологию: если нет причин не делать X, то есть ли причина не делать X? Нет.
Я не вижу большой ценности в знании ответов на гипотетические, контрфактуальные вопросы. Возможно, лучше задать вопрос о реальном мире:
Существуют ли языки программирования, использующие эту оптимизацию?
да. В JScript.NET мы обнаруживаем конкатенации строк в циклах, и компилятор превращает их в вызовы построителя строк.
Затем это может сопровождаться:
Каковы некоторые различия между JScript .NET и C#, которые оправдывают оптимизацию в одном языке, но не в другом?
Основное предположение JScript.NET заключается в том, что его программисты в основном будут программистами JavaScript, и многие из них уже создали библиотеки, которые должны работать в любой реализации ECMAScript. Эти программисты могут плохо знать платформу .NET, а даже если и знают, они не смогут использовать StringBuilder, не сделав код своей библиотеки непереносимым. Также разумно предположить, что программисты на JavaScript могут быть либо начинающими программистами, либо программистами, пришедшими в программирование по роду деятельности, а не по курсу компьютерных наук.
Программисты на C#, скорее всего, хорошо знают платформу .NET, пишут библиотеки, работающие с этой средой, и являются опытными программистами, понимающими, почему зацикленная конкатенация строк составляет O(n2) в простом коде. реализация. Им меньше нужна эта оптимизация, созданная компилятором, потому что они могут сделать это сами, если сочтут это необходимым.
Вкратце: возможности компилятора — это расход нашего бюджета на добавление ценности для клиента; вы получаете больше отдачи, добавляя эту функцию в JScript.NET, чем добавляя ее в C#.
person
Eric Lippert
schedule
03.02.2012
string
возвращает новый объектstring
, который является результатом операции, а использованиеStringBuilder
изменит существующий строковый объект. Необходимо выполнить анализ кода, чтобы убедиться, что вы никоим образом не полагаетесь на побочные эффекты конкатенации. В большинстве случаев это не проблема, которую невозможно решить, но опять же, в первую очередь не так уж сложно написать код правильно. - person Cody Gray   schedule 03.02.2012