Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.06.29;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
15-1386866320
Абориген
2013-12-12 20:38
2014.06.29
Назвать DupeString() по-другому?


15-1386687468
МАКсим007
2013-12-10 18:57
2014.06.29
авторское право


6-1273138904
nordek
2010-05-06 13:41
2014.06.29
Приложение сервер-клиент, как связать в интеренете.


2-1377684212
Jimmy
2013-08-28 14:03
2014.06.29
Создание emf+ и png файла с помощью GDI+


1-1326095552
solomon
2012-01-09 11:52
2014.06.29
Странность при работе с Record