Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Проект на гитхабе: https://github.com/d-mozulyov/CachedTexts Скачать архивом: https://github.com/d-mozulyov/CachedTexts/archive/master.zip CachedTexts - мощная и компактная кроссплатформенная библиотека, целью которой является парсинг и генерация текстовых данных с максимально возможной производительностью. Для библиотеки характерно следующее: Код находится в модуле "CachedTexts.pas" и зависит от двух других библиотек: CachedBuffers и UniConv . Объявлены классы TUniConvReReader и TUniConvReWriter, позволяющие осуществлять последовательную конвертацию текста из одной кодировки в другую "на лету". Существует 3 возможные базовые кодировки для парсинга или генерации текста: Byte-кодировка, UTF-16 или UTF-32. Каждая из них имеет свои достоинства и недостатки. UTF-16 является самой распространённой кодировкой, ей в Delphi соответствуют типы string/UnicodeString и WideString. Однако она не является самой быстрой и требует дополнительной логики для обработки суррогатных символов. UTF-32 является самой универсальной, но самой медленной кодировкой. Под Byte-кодировкой понимается UTF-8 или любая из поддерживаемых SBCS (Ansi). Такой вид интерфейса самый быстрый и является универсальным для ASCII-символов, но может представлять сложность при учёте используемой кодировки. Существует 3 собственных типа строк , используемых при парсинге и генерации: ByteString, UTF16String и UTF32String. Особенность этих строк заключается в том, что для хранения данных они не выделяют память в куче, а ссылаются на данные в CachedBuffer, что существенно увеличивает производительность. Все CachedString -типы имеют одинаковый интерфейс, состоящий из свойств, функций и перегруженных операторов, позволяющих выполнять широкий спектр задач наряду со стандартными строковыми типами. Кроме того они быстрее стандартных аналогов. Для конвертации из одной CachedString в другую существует тип TTemporaryString . Для парсинга и генерации текстов существуют стандартные классы: CachedTextReader -ы (TByteTextReader, TUTF16TextReader, TUTF32TextReader) и CachedTextWriter -ы (TByteTextWriter, TUTF16TextWriter, TUTF32TextWriter). Существуют стандартные классы для популярных языков разметки: XML, HTML, JSON и RTF. Для низкоуровневых Simple-API интерфейсов (как например "MSXMLSAX2") используются Byte-кодировки. Для Document Object Model (DOM) используется UnicodeString. Несмотря на то, что CachedString -типы достаточно быстро сравниваются со строковыми константами, задача идентификации строк (например при сериализации) является достаточно требовательной к ресурсам. Многие используют решения на основе бинарных деревьев и хеш-таблиц, однако библиотека CachedTexts содержит утилиту " CachedSerializer ", позволяющую добиться максимальной производительности за счёт кодогенерации. Demo.zip ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 20:49 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
CachedTextReader - ы: TByteTextReader/TUTF16TextReader/TUTF32TextReader Для последовательного чтения текстовых данных существуют классы: TByteTextReader, TUTF16TextReader и TUTF32TextReader. Вы можете выбирать любой из классов для парсинга в зависимости от того, какая кодировка вам удобнее. В случае если кодировка исходных текстовых данных отличается – конвертация будет произведена автоматически, что может незначительно замедлить выполнение приложения. Т.к. большинство текстовых файлов находятся в байтовой кодировке – для требовательных к производительности участкам кода рекомендуется использовать класс TByteTextReader, потому что автоматической конвертации текста производиться не будет и ByteString является самым быстрым строковым типом. Каждый TCachedTextReader-класс имеет 2 основных конструктора: Create и CreateFromFile. В обоих случаях исходная кодировка определяется по BOM. В случае если BOM отсутствует – учитывается параметр DefaultByteEncoding, который может быть равен CODEPAGE_UTF8 или одной из SBCS-кодировок. Конструктор CreateDirect используется в тех случаях, когда исходная кодировка и контекст конвертирования задаётся явно, а BOM не учитывается. Функционал TCachedTextReader-класса похож на TCachedReader, где доступ к данным может осуществляться с помощью свойств Current, Overflow, Margin и функции Flush. Так же есть высокоуровневые фунции: ReadData, Skip, ReadChar и две разновидности Readln. Для текстовых данных, состоящих из множества строк, крайне рекомендуется использовать функцию Readln. Код: 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. Простой пример парсинга: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 20:49 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
CachedString -типы: ByteString/UTF16String/UTF32String CachedString-типы - это простые структуры (записи), содержащие указатель на символы, длину строки и набор флагов. Особенность этих строк заключается в том, что для хранения данных они не занимают память в куче, а только ссылаются на текстовые данные (например на CachedBuffer), что существенно увеличивает производительность. Код: 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. Поддерживаемые форматы даты: YYYYMMDD, YYYY-MM-DD, -YYYY-MM-DD, DD.MM.YYYY, DD-MM-YYYY, DD/MM/YYYY, DD.MM.YY, DD-MM-YY, DD/MM/YY, YYYY (YYYY-01-01), YYYY-MM (YYYY-MM-01), --MM-DD (2000-MM-DD), --MM-- (2000-MM-01), ---DD (2000-01-DD). Поддерживаемые форматы времени: hh:mm:ss.zzzzzz, hh-mm-ss.zzzzzz, hh:mm:ss.zzz, hh-mm-ss.zzz, hh:mm:ss, hh-mm-ss, hhmmss, hh:mm, hh-mm, hhmm. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 20:50 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
CachedTextWriter -ы: TByteTextWriter/TUTF16TextWriter/TUTF32TextWriter Для последовательной записи текстовых данных существуют классы: TByteTextWriter, TUTF16TextWriter и TUTF32TextWriter. Функционал TCachedTextWriter-класса похож на TCachedWriter, где доступ к данным может осуществляться с помощью свойств Current, Overflow, Margin и функции Flush. Для прямой записи данных используйте функцию WriteData. Независимо от кодировки TCachedTextWriter-класса текстовые данные могут быть автоматически переконвертированы в любую другу кодировку – для этого указывайте параметр BOM в конструкторах Create и CreateFromFile, или параметр Context в конструкторе CreateDirect. TCachedTextWriter-классы позволяют записывать не только строки, но и другие распространённые типы: булеаны, целые числа, числа с плавающей точкой, даты и время, варианты. А для форматирования текста существуют функции WriteFormat, WriteFormatUTF8 и WriteFormatUnicode. Важно знать, что все эти функции работают быстрее своих SysUtils-аналогов. Параметры записи чисел с плавающей точкой и дат/времени задаются в полях FloatSettings и DateTimeSettings. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 20:50 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
TTemporaryString Львиную долю процессорного времени при парсинге могут занимать операции с менеджером памяти и подсчетом ссылок. Все типы системных строк обслуживаются внутренними функциями модуля System.pas, и при таких распространенных операциях как инициализация, конкатенация или финализация - производят ряд сложных операций для перераспределения выделенной памяти, негативно влияющих на производительность. Именно поэтому основной упор в библиотеке CachedTexts сделан на статических строках: ByteString, UTF16String и UTF32String. Однако существуют задачи, когда обойтись без динамического выделения памяти сложно. Например распаковать XML-строку, содержащую символьные ссылки, или перевести ByteString в UTF16String. Специально для таких задач в библиотеке содержится тип TTemporaryString. В его основе лежат динамический массив байт и принцип резервирования памяти. Это означает, что память в нем если и будет перевыделяться, то редко. Единовременно в TTemporaryString могут находиться данные только одного типа из трёх: ByteString, UTF16String или UTF32String. В любое время можно вызвать метод InitByteString, InitUTF16String или InitUTF32String. Заполнение данными, конвертация и конкатенация - осуществляются с помощью методов Append. Данные либо сразу добавляются в конец строки, либо предварительно конвертируются в требуемую кодировку. Одной очень важной особенностью TTemporaryString является возможность "эмуляции" системной строки. В этом случае к символьным данным дописывается специальный системный заготовок, позволяющий компилятору Delphi использовать данные TTemporaryString как "константную строку". Это может быть полезно если ваши алгоритмы и функции используют стандартные строки. Например при Writeln, ExtractFileName или StrToDate(FormatSettings). Однако будьте осторожны, время жизни эмулированной строки ограничено временем жизни данных в TTemporaryString. Крайне рекомендуется использовать эмулированную строку как временную строковую константу. Для использования реальных системных строк используйте CachedString.ToString-методы или UniqueString после присвоения строковой переменной. Пример: Код: 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. На выходе будет: ConsoleDelphi is the way to build applications for WINDOWS 10, MAC, mobile and more. Delphi is the way to build applications for WINDOWS 10, MAC, mobile and more. Delphi is the way to build applications for WINDOWS 10, MAC, mobile and more. Delphi is the best. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 20:51 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
CachedSerializer Утилита "CachedSerializer" служит единственной цели - идентификация (сериализация) строковых данных с максимально возможной производительностью. Вы можете откомпилировать проект из исходников в папке "utilities/CachedSerializer" или сразу скачать бинарные файлы вместе с примерами. В качестве первого аргумента командной строки утилита принимает имя текстового файла, в котором содержатся опции и идентификаторы. Для сериализации важны следующие опции: -<encoding>. В качестве encoding может выступать "-utf16", "-utf8", "-utf32" или ряд других кодовых страниц, например "-1250" (полный список однобайтовых кодировок можно увидеть в описании библиотеки UniConv ). "-raw" воспринимается как CODEPAGE_RAWDATA, "-user" воспринимается как CODEPAGE_USERDEFINED, "-ansi" воспринимается как CODEPAGE_DEFAULT. "-ansi" является кодировкой по умолчанию, если ваш ByteString-идентификатор содержит только ASCII-символы, то кодировка не важна, можете указывать "-ansi" или не указывать её вообще. -p"<variable_name>" или -p"<pointer_name>:<length_name>" или -p"<pointer_name>:<length_name>:<code_indent>". Сериализация происходит по двум параметрам: указатель на символы и длина строки. Если ваш идентификатор хранится в CachedString – укажите <variable_name>, и тогда сериализация будет происходить по параметрам <Name>.Chars and <Name>.Length. По умолчанию используются "S.Chars" и "S.Length". Параметр <code_indent> может быть полезен для дополнительного смещения кода, значение по умолчанию - ноль. –i. Данная опция указывает, что сериализация будет происходить без учёта регистра символов. -f"<Name(-SType)>:<Prefix>" или -f"<Name(-SType)>:<Prefix>:<TypeName>". Опция -f позволяет сгенерировать функцию <Name> с параметром "S". Если SType не указан - будет использована CachedString. Для каждого идентификатора будет сгенерирована либо числовая константа (<PREFIX>IDENTIFIERN = N), либо перечисляемый тип (<TypeName> = (<prefix>Identifier1, <prefix>Identifier2, …). -fn"<Name(-SType)>:<Prefix>" или -fn"<Name(-SType)>:<Prefix>:<TypeName>". Смысл опции -fn такой же как -f, но для -fn будет сгенерирован только код сериализации. -s"FileName". Опция позволяет сохранить сгенерированный код в текстовый файл. Каждая из этих опций может быть указана в качестве аргумента командной строки. Кроме них допустимы следующие опции: -nolog. Не отображать сгенерированный код в консоли. -nocopy. Не копировать сгенерированный код в буфер обмена. -nowait. Не ожидать нажатия Enter после генерации кода. Каждая строка текстого файла может быть представлена в нескольких форматах: <identifier> <identifier>::<implementation> <identifier>:<marker>:<implementation> <identifier>:<marker> Кроме <identifier> важна <implementation> - это код, который выполняется в случае определения <identifier>. Если указана опция -f или -fn, то <implementation> будет создана автоматически. Возникают случаи, когда для нескольких <identifier> должна быть одинаковая <implementation>. В этом случае указывайте <marker> - некая строковая константа. При написании <identifier>, <marker> или <implementation> допустимы следующие специальные символы: "\:", "\\", "\n", "\r", "\t" (Tab), "\s" (пробел) Например вы отправляете на сериализацию следующий текстовый файл ("examples/simple1.txt"): Файл-ansi -f"ValueToID-AnsiString:ID_" -p"S:Length(S)" sheet row cell data value style На выходе получаете код: Код: 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. Если поменять опции на -f"ValueToEnum:tk:TTagKind" ("examples/simple2.txt") - такой код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 20:51 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, 1. Установки не требует? 2. Под Лазарь работа проверялась? 3. Дока на русском в архиве тоже есть или только тут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 11:26 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
авторКод находится в модуле "CachedTexts.pas" и зависит от двух других библиотек: CachedBuffers и UniConv. Если CachedTexts использует эти библиотеки, они обязаны быть в наличии в дистрибутиве CachedTexts, чтобы взял и пользуешься, а не начинаешь рыскать, где это взять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 11:35 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Док, Установки не требует, дока на русском вся здесь и по сути является переводом README.md со страницы на гитхабе. Под Лазарем не проверялась, т.к. Фрипаскаль не является целевым компилятором, но задел под FPC имеется. Т.е. если под FPC будут обнаружены баги, то правиться они будут относительно быстро. Тестирование проводилось на Delphi6-XE10 под процессоры x86 и x64. defecator, Это организовано с помощью гитовских сабмодулей. В папке "lib". Исходники подтягиваются либо стандартными командами Git, либо с помощью батника "update.bat". Но если Git не установлен - тогда придётся вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 12:58 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Таки вот что я заметил, потыкав в демку "FileWriters" компилятором DXE7 на компе Win7 x64, Core i5 2.8 ГГц, винт обычный, 4 гига памяти. Отключение ассемблера приводит к заметному ускорению работы CachedTexts. Ассемблер включён: автор1) TStringList --> UTF8......fill: 3500...save: 5656 10219ms done. 2) TextFile --> UTF8... 37281ms done. 3) TextFile + buffer --> UTF8... 33078ms done. 4) CachedByteWriter ANSI --> UTF8... 969ms done. 5) CachedByteWriter UTF8 --> UTF8... 797ms done. 6) CachedUTF16Writer --> UTF8... 1860ms done. 7) CachedUTF32Writer --> UTF8... 1750ms done. Ассемблер ВЫключен только в файле CachedTexts.pas: автор1) TStringList --> UTF8......fill: 3609...save: 5547 10218ms done. 2) TextFile --> UTF8... 37609ms done. 3) TextFile + buffer --> UTF8... 33110ms done. 4) CachedByteWriter ANSI --> UTF8... 750ms done. 5) CachedByteWriter UTF8 --> UTF8... 672ms done. 6) CachedUTF16Writer --> UTF8... 1719ms done. 7) CachedUTF32Writer --> UTF8... 1641ms done. Ассемблер ВЫключен в модулях CachedTexts.pas И CachedBuffers.pas: автор1) TStringList --> UTF8......fill: 3375...save: 5344 9766ms done. 2) TextFile --> UTF8... 37422ms done. 3) TextFile + buffer --> UTF8... 33094ms done. 4) CachedByteWriter ANSI --> UTF8... 734ms done. 5) CachedByteWriter UTF8 --> UTF8... 578ms done. 6) CachedUTF16Writer --> UTF8... 1781ms done. 7) CachedUTF32Writer --> UTF8... 1812ms done. Отключать ассемблер в файле UniConv.pas не стал - там аццкая путаница с DEFINE'ами. Тут: автор1) TStringList --> UTF8......fill: 3375...save: 5344 9766ms done. fill - время заполнения TStringList через List.Add(IntToStr(i)) save - время отработки List.SaveToFile(FileName, TEncoding.UTF8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 15:33 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Видимо, не всегда ассемблерная лапша "одинаково полезна" для здоровья... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 17:05 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
просто аффтар переоценил свои скиллы Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 17:15 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
возможно автор тюнил под конкретную/свою архитектуру/машину а так там такой разброс возможен по линейкам что впору делать отдельные ветки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 17:28 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
defecator, А чем "ассемблирование выключал"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 19:55 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
vavan, Да, скорее всего дело в способе копирования памяти. Надо разбираться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 19:57 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, А чем "ассемблирование выключал"? CashedTexts.pas - в заголовке закомментил блок: Код: pascal 1. 2. 3. Для CashedBuffers.pas ровно то же самое, только пришлось кое-что поправить на эту тему в плане того, что там уже пошло смешение {$IFDEF CPUINTEL} и {$IFDEF CPUX86} А в модуле UniConv.pas выключить по простому этот макрос не удалось, так как там хаос из проверок - где-то проверяется IFDEF CPUX86, где-то - {$IFDEF CPUINTEL} Там требуется в модуле серьёзно поработать метлой. Подозреваю, что отключение ассемдлера и в UniConv.pas ещё бы прибавило быстродействия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 20:02 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUскорее всего дело в способе копирования памятиа у тебя там асм только в копировании? и твое копирование быстрее фасткодерского? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 09:17 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
vavanSOFT FOR YOUскорее всего дело в способе копирования памятиа у тебя там асм только в копировании? и твое копирование быстрее фасткодерского? АСМ там везде, где нужно и где не нужно, причём сначала писалось на паскале, а потом тот же кусок переписывался на ассемблере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 09:49 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
В режиме x64 отключение ассемблера даёт ещё более существенный прирост быстродействия: Ассемблер включён: автор1) CachedByteWriter ANSI --> UTF8... 1110ms done. 2) CachedByteWriter UTF8 --> UTF8... 938ms done. 3) CachedUTF16Writer --> UTF8... 2328ms done. 4) CachedUTF32Writer --> UTF8... 2234ms done. Ассемблер ВЫключен: автор1) CachedByteWriter ANSI --> UTF8... 938ms done. 2) CachedByteWriter UTF8 --> UTF8... 735ms done. 3) CachedUTF16Writer --> UTF8... 2047ms done. 4) CachedUTF32Writer --> UTF8... 1828ms done. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 10:57 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
defecator Ассемблер ВЫключен в модулях CachedTexts.pas И CachedBuffers.pas: автор1) TStringList --> UTF8......fill: 3375...save: 5344 9766ms done. 2) TextFile --> UTF8... 37422ms done. 3) TextFile + buffer --> UTF8... 33094ms done. 4) CachedByteWriter ANSI --> UTF8... 734ms done. 5) CachedByteWriter UTF8 --> UTF8... 578ms done. 6) CachedUTF16Writer --> UTF8... 1781ms done. 7) CachedUTF32Writer --> UTF8... 1812ms done. Отключать ассемблер в файле UniConv.pas не стал - там аццкая путаница с DEFINE'ами. Удалось отключить ассемблер и в модуле UniConv.pas: автор1) CachedByteWriter ANSI --> UTF8... 728ms done. 2) CachedByteWriter UTF8 --> UTF8... 578ms done. 3) CachedUTF16Writer --> UTF8... 1734ms done. 4) CachedUTF32Writer --> UTF8... 1734ms done. Как ни странно, но стало ещё быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 11:19 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Hello, Defecator! You wrote on 10 марта 2016 г. 11:27:08: Defecator> Как ни странно, но стало ещё быстреебраво! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 11:27 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Отключение ассемблера в модуле UniConv.pas даёт незначительный прирост быстродействия, так что там можно оставить и забить, если не упарываться десятком миллисекунд. А вот отключение ассемблера в остальных двух модулях даёт существенный прирост скорости. Возникает вопрос - а зачем тогда там длинные ассемблерные портянки ? Что они такого дают, если только всё портят ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 11:31 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
defecatorпричём сначала писалось на паскале, а потом тот же кусок переписывался на ассемблере.Я это замечал сто лет назад, довольно парадоксально было обнаруживать замедление от тотального переписывания на ассемблер. Потом плюнул на это дело. Оптимальный алгоритм на паскале всегда будет быстрее неоптимального алгоритма на ассемблере. А себестоимость нахождения оптимального алгоритма, отладки и сопровождения на паскале гораздо ниже ассемблерного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 12:31 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
зато сколько стонов в сторону компилятора delphi, который, якобы, генерит тормозной код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 12:37 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
компилятор/оптимизатор дельфи безусловно оставляет желать лучшего но увы редко существует код выполняющийся оптимально на любой архитектуре, не зря фасткодеры и прочие подобные проекты месяцами вылизывали ветки под конкретные камни и условия я уже говорил что вполне вероятно на машине автора его асмовый вариант обыгрывает паскалевский ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 12:50 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
fd00chзато сколько стонов в сторону компилятора delphi, который, якобы, генерит тормозной код Можно было бы проверить работу на старом древнем Delphi 7, но библиотеки не компилятся, если выключить ассемблер. В частности, типы строк смешаны - String и WideString. type UniConv.UnicodeString = WideString; { из модуля UniConv.pas } UnicodeString = UniConv.UnicodeString; описано как: Код: pascal 1. при этом вызов идёт со String: Код: pascal 1. 2. 3. 4. так что с семёркой с отключением ассемблера не склалось, а без отключения ассемблера вот такие результаты после компиляции в Delphi 7: автор1) CachedByteWriter ANSI --> UTF8... 985ms done. 2) CachedByteWriter UTF8 --> UTF8... 813ms done. 3) CachedUTF16Writer --> UTF8... 1844ms done. 4) CachedUTF32Writer --> UTF8... 1781ms done. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 12:52 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
fd00chзато сколько стонов в сторону компилятора delphi, который, якобы, генерит тормозной код Ассемблер сам по себе не обеспечивает преимущества. Если не ошибаюсь, речь шла о сравнении кода Delphi с си++ - компиляторами (например, от Intel). Напомню: компилятор дельфийский написан на сях... ...а IDE вполне себе на Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 12:57 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Печень белого медведя, прикол в том, что не только лишь все из стонущих могут написать на ассемблере более производительный код, зато хаять горазд каждый, как и строчить портянки на том же асме Ну а с производителем процессоров соревноваться в компиляторах загнивающей конторе вообще чревато)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 13:04 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
fd00chПечень белого медведя, прикол в том, что не только лишь все из стонущих могут написать на ассемблере более производительный код, зато хаять горазд каждый, как и строчить портянки на том же асме Ну а с производителем процессоров соревноваться в компиляторах загнивающей конторе вообще чревато)) Большинство (за исключением отдельных личностей, вроде ТС) все же понимают, что производительность - вещь далеко не всегда самая важная. Люди вполне себе и C# с Java используют, и FoxPro, и VB c Python. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 13:09 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Печень белого медведя...а IDE вполне себе на Delphi. Когда-то - может быть, а сейчас это дикая и глючная помесь всего со всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 13:21 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
wadmanПечень белого медведя...а IDE вполне себе на Delphi. Когда-то - может быть, а сейчас это дикая и глючная помесь всего со всем. Ой, точно. Начиная с D2005го там треш и угар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 13:23 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
defecator, При оформлении (шрифт, жирность и пр.) не злоупотребляй, плиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 13:42 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Да начали тут про ассемблер/неассемблер :) Что там в UniConv на ассемблере я уже не помню. Но думаю в данном случае они не влияют, а разница в 16мск - стандартная погрешность GetTickCount. Что до остальных модулей - то вопрос в копировании памяти. На новых интеловских машинах снова стал быстрее REP MOVS. Актуален этот вопрос здесь или нет - я не знаю. Но каким способом копировать память лучше - вопрос открытый. Другого на ассемблере я вроде не писал, старался делать ЯВУ. Небольшое исключение - эмуляция инлайнов на старых компиляторах, но под X64 они поддерживаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 17:20 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUвопрос в копировании памяти. На новых интеловских машинах снова стал быстрее REP MOVS. из чего следует сделать вывод, что писать стоит на паскале, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 18:53 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
defecator, Нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 19:48 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, НетА на чём тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 19:51 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
GatorSOFT FOR YOUdefecator, НетА на чём тогда? ТС очень любит ассемблер, вот только ассемблер не любит его, судя по простейшим тестам его же библиотеки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 20:04 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
defecator, Нет :) Я расцениваю ассемблер как один из инструментов. ЯВУ транслируется в набор машинных команд, ассемблер транслируется в набор машинных команд, просто на ассемблере можно сделать некоторые вещи тоньше. В данном случае речь в первую очередь идёт о копировании памяти. А там на одних машинах могут быть одни результаты, на вторых - другие. И это отличная пища для размышлений, за обнаружение которой тебе спасибо! Кстати если есть возможность - выложи пожалуйста различные варианты с/без ассемблера в исходниках и бинарниках под 2 платформы: x86 и x64. Можно будет погонять на разных машинах, потрейсить дизасм - и в итоге придти к какому-то оптимальному решению, для большинства новых процессоров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 23:07 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUМожно будет погонять на разных машинах, потрейсить дизасм - и в итоге придти к какому-то оптимальному решению, для большинства новых процессоровя ранее вопрос задавал, ты фасткодеров обогнал чтоли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2016, 09:21 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
vavan, Ты имеешь ввиду их реализацию Move? Нет, здесь другая специфика. У них Move имеет универсальное применение, а в данном случае речь идёт о копировании небольшого ASCII буфера на стеке в буфер записи (CachedWriter). И в данном тесте речь идёт о числах от 1 до 1000, т.е. копирование от 1 до 4 байт. Если я ничего не путаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2016, 10:34 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТы имеешь ввиду их реализацию Move?да, я о fastmove например от John O'Harrow. думал ты значительные куски разом копируешь SOFT FOR YOUв данном случае речь идёт о копировании небольшого ASCII буфера на стеке в буфер записи (CachedWriter). И в данном тесте речь идёт о числах от 1 до 1000, т.е. копирование от 1 до 4 байттакие маленькие объемы тогда вроде ч/з movzx/mov делались а куда там rep девать?? SOFT FOR YOUЕсли я ничего не путаюне знай, ты ж писал, а я не смотрел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2016, 10:45 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
vavan, Надо разбираться. Асм-вставки, если я не путаю - сделаны как раз для того, чтобы не дергать по таким вещам стандартный Move, эта тема работает для 0..32 байтов. В случае с x64, там вообще ничего не ассемблировано, тем более фесткода. Все сделано в лоб, тупо. И на этом тесте такой подход оказался выгоднее. Но это не значит, что в целом вопрос копирования памяти не стоит пересматривать и подбирать более оптимальный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2016, 10:58 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Ошибка! Вообщем в UTF16String. toFloat . Число 5.444123456e+300 конвертируется, но если экспа уже 301 и более - нет. Тоже самое с отрицательной экспой. У отрицательной кстати ещё ненормальные числа есть, которые E-314 аж, Power10 их может делать, но прикол с Power10 в том, что иногда у него цепочка зависимости и нужно сделать инструкцию pause после него, а иногда не нужно, в зависимости от числа и степени, надо копать куда-то. Из-за этого скорость скачет в 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2016, 18:46 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Кар-Кар, Спасибо за реакцию и тестирование. В целом - это не ошибка, а заложенное ограничение. Я обратил внимание, что под x64 (стандартная) функция на определённой экспоненте вообще вылетает с эксепшном. И оно не намного больше 300. Кроме того библиотека заточена на максимальную производительность и длину экспоненты в символах тоже имело смысл ограничить. Кстати у меня такие числа переводятся во Float точнее, чем в стандартной либе по Power10. А тем более под x64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2016, 19:17 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUу меня такие числа переводятся во Float точнеехотелось бы услышать методику выявления точности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2016, 21:23 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, Берём строку, например '5.444123456e+300' Получаем из неё Float обычным образом и с помощью CachedString Потом смотрим дельту числа-в-строке и возвращаемого флоата Где дельта меньше - там и точнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2016, 22:47 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Печень белого медведяНапомню: компилятор дельфийский написан на сях... Пруф? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 00:29 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Квейд, Если можно без офтопиков ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 07:14 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, я как бы не придираюсь, но всё же интересно: смотрим дельту числа-в-строке и возвращаемого флоататипа так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 10:51 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
"Точность" не должна быть "выше" или "ниже", она должна быть такой же. Ибо поведение должно быть предсказуемым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 11:11 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Применительно к флоатам, вопрос точности всегда актуален, идентичность гарантировать не получится. Как получаются числа с указанием экспоненты? Очень просто - берётся число и умножается на результат Power10, а тот получается многократным перемножением 10 или 1/10, на этом этапе собственно и происходит потеря точности. Честно говоря, на данном примере мне не удалось сделать так, чтобы результаты различались :). Но к примеру '544412345.6e+300' на x64 выдаёт Exception. В то время как Cached-вариант и стандартный x86 отрабатывают корректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 12:29 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUидентичность гарантировать не получится Честно говоря, на данном примере мне не удалось сделать так, чтобы результаты различались :)гы, так по ходу "не получится", а по факту "получается постоянно" ? получается многократным перемножением 10 или 1/10, на этом этапе собственно и происходит потеря точности.А не нужно подменять /10 на *~0.1, тогда и с точностью все хорошо будет. Ой, что это я, тогда ж очень-очень быстро-быстро не получится )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 14:20 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, Ну так и дай бог, если получается, правда? ) И да, деление отнимает 30 тактов, смысла которого в данном случае нет. Не просто же так мой "StrToFloat" работает в 3 раза быстрее. Приходится думать головой, как это реализовать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 15:44 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Запись дат теперь стала ещё быстрее, благодаря интересному подходу, который извучил местный форумчанин Шарахов Александр: 19012418 Обновления только что успешно прошли юнит тест, код закоммитил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 20:24 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЗапись дат теперь стала ещё быстрее, благодаря интересному подходу, который извучил местный форумчанин Шарахов Александр Тебе предстоит ещё многому научиться: http://guildalfa.ru/alsha/ особенно вот это: http://guildalfa.ru/alsha/node/27 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 20:32 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
defecator, Я сомневаюсь. Чувак молодец, но статьи не особо глубокие, в сфере оптимизаций много других интересных тем. Тот же lock-free на Delphi или поиск символа в регистре за одну итерацию с минимумом ветвлений. Чувак, насколько я увидел, вообще злоупотребляет ветвлениями. Оно может на синтетических данных даёт хороший результат, т.к. предсказания прыжков срабатывают, а в боевых условиях данные разнородны, в то время как ложное предсказание обойдётся в 17 тактов. С другой стороны его описание поразрядной сортировки - это что-то с чем-то. Алгоритм-шедевр. И если бы не Александр - возможно я так и не столкнулся бы с этим алгоритмом. Единственное что бесит - это стиль оформления кода. Ужасно. Хочется выколоть себе глаза :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 21:23 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕдинственное что бесит - это стиль оформления кода. Ужасно. Хочется выколоть себе глаза :) Открой для себя автоматическое форматирование. P.S. А стиль этот намного старше Delphi, а, может, и старше тебя. Так чта ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 22:40 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 23:10 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЯ сомневаюсьв смысле тебе больше нечему учиться? SOFT FOR YOUстатьи не особо глубокиеэто скорее заметки на полях SOFT FOR YOUв сфере оптимизаций много других интересных темкак будто кто-то способен объять необъятное SOFT FOR YOUЕдинственное что бесит - это стиль оформления кода. Ужасно. Хочется выколоть себе глазаа за твой стиль общения и манеры хочется вырвать тебе язык, чувак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 09:10 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Так и хочется спросить: "люди, сколько вам лет?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 09:18 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
vavan, Ну каждый воспринимает информацию по-своему. Я всегда стараюсь общаться вежливо и конструктивно. Кого-то это бесит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 09:18 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Barmaley57, Мне 30 скоро. Это имеет какое-то отношение к теме? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 09:19 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUBarmaley57, Мне 30 скоро. Это имеет какое-то отношение к теме? )Да нет, в общем. Просто стиль общения в некоторых темах скорее напоминает разборки в детском саду, надувание пузырей и загибание пальцев) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 09:23 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Barmaley57, Пожалуйста, эта ветка отведена под обсуждение конкретного проекта. Я буду рад поговорить о нем. Ответить на вопросы, если будут. Если есть возможность - не пиши подалуйста здесь на общие темы. Для этого есть "курилка" или другие форумы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 09:26 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUBarmaley57, Мне 30 скоро. Это имеет какое-то отношение к теме? ) Тогда это со временем пройдет (возможно). Я в 30 лет тоже переворачивал мир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 10:42 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
schi, Прогресс обязан тем, кто переворачивал мир. Я вношу свой скромный вклад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 11:28 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Тебе можно тут вопросы по CachedTexts задавать? 1. В BDS2006 при использовании в проекте одновременно Indy и CachedTexts произошла коллизия определения типа TBytes. Пришлось закомментить определение типа в твоем модуле и добавить в uses Indy. Заработало, но это как-то странно. 2. В XE3 64-битный проект не компилится при добавлении в uses CachedTexts. [dcc64 Error] UniConv.pas(5792): E2099 Overflow in conversion or arithmetic operation Код: pascal 1. Причем если навести мышку на константу, дельфи показывает ее значение - 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 17:57 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Он что, назвал тип TBytes? Цирк с конями... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 19:18 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Flying-home, Пиши лучше сюда https://t.me/DelphiCommunity ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 20:41 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Он что, назвал тип TBytes? А что такого? Нужно было юнит сетевой библиотеки подключить для алиасинга единственной декларции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:02 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Нужно было называть классы так, чтобы названия не пересекались с Delphi-ми. Когда фантазия хромает - люди используют префиксы. TCB_Butes, например. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:41 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Или TCT_Butes, не знаю, как у него там либа называется/сокращается. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:41 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Нужно было называть классы так, чтобы названия не пересекались с Delphi-ми. Когда фантазия хромает - люди используют префиксы. Не всем нравятся префиксы. Лично мне не нравятся. У нас не глобальное пространство имён, чтобы выдумывать нелепые абревиатуры для идентификаторов. TBytes появился в RTL только в D2007, поэтому авторы библиотек желающие обеспечить совместимость кода с более старыми версиями вынужны декларировать свой TBytes. Обычно, он декларируется так, что не приводит к проблемам при использовании на версиях после D2006 (на более ранних проблемы перекрытия деклараций возможны, но в дельфях есть механизм их разрешения). Это делают в jcl, funamentals, mormot, zeoslib и ещё куча менее известных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 22:46 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Flying-home, Насколько я помню, в Indy что-то типа TIdBytes В целом да - сделано, чтобы использовать привычный набор типов, в том числе на старых Delphi Лучше не правь Indy Для разруливания случаев, когда используются одни и те же имена типов, в модуле явно указывается из какого модуля тип. Например, не TBytes, а CachedTexts.TBytes или IndyЧтоТоТам.TBytes По вопросам лучше да, пиши в комьюнити Я там чаще, чем здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 23:25 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Или TCT_Butes, не знаю, как у него там либа называется/сокращается. Да просто Butes и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 01:34 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey> авторы библиотек желающие обеспечить Kazantsev Alexey> совместимость кода с более старыми версиями С более старым версиями чего, простите? ъъъъъ> Да просто Butes и всё. Предлагаю объявлять свои TStrings, TList, TPersistent... integer в конце концов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 17:07 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам С более старым версиями чего, простите? Совместимость своего кода со старыми версиями дельфей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 18:32 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Flying-home, Насколько я помню, в Indy что-то типа TIdBytes В целом да - сделано, чтобы использовать привычный набор типов, в том числе на старых Delphi Лучше не правь Indy Для разруливания случаев, когда используются одни и те же имена типов, в модуле явно указывается из какого модуля тип. Например, не TBytes, а CachedTexts.TBytes или IndyЧтоТоТам.TBytes По вопросам лучше да, пиши в комьюнити Я там чаще, чем здесь С этим я уже разобрался. А со вторым вопросом что? ЗЫ В телеге не хочу ничего обсуждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 18:57 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам ...integer в конце концов. Ты ведь знаешь о типах NativeInt и nativeUInt? Конечно знаешь. Так вот прикол в том, что до версии D2010 их использование очень часто приводило к сносу крыши у компилятора. Поэтому что? Вот-вот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 21:05 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey> Совместимость своего кода со старыми версиями дельфей. А, написать (или скопировать) свой класс, который одноимённый (и с тем же функционалом) введённому позже стандартному, и всё это без дефайнов. ОК, классная логика. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 21:14 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, Почему без дефайнов? Когда тип декларирован, для него просто создаётся псевдоним, а когда декларации нет, создаётся декларация (либо псевдоним на аналогичный имеющийся тип). Например: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 21:21 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey> Почему без дефайнов? Ну потому что вон выше у гения оптимизации их нет (судя по описанию). Kazantsev AlexeyКогда тип декларирован, для него просто создаётся псевдоним, а когда декларации нет, создаётся декларация (либо псевдоним на аналогичный имеющийся тип). Угу. Но согласись, это совсем не то же самое, что ты говорил сначала... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 22:14 |
|
||
|
Официальный релиз библиотеки "CachedTexts"
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Ну потому что вон выше у гения оптимизации их нет (судя по описанию). У него они тоже есть, просто другие. У него декраларация делается с расчётом на XE и выше. Гаджимурадов Рустам Но согласись, это совсем не то же самое, что ты говорил сначала... Да нет, именно об этом и говорил: Обычно, он декларируется так, что не приводит к проблемам при использовании на версиях после D2006 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 22:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037462]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
132ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 516ms |

| 0 / 0 |
