Качественный релиз
C ++ Builder 10.4.2 предлагает несколько замечательных функций, которые, как мы полагаем, действительно помогут вам — самая большая из них — « разделенный DWARF », способ уменьшить использование памяти в компоновщике путем удаления отладочной информации. Если у вас есть проекты, которые выходят за пределы возможностей компоновщика, проверьте это: он может решить ваши проблемы (см. Этот пост в блоге ). Однако в целом RAD Studio 10.4.2 также была «качественной версией». На самом деле, несмотря на то, что 10.4.1 — это выпуск, нацеленный на качество, а 10.4.2 — на необходимые вам функции, мы исправили больше проблем в 10.4.2, чем в 10.4.1!
И C ++ Builder не исключение.
Обработка исключений C ++
Этот замечательный каламбур знакомит с работой по обработке исключений, которую мы проделали в 10.4.2. Если это слишком долго, вот TL; DR: 10.4.2 дает вашим приложениям очень высокую стабильность и более правильное поведение при обработке исключений.
Мы анализируем категории отчетов о проблемах, которые получаем, а также выполняем много работы, которая помогает нам находить проблемы внутри компании. Часть этой работы осуществляется за счет поддержки библиотек C ++ : использование внешнего кода — хороший способ гарантировать совместимость нашей инструментальной цепочки. Благодаря этому анализу в 10.4.2 мы пересмотрели большую часть нашей обработки исключений для Windows.
Мы рассмотрели следующие сценарии:
- Исключения внутри модуля , когда исключение генерируется и перехватывается в одном и том же двоичном файле, например, все в одном EXE.
- Межмодульные исключения , когда исключение пересекает границу модуля, например, было выброшено в DLL, но перехвачено в EXE. Это более сложная ситуация для обработки, и рекомендации по кодированию указывают, что исключения не должны просачиваться из модуля в другой… но мы видим код, в котором это происходит, и это важный сценарий, который необходимо решить. Это обычное явление для пакетов или когда несколько библиотек DLL и EXE объединены в одно приложение.
- Межъязыковые исключения , когда исключение пересекает фреймы стека, принадлежащие как Delphi, так и C ++. Исключения могут возникать на одном языке и перехватываться на другом или многократно пересекать границу.
- Когда все модули (например, EXE и DLL) статически связаны или все модули динамически связаны (динамическое RTL).
- ОС, C ++ и исключения SEH
- Обе платформы Win32 и Win64 .
Многие из этих сценариев, особенно кросс-модульные с различным связыванием, могут быть сложными. Одна из основных причин — обработка освобождения исключения или метаданных исключения в RTL. Например, предположим, что библиотека DLL, которая полностью статически связана и имеет собственную копию RTL, выдает исключение. Как может EXE, который также статически связан со своей собственной копией RTL или динамически связан, но, следовательно, по-прежнему имеет другую копию RTL для DLL, обрабатывать освобождение памяти, связанной с исключением?
Тем не менее, в 10.4.2 мы обрабатываем эти сценарии и поддерживаем приложения, в которых все модули статически связаны или все динамически связаны. Мы не поддерживаем межмодульные исключения в сочетаниях динамического / статического RTL в одном приложении.
Это означает, что в 10.4.2 вы должны увидеть значительно улучшенное поведение обработки исключений и большое количество проблем с качеством, решенных для внутримодульных исключений, межмодульных исключений, когда все модули статически или все динамически связаны, для ОС, C ++ и SEH. исключения, и как для Win32, так и для Win64 — массивная тестовая матрица.
С каждым выпуском мы стремимся постоянно улучшать C ++ Builder, и 10.4.2, можно сказать, является исключительным.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition