Когда шаблонное инстанцирование чрезмерно увеличивает размер вопроса на практике?

Я работал над проектом для своего предыдущего работодателя, который использовал.NET, и был созданный в формате .resx, который мы использовали. У нас в основном был файл, который имел все переводы в .resx файле, и затем нескольких файлах с различными переводами. Последствие этого - то, что необходимо быть очень прилежными об обеспечении, что все строки, видимые в приложении, хранятся в .resx, и каждый раз, когда каждый изменяется, необходимо обновить все языки, которые Вы поддерживаете.

, Если Вы становитесь ленивыми и не уведомляете людей, отвечающих за переводы, или Вы встраиваете строки, не проходя Вашу систему локализации, это будет кошмар, чтобы попытаться зафиксировать его позже. Точно так же, если локализация будет запоздалой мыслью, будет очень трудно поместить на месте. Нижняя строка, если у Вас нет всех видимых строк сохраненными внешне в стандартном месте, будет очень трудно найти все, что должно быть локализовано.

Еще одно примечание, очень строго постарайтесь не связывать видимые строки непосредственно, такой как

String message = "The " + item + " is on sale!";

Вместо этого необходимо использовать что-то как

String message = String.Format("The {0} is on sale!", item);

, причина этого состоит в том, что различные языки часто заказывают слова по-другому, и конкатенирующие строки непосредственно будут нуждаться в новой сборке для фиксации, но если Вы использовали некоторый строковый заменяющий механизм как вышеупомянутый, можно изменить .resx файл (или безотносительно файлов локализации, которые Вы используете) для определенного языка, который должен переупорядочить слова.

12
задан skaffman 23 March 2012 в 10:54
поделиться

5 ответов

В C ++, поскольку количество шаблонов, которые вы можете делать на C ++, ограничено их сложностью.

Однако в D ... до того, как существовала CTFE (оценка функций во время компиляции), нам приходилось использовать шаблоны для обработки строки . Это также причина того, что большие искаженные символы сжимаются в DMD - строки, используемые в качестве аргументов шаблона, становятся частью искаженных имен символов, и при создании экземпляров шаблонов с более длинными сегментами кода (например) результирующие размеры символов резко взорвали бы формат объекта. .

Сейчас лучше. Но в целом шаблоны по-прежнему вызывают большое количество раздутий по простой причине - они быстрее анализируют и являются более мощными, чем в C ++, поэтому люди, естественно, используют их гораздо чаще (даже в тех случаях, когда технически не нужны шаблоны). Должен признать, что я здесь один из главных нарушителей (взгляните на tools.base , если хотите, но не забудьте держать под рукой мешок для барахла - файл фактически на 90% состоит из кода шаблона).

10
ответ дан 2 December 2019 в 06:45
поделиться

Я думаю, вам нужно найти более старый компилятор, чтобы увидеть на практике раздувание кода шаблона. Современные компиляторы C ++ (и компоновщики) на некоторое время смогли его оптимизировать.

3
ответ дан 2 December 2019 в 06:45
поделиться

Раздутый шаблон НЕ проблема (это умственная проблема, а не проблема кода).

Да, это может стать большим. Но какова альтернатива?
Вы можете написать весь код вручную (по одному разу для каждого типа). Как вы думаете, если написать его вручную, он станет меньше. Компилятор создает экземпляры только тех версий, которые ему действительно нужны, а компоновщик удаляет несколько копий, разбросанных по единицам компиляции.

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

7
ответ дан 2 December 2019 в 06:45
поделиться

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

2
ответ дан 2 December 2019 в 06:45
поделиться

Раздутость инстансов шаблонов - это вопрос на практике, потому что она может увеличить (намного!!!) время компиляции и компоновки.

Я лично считаю, что проблема c++ №1 - время компиляции, и это в основном из-за шаблонов.

Я работал над проектом, в котором было около 50 либ. У нас была своя система rtti, использующая шаблоны. Мне пришлось переписывать из-за раздутости шаблонов

Вот некоторые цифры:

  • libs уменьшились с 640 мбайт до 420 мбайт
  • temps уменьшились с 4.3 гбайт до 2.9 гбайт
  • full rebuild уменьшился с 19:30 до 13:10
1
ответ дан 2 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: