Структуры данных. Строки

Кратко в продолжение темы структуры данных. Огромная область для меж-языковой стандартизации — это строки.

И если раньше можно было говорить о разнообразии, которое трудно стандартизовать, то сейчас уже все более-менее определилось.

С-style строки (zero terminated) нужны только для совместимости, а значит, нужны только функции конвертирования в них. А основные строки — это UTF-16 с хранимой длиной, примерно то же самое, что и std::string. Замечание: может и в строках из UTF-32 есть смысл, но только тогда, когда Земля войдет в межгалактическое содружество :), до прилета инопланетян UTF-16 вполне достаточно.

Естественно, возникает вопрос с выделением/освобождением памяти — причем, если говорить о меж-языковом взаимодействии, то основная проблема — освобождение строк, которые переданы из другого языка.

Простое решение существует и оно связано с обязательным требованием иметь языково-независимые метаданные во время работы программы. Тогда служебная область строки хранит ссылку на метаданные и ссылку на memory manager, который должен использоваться для освобождения памяти. Замечу немного не к месту, что будущее, на мой взгляд, за region-based memory managers. Детали можно обсуждать, но так как мы ориентируемся на разработку 90% программ, которые не требуют запредельной эффективности, то увеличение размера памяти строки на несколько байтов не имеет значения.

А вот выгода от стандартизации строк будет огромной.

Я все никак не соберусь написать печальную историю из жизни про сложности мульти-платформенного программирования, там будет пример того, как трудно живется без меж-языковых строк, когда программа пишется на комбинации C++/Java/Lua.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *