Форум: "Прочее";
Текущий архив: 2014.06.29;
Скачать: [xml.tar.bz2];
Внизcopy-on-write 8-bit строки Найти похожие ветки
← →
Cobalt © (2013-12-15 14:38) [0]Если вы используете особенность copy-on-write анси-строк - расскажите для чего и в каких случаях.
← →
DVM © (2013-12-15 14:59) [1]А что можно не использовать? Ты о встроенном механизме копирования ссылки на строку при присваивании одной строковой переменной другой и реальном копировании при изменении строки на которую есть больше чем одна ссылка?
← →
jumping jack (2013-12-15 17:23) [2]http://qc.embarcadero.com/wc/qcmain.aspx?d=119501 - отсюда термин почерпнули? :)
вообще-то, это частная деталь реализации в целом хорошей (редко "протекающей") высокоуровневой абстракции, позволяющей забыть о всех особенностях своей реализации и наслаждаться, просто и без головняков её используя
анси эти строки или юникод - в данном случае без разницы
тут был бы уместнее вопрос "на какие подводные камни вы с ними натыкались? (где эта абстракция протекает?)", а особенностей как таковых нет, разве что "интуитивно понятная простота использования"
("чем они отличаются от старых сишных массивов char*" - вопрос тоже корректный, но совсем неинтересный - гуглите)
до кучи, на всякий случай - http://www.rsdn.ru/article/Delphi/dynarrays.xml
← →
Cobalt © (2013-12-15 17:52) [3]Мой вопрос именно про эту особенность, а не про что-то иное.
Как я понял - некоторые люди использовали string вместо массива байт, отчасти потому что надо было формировать буфер, содержащий конкретные 8-битные буквы (я и сам сталкивался с использованием ansistring в качестве буфера данных).
Т.к. на не-Windows платформе теперь такого не сделать - им приходится переписывать ansistring на TBytes.
Некоторые этого не приемлют, т.к. им нужна эта особенность - copy-on-write.
Вот мне и интересно - в каких случаях эта особенность может быть востребована?
← →
jumping jack (2013-12-15 18:23) [4]> некоторые люди использовали string вместо массива байт
возможно, проспали появление динамических массивов (в Delphi 4)
их и логичнее использовать, и проблем меньше (не COW!)
> им приходится переписывать ansistring на TBytes.
Некоторые этого не приемлют, т.к. им нужна эта особенность - copy-on-write.
> Вот мне и интересно - в каких случаях эта особенность может быть востребована?
имхо, это они само переписывание не приемлют
(но лучше, конечно, об этом у них самих спросить - не пробовали?)
работает - трогать незачем (и хорошо)
не работает с/под новой версией ОС/библиотеки/компилятора - производители последнего - бяки, не позаботились об обратной совместимости
требование (совместимости) понятное и в чем-то справедливое
← →
jumping jack (2013-12-15 18:38) [5]c TBytes ты не сможешь так просто взять и использовать AnsiUpperCase, PosEx, Copy и все остальные строковые функции - надеюсь, этого достаточно?
← →
jack128_ (2013-12-15 18:45) [6]
> Вот мне и интересно - в каких случаях эта особенность может
> быть востребована?
везде
procedure TestStr(S: string);
begin
S[1] := UpperCase(S[1]);
WriteLn(S);
end;
MyStr := ...;
TestStr(MyStr);
// после вызова TestStr MyStr не изменилась. Это выглядит логично. Ведь S - не var-параметр.
procedure TestBytes(Arr: TBytes);
begin
TArray.Sort<Byte>(Arr);
WriteToConsole(Arr);
end;
MyArr := ...;
TestBytes(MyArr); // внезапно MyArr после вызова TestBytes изменился.
в этом плане дин массивы похожы на объекты. С ними тоже никогда не знаешь, изменит ли из вызываемая процедура или нет.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2014.06.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c