Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1386866320
Абориген
2013-12-12 20:38
2014.06.29
Назвать DupeString() по-другому?


2-1377774807
delphi.coder
2013-08-29 15:13
2014.06.29
работа с объктом TFieldDataLink


2-1373372132
Разведка
2013-07-09 16:15
2014.06.29
не преодолимый глюк


2-1377509988
Viktor
2013-08-26 13:39
2014.06.29
ssShift + vk_numpad1


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский