|
|
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvвы полагаете, что ansistring - это какой-то чемодан, который можно выкинуть за ненадобностью, просто по дурацкой прихоти Embarcadero? А может, геморрою по реализации ansistring через юникодные строки на мобилах было больше, чем смысла в этом? http://developer.android.com/reference/java/lang/String.html Спасибо Andreas Hausladen показавшему что каждый может убедиться что данное ограничение введено искусственно. И однобайтные строки без проблем могут работать и на мобилках. Не вижу смысла в ограничении т.к. это не более чем слепое подражание java и дотнету. Сами себя высекли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:20 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Да, это все и ко строкам начинающимся с нуля относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:24 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreat, это я уже видел. И еще раз подниму вопрос - если убрали, значит на это были причины. Мое личное мнение - нафиг не уперлись на мобилах не-юникодные строки. Это потенциальный путь в обрыв. А мифический перенос приложений с десктопа на мобилы - это фантазии тех, кто никогда мобилы в руках не держал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:25 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Вообще возникает впечатление что nextgen создавали дотнетовцы, которых насильно заставили делать компилятор для дельфи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:27 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Почти не пользую AnsiString и на Windows. Страдания тех, кто пользует AnsiString как byte buffer не разделяю - это концептуально не верно и в XE7 последнее практически доделали для TBytes чтобы им заменить весь такой код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:30 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdv, Имешь право на мнение, конечно. Однако нельзя навязывать свое мнение окружающим насильно, ставя всех перед фактом. Не нравиться - не используй. Ну или как абсолютный минимум пометь функционал как deprecated. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:33 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckПочти не пользую AnsiString и на Windows. Страдания тех, кто пользует AnsiString как byte buffer не разделяю - это концептуально не верно и в XE7 последнее практически доделали для TBytes чтобы им заменить весь такой код. + 0.83 :) Если бы TBytes умел автоматически дополняться #0 или #0#0, то это было бы +1. По сути, это тот RTL / compiler magic, которого не достает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:36 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatОднако нельзя навязывать свое мнение окружающим насильно, ставя всех перед фактом. можно. причем, я не навязываю, я лишь поддерживаю "навязанный" факт, если так угодно. анси-строки на мобилах это граната для обезьяны. Если бы Дельфи 1 была сходу юникодная, про анси-строки никто бы уже и не помнил. Можете привести осмысленный пример использования ansistring именно на мобильных устройствах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:36 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael Longneck, Оплачивать переделку компонентов и горы кода будешь ты или эмбаркаберо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:37 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreat Объясни, зачем они тебе ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:38 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Кто-нибудь поспорит что функционал у TBytes до сих пор меньше чем у строк, которые он призван заменить? Кроме того уже не простой тип а генерик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:42 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvесли убрали, значит на это были причинывозможно и были но пошли вразрез с потребностями части клиентов Michael LongneckПочти не пользую AnsiString и на Windowsнаоборот, до сих пор не юзаю уникод за ненадобностью. иногда и с семибитными текстами приходится работать, но такого уж конечно не прошу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:42 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatОплачивать переделку компонентов и горы кода будешь ты или эмбаркаберо? Кому переделка кода не рентабельна, тот сидит на Ansi версиях. Что же касается мобилок, то никакого "переноса" туда сделать нельзя, заново писать надо. Кто-то приведёт реалистичный пример нужды в этих строках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:46 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckrgreatОплачивать переделку компонентов и горы кода будешь ты или эмбаркаберо? Кому переделка кода не рентабельна, тот сидит на Ansi версиях. Что же касается мобилок, то никакого "переноса" туда сделать нельзя, заново писать надо.Ага, ^спасибо^ нексгену. Кто-то приведёт реалистичный пример нужды в этих строках?Приведи пример необходимости оператора For и Repeat .. until. Можно же и без них. Переделаешь, а потом и привыкнешь обходиться без них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:52 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev, Удобно, быстро, много наработанного кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:53 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvМожете привести осмысленный пример использования ansistring именно на мобильных устройствах? Я могу привести, оно специфично, но оно живет. С андроида общаюсь с устройствами через свисток usb-rs. П.С. Оно мне не мешает, я лишь в качестве примера привел. Код: java 1. 2. 3. 4. 5. 6. 7. 8. Из прочих примеров разве что кто-то где-то поддерживает dbf файлы в кодировках 866 и 1251. Пример в разделе "андроид". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:53 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatКто-нибудь поспорит что функционал у TBytes до сих пор меньше чем у строк, которые он призван заменить? Кроме того уже не простой тип а генерик. Он не призван заменить строки. Он призван заменить буферы, в качестве которых несознательные граждане используют строки. Я сейчас много работаю с поступающими извне ascii-строками. Чтобы такую строку из TBytes превратить в полноценный string или наоборот, требуется ровно одна строка кода. Ну и нафига лишние типы строк" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 16:57 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kerk, "Чтобы такую строку из TBytes превратить в полноценный string или наоборот, требуется ровно одна строка кода." Если изначально работал со строками ничего превращать и не требовалось. 0 строк кода. 0 загрузки процессора и памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 17:01 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Если раньше работал со строками, приходилось по всей программе помнить что за мусор в какой строке и в какой кодировке. А теперь статическая типизация позволяет жестко отделить буферы от строк и точка конвертации ровно одна и понятная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 17:07 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kerk, Если у меня нет и не было таких проблем, может вы делали что-то не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 17:34 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
У строк, в отличии от динамического массива, есть COW, без которого иногда очень плохо. Если этого кому-то никогда не требовалось, то это свидетельствует лишь о его опыте, но не более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 17:41 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvА мифический перенос приложений с десктопа на мобилы - это фантазии тех, кто никогда мобилы в руках не держал.поскольку delphi думает, что может создавать софт не только для мобилок, но и для планшетов, то можно случаи придумать: раньше софт работал на тач-терминалах на винде, сейчас - на андроидных планшетах. почему бы тупо не перекомпилить все, как было? :-) Michael Longneckв XE7 последнее практически доделали для TBytes чтобы им заменить весь такой кодне в курсе последних XE. там у TBytes уже есть счетчик счетчик ссылок и COW + стандартные функции Replace/Pos/RPos/Starts/Ends/Trim/(De)Quote? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 17:45 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Осталось только ответить на вопрос: что за зверь такой ANSI Code Page на ведроиде и где он выбирается?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 17:51 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОсталось только ответить на вопрос: что за зверь такой ANSI Code Page на ведроиде Это стандарт ISO. и где он выбирается?..Операционка это не только визульный интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 17:55 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatЭто стандарт ISO. ANSI это ISO? Крутая у вас трава... rgreatОперационка это не только визульный интерфейс. Мы всё ещё говорим о ведроиде и прочих мобильных недоразумениях?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 18:02 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovrgreatЭто стандарт ISO. ANSI это ISO? Крутая у вас трава... Они участвовали в разработке стандарта ISO. rgreatОперационка это не только визульный интерфейс. Мы всё ещё говорим о ведроиде и прочих мобильных недоразумениях?.. Вы серьезно верите что мобильные оси это исключительно визуальный интерфейс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 18:15 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatВы серьезно верите что мобильные оси это исключительно визуальный интерфейс? Вопрос не в том во что верю я, а в том какое значение, где и как у мобильных ОСей установлено в качестве ANSI Code Page. Ну и для OEM Code Page до кучи. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 18:22 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВопрос не в том во что верю я, а в том какое значение, где и как у мобильных ОСей установлено в качестве ANSI Code Page. Ну и для OEM Code Page до кучи. Мобильным осям надо взаимодействовать с устройствами которые этот стандарт используют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 20:29 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВопрос не в том во что верю я, а в том какое значение, где и как у мобильных ОСей установлено в качестве ANSI Code Page. Ты этим странным вопросом что-то сказать хочешь? Если тебе действительно интересно, то открываешь исходник TEncoding.GetANSI и смотришь каким кодпейджем инициализируется возвращаемый объект. Раскопки приведут тебя в system.getacp, там и увидишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 21:21 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatэтот стандарт Из трёх слов ты видишь только одно, с самыми большими буквами? Может, стоит поменять очки?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 21:50 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatОплачивать переделку компонентов и горы кода будешь ты или эмбаркаберо? ну каких компонентов? Которые работают на десктопе, и не годятся для мобил? vavanвозможно и были но пошли вразрез с потребностями части клиентов ну конечно. Эмбаркадеро враг, потому что не дает сесть голой жопой на ежа. rgreatПриведи пример необходимости оператора For и Repeat .. until. прекратите валять дурака. вы сравниваете неюникодные строки с циклами, которым никто не мешает нигде выполняться. fd00chсейчас - на андроидных планшетах. почему бы тупо не перекомпилить все, как было? не получится же. еще раз - те, кто имеют мысли на эту тему, никогда не держал в руках мобильных устройств и не работал с их приложениями. Если же неохота отказываться от ansi - ну выбирайте тогда для приложений планшеты на Surface с виндой (не RT). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:13 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvrgreatПриведи пример необходимости оператора For и Repeat .. until. прекратите валять дурака. вы сравниваете неюникодные строки с циклами, которым никто не мешает нигде выполняться. перестань включать дурака. rgreat толсто намекал о том, что вместе с убиванием AnsiString можно убить и лишние типы циклов - зачем они ? Оставить только один - while, как завещал дедушка Вирт, а пипл, он схавает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:17 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvну каких компонентов? Которые работают на десктопе, и не годятся для мобил? Чего тебя всё в гуй тянет, другого кода не бывает что-ли? kdvну конечно. Эмбаркадеро враг, потому что не дает сесть голой жопой на ежа. Кто боиться куда-то там сесть, тот просто не пользуется и дышит ровно. А возвращение байтовых строк - самый голосуемый репорт в QC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:26 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvrgreatОплачивать переделку компонентов и горы кода будешь ты или эмбаркаберо? ну каких компонентов? Которые работают на десктопе, и не годятся для мобил? Моих компонентов. Которые могли бы работать везде и даже без {$IFDEF}, еслиб не идиотские игры со строками в NextGen. kdvrgreatПриведи пример необходимости оператора For и Repeat .. until. прекратите валять дурака. вы сравниваете неюникодные строки с циклами, которым никто не мешает нигде выполняться. Почему бы не сравнить. И то и то - возможности языка. Почему в XE9 кому-то не взбредет в голову что 3 вида циклов одновременно - это слишком сложно для юзера? kdvfd00chсейчас - на андроидных планшетах. почему бы тупо не перекомпилить все, как было? не получится же. еще раз - те, кто имеют мысли на эту тему, никогда не держал в руках мобильных устройств и не работал с их приложениями. Если же неохота отказываться от ansi - ну выбирайте тогда для приложений планшеты на Surface с виндой (не RT). Есть отличная фраза на мой взгляд прекрасно подходящая в данном случе: "Не указывайте мне что делать и я не скажу куда Вам идти." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:29 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
В принципе COW семантика TBytes не помешала бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:37 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckВ принципе COW семантика TBytes не помешала бы. Угу, и еще бы много чего не помешало. И тогда да, выйдет конфета. Правда в итоге окажеться что все это проще всего реализуется через type TBytes = System.RawByteString; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:44 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckВ принципе COW семантика TBytes не помешала бы. Как и возможность использовать для определения констант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:46 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
А в чём проблема с константами? Константный массив объявить всегда можно было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:47 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael Longneck, ну объяви константу типа TBytes... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:55 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael Longneck, Как то так? Код: pascal 1. 2. Или мы будем наблюдать нечто нечитаемое человеком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:55 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Ээээ. А смысл? TBytes это массив байт. Я могу понять пожелание типа Код: pascal 1. А ещё и строковая константа? Вам попросту нужна строка да и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:58 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
defecatorrgreat толсто намекал о том, что вместе с убиванием AnsiString можно убить и лишние типы циклов rgreat порет полную чушь, вероятно, наивно полагая, что AnsiString имеют конкретную кодировку. Спорим, он не сможет ответить на вопрос что должно получиться в результате присваивания AnsiString := WideString? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:00 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatИли мы будем наблюдать нечто нечитаемое человеком? Я бы согласился даже на это, но увы и ах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:00 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckЭэээ. А смысл? TBytes это массив байт. А ещё и строковая константа? Вам попросту нужна строка да и всё . Вот тут ты попал в точку. Мне нужна строка а не TBytes ибо она умеет все преимущества перед TBytes не имея его ограничений. А байтовые строки они просто взяли и отключили! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:01 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckЭэээ. А смысл? TBytes это массив байт Ну так покажи, как ты объявишь этот массив байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:02 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
ОК, а зачем тебе байтовая строка? Чем обычный string плох? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:03 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. Компилируется в XE7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:04 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckОК, а зачем тебе байтовая строка? Чем обычный string плох? Потому что в строке не байты, а мне нужны, внезапно, байты и не нужны лишние преобразования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:05 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael Longneck Код: pascal 1. 2. Компилируется в XE7. Зато совершенно точно не компилируется в XE2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:06 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
...и даже в XE6 оно не компилируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:09 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Ну я же говорил что в XE7 динамические массивы доработали Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:12 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
a RawByteString тоже ведь выпилен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:13 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
последний end. потому как локальные переменные не инициализирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:13 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckНу я же говорил что в XE7 динамические массивы доработали Еще 2-3+ версий дельфи и TBytes будет похож по функционалу на жалкое подобие RawByteString. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:13 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
fd00cha RawByteString тоже ведь выпилен? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:14 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Я тут сейчас такую жопу нарыл... Решил посмотреть как происходит присваивание константного массива переменной. Оказалось, в момент присваивания делается его полная копия, это для ссылочного-то типа. Ладно, подумал я, COW там нет, поэтому просто не стали заморачиваться и сделали тупо. Решил проверить строки. И жопа обнаружилась именно тут - теперь (проверял на XE7) они тоже делают копию строки, а не просто копируют ссылку. На XE2 копировалась только ссылка, с какой версии это млядство с полным копированием началось выяснять лень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:19 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
А пример? Что-то я такого не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:22 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckНу я же говорил что в XE7 динамические массивы доработали XE7 это теперь означает "всегда"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:22 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckА пример? Что-то я такого не вижу. Какой пример? Объявляешь константы, затем переменным присваиваешь значение этих констант. Ставишь бряк на присваивание и трейсишь до CopyDynArray (или что-то вроде того) или _NewUnicodeString. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:24 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyРешил проверить строки. И жопа обнаружилась именно тут - теперь (проверял на XE7) они тоже делают копию строки, а не просто копируют ссылку. На XE2 копировалась только ссылка, с какой версии это млядство с полным копированием началось выяснять лень.Это они походу в рамках подготовки к immutable strings родили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:25 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Не вижу. Счётчик щёлкает и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:26 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckНе вижу. Счётчик щёлкает и всё. Трейси присваивание переменной значения константы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:30 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
_UStrLAsg вот этот вызов и всё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:32 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael Longneck_UStrLAsg вот этот вызов и всё Его и нужно трейсить. Но уже не нужно. Посыпаю голову пеплом. Оказалось, что копирование делается только для глобальных переменных, локальные инициализируются всё так-же - счетчиком. Написал маленький тест демонстрирующий это: Тестик на скорую руку Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Проверять при закоментированной и раскоментированной локальной переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:42 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
...а массивы в любом случае копирует полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:45 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
а давайте для примера вернемся во времена появления Delphi 2009 с юникодными строками. PChar теперь другой. string другой. string[0] - ересь. Срочно пишем тикеты в QC на тему возврата старого поведения? Кому-то неохота переписывать компоненты? Чем кончилось-то? Аааа... появился какой-то AnsiString, против которого началась борьба. А потом AnsiString где-то исчез, и за него опять начинается борьба. Не было ведь всей этой мутотени в Delphi 2007. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:55 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyОказалось, что копирование делается только для глобальных переменных, локальные инициализируются всё так-же - счетчиком Оказалось, что полные копии строковых констант делаются не только для глобальных переменных, но и для полей объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:59 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdv, Перевод в 2009 string на юникод был болезненнен но оправдан, ибо надо было перевести на него UI. Однако для тех кому надо оставили полнофункциональные AnsiString и RawByteString. Где они равноценная им замена в NextGen-е? Ну и Zero Based Strings - зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:04 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvstring[0] - ересь. Я тебе освежу память - string[0] стал ересью с приходом ansistring. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:05 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyЯ тебе освежу память - string[0] стал ересью с приходом ansistring. до выхода 2009 на ansistring большинство клало болт. А я еще процитирую gunsmoker: http://www.gunsmoker.ru/2013/05/modern-delphi.html Если вы посмотрите на этот список, то заметите следующую вещь: всюду в вашей программе вы оперируете со строками типа string. Все прочие типы строк нужны вам исключительно для совместимости со сторонним кодом: вашим же старым кодом (AnsiString или Pascal-строки), ОС (нуль-терминированные или BSTR) и т.п. Такой зоопарк не только вызывает путаницу (вопросы вида "в чём разница между WideString и UnicodeString?"), но и весьма сложен для переноса на другие платформы (чему равен WideString на iOS?). Поэтому идея заключается в том, чтобы оставить один тип строк - самый удобный и универсальный. Гораздо лучше использовать не строковые типы (записи/классы) для коммуникации с внешним миром - так их семантика будет понятнее. А перегрузка операторов сделает безболезненным операции присваивания. Именно поэтому на новых LLVM компиляторах iOS есть только тип string. Все прочие типы строк там не объявлены и при попытке ими воспользоваться сгенерируют вам ошибку вида "Undeclared identificator AnsiString". Новый тип string в целом равен UnicodeString (т.е. хранит данные строки в UTF-16, имеет счётчик ссылок и длины, а также поле кодовой страницы, которое перманентно равно CP_UTF16 = 1200 ($4B0), и поле размера символа, которое перманентно равно 2 байтам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:29 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvдо выхода 2009 на ansistring большинство клало болт. Дима, до выхода D2009 ansistring был эквивалентом string. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:44 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
...и если уж совсем позанудствовать, то появились они в Delphi 2, кажется. И именно тогда шортстринговый string[0] стал ересью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:46 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyДима, до выхода D2009 ansistring был эквивалентом string. эта фраза не стыкуется с "Я тебе освежу память - string[0] стал ересью с приходом ansistring" то есть, начиная с Delphi 2 никто не использовал string[0] ? Откуда тогда в документах по переходу на версию 2009 этот самый string[0] упоминается как однозначный источник проблем переноса кода с предыдущих Delphi, вплоть до 2007? я бы предложил не буквоедствовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 01:08 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvОткуда тогда в документах по переходу на версию 2009 этот самый string[0] упоминается как однозначный источник проблем переноса кода с предыдущих Delphi, вплоть до 2007? Ошибка в документе. Но чтобы убедиться нужна цитата из документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 01:11 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdv а также поле кодовой страницы, которое перманентно равно CP_UTF16 = 1200 ($4B0) ну хоть кто-то будет утилизировать 4 ГБ памяти на смартфонах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 01:26 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvэта фраза не стыкуется с "Я тебе освежу память - string[0] стал ересью с приходом ansistring" Очень даже стыкуется т.к. сперва строки были и вовсе статическими. Потом пришли динамические строки (т.н. long-strings), и статические получили название shortstring, а динамические ansistring и стали псевдонимом для string (это регулировалось директивой компилятора $H). kdvто есть, начиная с Delphi 2 никто не использовал string[0] ? Только для shortstring, которые уж точно мало кто использовал. kdvОткуда тогда в документах по переходу на версию 2009 этот самый string[0] упоминается как однозначный источник проблем переноса кода с предыдущих Delphi, вплоть до 2007? я бы предложил не буквоедствовать. В документах у абракадабры ещё и не такое отыскать можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 01:30 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Проверил как там с присваиванием константных строк у FreePascal. Копирует только ссылку - зачёт! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 01:31 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
-Ошибка в документе. Но чтобы убедиться нужна цитата из документа. во-первых, прочитайте статью Gunsmoker про строки http://www.gunsmoker.ru/2013/05/modern-delphi.html во вторых, http://edn.embarcadero.com/article/38703 впрочем, в этой статье действительно не написано про string[0]. Признаю, насчет string[0] был неправ, в XE8 скомпилировался и работает (выдает тот же результат, что и в 2007) код Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. а в статье 2 речь шла о том, что string[n] в 2009 уже не 1байтовый char, а widechar. Попутал, виноват. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 01:33 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyОчень даже стыкуется т.к. сперва строки были и вовсе статическими. Потом пришли динамические строки (т.н. long-strings), и убили многопоточность на корню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 01:53 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
asviridenkovубили многопоточность на корню.Чем ShortString лучше AnsiString для многопоточности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 02:05 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
rgreatЧем ShortString лучше AnsiString для многопоточности? При копировании шортстрингов нет операций блокировки, в анси лочится инкремент счетчика ссылок. Правда я особых провалов не наблюдал. Вот что действительно убивает многопоточку так это список слабых ссылок на nextgen. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 02:12 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Правда я особых провалов не наблюдал. У меня еще как проваливалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 02:15 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
asviridenkovУ меня еще как проваливалось На каком проце? http://stackoverflow.com/questions/3339141/x86-lock-question-on-multi-core-cpus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 02:23 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyasviridenkovУ меня еще как проваливалось На каком проце? http://stackoverflow.com/questions/3339141/x86-lock-question-on-multi-core-cpus Детально тестировал давно, кажется это был AMD64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 02:34 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Возможно проблема именно в AMD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 02:50 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
asviridenkovДетально тестировал давно, кажется это был AMD64 В смысле, Athlon 64? rgreatВозможно проблема именно в AMD Правильнее будет так: Возможно проблема именно в старых AMD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 02:57 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyasviridenkovДетально тестировал давно, кажется это был AMD64 В смысле, Athlon 64? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 02:59 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvЭмбаркадеро враг, потому что не дает сесть голой жопой на ежане эмбракоделова ума дело угадывать что нужно разработчику. им бы самим с ежа слезть на к-м они еще и задом наперед едут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 10:18 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckВ принципе COW семантика TBytes не помешала бы. Можно пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 13:45 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Cobalt747Можно пример? Есть некое внутреннее состояние, которое пользователь может получить функцией или свойством. Критически важно не позволить ему модифицировать это состояние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 14:00 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Копировать ему в буфер сразу, и пусть с ним делает всё что захочет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 15:21 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Cobalt747Копировать ему в буфер сразу, и пусть с ним делает всё что захочет. Наличие COW, как раз, и позволяет избегать ненужных копирований. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 15:23 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
на мой взгляд, COW, пытаясь решать мнимые проблемы, только создает реальные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:58 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovна мой взгляд, COW, пытаясь решать мнимые проблемы, только создает реальные Какие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 17:15 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr Sharahovна мой взгляд, COW, пытаясь решать мнимые проблемы, только создает реальные Какие? Какие мнимые или какие реальные? Чтобы не растекаться, скажу, что в целом мне программировать было бы удобнее, если бы COW для строк не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 17:34 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovКакие мнимые или какие реальные? Какие реальные? Особенно если учесть, что COW обходится на раз-два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 17:46 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr SharahovКакие мнимые или какие реальные? Какие реальные? Особенно если учесть, что COW обходится на раз-два. Я типа знаю, как обходится. Только достает обходить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 17:55 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovТолько достает обходить. Это и есть реальная проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 17:57 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr SharahovТолько достает обходить. Это и есть реальная проблема? Реальная проблема - скорость в многопоточных приложениях, в пользовательском интерфейсе или в неумелых руках. И примеров тому море. Вот из недавнего прошлого. Есть процедура, которая вызывается из UI. Интенсивно использует строки, варианты и прочее колдунство. Работает ~11 сек, что естественно нервирует пользователя. Ценой различных извращений время удалось снизить до 3 сек. Уверен, если бы у разработчиков не было под рукой всего этого супер-арсенала, время работы процедуры было бы в районе 0.3-0.5 сек. Вот из очень далекого. Программист, который в жизни своей написал всего-то две-три прожки длиной больше 500 строк, ни с того ни с сего принялся писать довольно эффективные программы, в которых и строк было в достатке, и вычислений. А все потому, что в тогдашнем компиляторе всего этого супер-арсенала не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 19:46 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
TASM.EXE вам в руки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 20:17 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, что, как-то, быстро ты перешёл от COW на управляемые типы вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 21:16 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, ты хочешь поговорить об этом? только теперь не знаю уже, стоит ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2015, 09:03 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyCobalt747Копировать ему в буфер сразу, и пусть с ним делает всё что захочет. Наличие COW, как раз, и позволяет избегать ненужных копирований. BeltarВообще у любого нормального человека при работе с компом вырабатывается правило, прежде чем что-то править, делай копии и сохраняйся, как можно чаще, если не вырабатывается, то таких нельзя к компам на пушечный выстрел подпускать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2015, 09:57 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovтолько теперь не знаю уже, стоит ли. Не держи в себе. Cobalt747BeltarВообще у любого нормального человека при работе с компом вырабатывается правило, прежде чем что-то править, делай копии и сохраняйся, как можно чаще, если не вырабатывается, то таких нельзя к компам на пушечный выстрел подпускать. Ты сейчас о чём, вообще??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2015, 10:15 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Вот и я столкнулся с забавной ситуацией, когда при попытке перенести на Delphi 10.1/10.2 приличный объем кода с VCL (который изначально не предполагалось портировать под другие платформы) на Android радостно все отладил в FM под Виндой, а потом сменил платформу и вылезли грабли отсутствия типа AnsiString для Андроид. В коде много строк в DOS-кодировке (идет работа с различным железом): Код: pascal 1. 2. Было очень удобно совмещать такой тип с юникодом (задал кодировку и можно присваивать юникодную строку даже без явного приведения типа если уверен, что кроме латинских символов и кириллицы ничего нет) и копировать данные Move() в буфер для передачи в железо или обратно. Попробовал хак из первого сообщения темы, только более свежую версию для D10.1 - для Андроида получил ошибку при попытке объявить тип "DosString = type AnsiString(866);" и заметил, что для Андроида при использовании Move начальным элементом анси-строки является нулевой элемент. Еще вместо AnsiString попробовал RAWByteString и SetCodePage (небольшие задержки не критичны). Но тут если сменил кодировку на CP866, то и добавлять нужно тоже в этой же кодировке или сначала формировать все в Win1251 и только перед передачей в железку менять кодировку. Видимо, по этому пути и придется идти, но все это займет прилично времени на модификацию кода и как бы где-то чего-то не забыть. Поэтому на всякий случай хочу спросить, может кто уже нашел более изящное решение для такой задачи и ему будет не жалко поделиться своими мыслями. З.Ы. Попробовал и вот такой "велосипед" , но на 10.1/10.2 он сходу не завелся. Попробовал поправить ошибки насколько я понял смысл действий автора - не сработало даже банальное присваивание значения строке, не говоря уже об автоматической конвертации кодировок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 15:51 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
вот поэтому всегда говорилось - не используйте хаки типа PalychXXможно присваивать юникодную строку даже без явного приведения типа если уверен INDY вообще тотально вместо массива байт строки гоняло ни к чему хорошему это не приводит если есть кодировки, то можно пользоваться TStringStream с явным указанием Encoding там все будет перекодировываться нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 15:55 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
PalychXX, Придётся писать костыли, никуда не денешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 21:56 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
krapotkinможно пользоваться TStringStream с явным указанием Encoding Спасибо, но вот сходу не понял, как там явно указать кодировку (такое свойство есть, но ReadOnly). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 08:38 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
А, понял, ее при создании экземпляра можно указать: Код: pascal 1. Еще раз спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 09:06 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Вот когда хотя бы Pos сделают для TBytes, можно будет начать говорить о ненужности однобайтовых строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 11:34 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Попробовал вместо велосипеда на скорую руку сделать самокат, чтобы как-то приблизить функционал к AnsiString: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. Если оставить все как есть и в цикле присвоить сотню раз переменной одну и ту же строку: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. то при ReportMemoryLeaksOnShutdown := true; на выходе вижу инфу об утечках памяти: --------------------------- Unexpected Memory Leak --------------------------- An unexpected memory leak has occurred. The unexpected small block leaks are: 21 - 28 bytes: TMBCSEncoding x 100 29 - 36 bytes: TStringStream x 100 The sizes of unexpected leaked medium and large blocks are: 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236, 8236 --------------------------- ОК --------------------------- Если раскомментировать в MyString.Implicit строку "R.Free;", то обращение к ds.ss[1] ожидаемо выдает Access violation. Столкнулся с проблемой создания автоматического деструктора для записи. На stackoverflow был совет делать так: Код: pascal 1. 2. 3. 4. 5. 6. 7. Но Дельфа шлет меня лесом - TStringStream это не IInterface. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 13:06 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
У записей деструкторов пока не сделали. Так что придется обернуть объект в интерфейс (потомок interfacedobject, чья единственная функция - в деструкторе делать Free объекту, с которым он связан). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 13:51 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Достаточно type TInterfacedStringStream = class(TStringStream, IInterface) + скопировать реализацию TInterfacedObject. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 13:59 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Спасибо! Но, пожалуйста, изложите последние 2 совета чуть развернутей. Попробовал второй: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. А запись можно оставить как есть, просто добавить поле guard: IInterface; и в конструкторе сделать Self.guard := TInterfacedStringStream(Self.ss)? Компилируется, но на этйо строчке AV вылетает. ЧЯДНТ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 16:40 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Эх, просто не сразу догадался поменять тип в записи: Код: pascal 1. После этого вроде бы все заработало. Всем большое спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2018, 18:50 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Ну... так, конечно, тоже можно, но слишком уж сложно. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. Можно расширить на любой класс содержимого с помощью дженериков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 10:11 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041097]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 411ms |

| 0 / 0 |
