Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3

Купить можно, пользоваться - сложно


Eraser ©   (17.04.18 15:31[40]


> KSergey ©   (17.04.18 11:05) [36]


> WriteLog

я бы переписал WriteLog на юникод.


Eraser ©   (17.04.18 15:33[41]

вот с AnsiString была проблема в FMX, в виде отсутствия типа AnsiString вообще. Для некоторых библиотек это было большой проблемой, потратил изрядно сил в свое время. Однако, в новых версиях AnsiString добавили в FMX.


KSergey ©   (17.04.18 15:55[42]

> Eraser ©   (17.04.18 15:31) [40]
> я бы переписал WriteLog на юникод.

WriteLog в данном случае вообще внешняя функция хост-приложения, там без шансов юникод внедрить )
Впрочем, у меня тоже была идея: т.к сейчас вообще не понять сколько там преобразований происходит на самом деле (похоже при конкатенации строк много раз туда-сюда всё гоняется, судя по ворнингам, там же иногда еще участвуют строковые переменные AnsiString, вернее даже PAnsiString указатели).

Так вот у меня тоже была уже идея, но не проверил пока: возможно будет иметь смысл в дельфи сделать прослойку для WriteLog, которая будет принимать юникодный String, и потом при отдаче хост приложению - один раз её уже конвертировать в AnsiString.
Обидно, что заставить дельфи все время работать только с AnsiString в таких частях кода похоже вообще не удаётся.


KSergey ©   (17.04.18 15:57[43]

Либо для конкатенации строк вообще отказаться от использования оператора +, а сделать свою просто функцию "добавить к буферу".

О, кстати: а может тут нам поможет создание классов со своими перегруженными операторами ? о, "тема", надо подумать в эту сторону.


Alex-Sk ©   (17.04.18 17:22[44]


> Либо для конкатенации строк вообще отказаться от использования
> оператора +, а сделать свою просто функцию "добавить к буферу".
>


Советую не просто "добавить к буферу", а "писать в буфер с заданной позиции".


Eraser ©   (17.04.18 18:56[45]


> KSergey ©   (17.04.18 15:55) [42]


> возможно будет иметь смысл в дельфи сделать прослойку для
> WriteLog

думаю так и надо делать, по возможности, уходить от ANSI где только можно.


> О, кстати: а может тут нам поможет создание классов со своими
> перегруженными операторами ?

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Operator_Overloading_(Delphi)

из пушки по воробьям.


ухты ©   (17.04.18 21:45[46]


> Либо для конкатенации строк вообще отказаться от использования
> оператора +
а кто то спец. функциями форматирования пользуется и не морочят людям голову по пустякам.


KSergey ©   (18.04.18 07:37[47]

> ухты ©   (17.04.18 21:45) [46]
> а кто то спец. функциями форматирования пользуется и не морочят людям голову по пустякам.

Это какими?
Это где ты сначала пишешь форматную строку с подстановками, потом мучительно выстраиваешь параметры в нужном порядке, после чего молишься, чтобы не забыть поправить форматную строку, когда добавится еще параметр? вы про это?
Если так - ну его нафик, за эту идею с форматными строками авторов вообще удавить следует. Оно только для студенческих лабораторных годится для вывода двух переменных: x и y.
Когда подстановок пара десятков - это адок тот еще поддерживать.

Если вы о чем-то другом - буду признателен за более развёрнутый ответ.


KSergey ©   (18.04.18 07:38[48]

> Eraser ©   (17.04.18 18:56) [45]
> > перегруженными операторами ?
> из пушки по воробьям.

На сколько я понимаю, реализация перегрузки - вполне дешёвая операция, на уровне вызова функций.
А т.к. речь про строки, что не быстро само по себе - то и вовсе ни о чем.


ухты ©   (18.04.18 10:05[49]

а зачем вы постоянно правите строки и добавляете параметры?
есть подозрение что у вас что то не то в консерватории))


KSergey ©   (18.04.18 11:24[50]

А зачем вы внедряете новые фичи и правите баги?
Ровно для этого.

Правятся расчетные формулы, усложняются алгоритмы, в которые добавляются новые внешние параметры, которые хотелось бы отлогировать для разборы "что пошло не так".

Вы всё еще уверены про консерваторию?
Впрочем, даже единожды написать форматную строку с десятком параметров, а потом эти параметры приставить так, чтобы не ошибиться - уже вызывает неистребимое желание более так не делать всеми доступными способами.


KSergey ©   (18.04.18 11:30[51]

> KSergey ©   (18.04.18 07:38) [48]
> На сколько я понимаю, реализация перегрузки - вполне дешёвая
> операция, на уровне вызова функций.

Поэкспериментировал.
А вот тут я, увы, оказался сильно не прав.
В Delphi эти место, к сожалению, сделано крайне криво: в записи вроде такой

a: TMyType;
...
 a := a + str1 + int1 + int2 + str2 + int3 + str3 + str4;

где в TMyType перегружен + для "добавления" разных типов (не важно как именно по смыслу)
фактически для каждой операции "+" создаётся:
 1) временный пустой объект a
 2) в него копируется
 3 к нему "добавляется"
 4) он снова копируется (про этот шаг не уверен, возможно нет либо этого шага, либо шага 2)

что капец, конечно.

Даль, очень жаль. Формально перегрузка есть и работает, но реализация весьма специфичной получается.
Разве что в Release варианте всё как-то более оптимально (это я дебажил дебажный вариант). Как проверить для релизного - не совсем мне понятно, разве что в ассемблерный код сгенерированный поштыриться


Дмитрий Белькевич ©   (20.04.18 00:42[52]

Посмотри на TStringBuilder:

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.TStringBuilder


Дмитрий Белькевич ©   (20.04.18 00:45[53]


> Впрочем, даже единожды написать форматную строку с десятком
> параметров, а потом эти параметры приставить так, чтобы
> не ошибиться - уже вызывает неистребимое желание более так
> не делать всеми доступными способами.


Можно попробовать изобразить класс с именованными параметрами, присваивать куда что нужно ну и на выходе забрать либо собранную строку либо строку для format'а. Думаю, строк в 10-20 можно вложиться.


Дмитрий Белькевич ©   (20.04.18 00:52[54]

Что-то типа:

Это мой крутой лог для рассылки :count сообщений пользователям :user1, :user2, :user3.

Потом
Params['count'] := '3'
Params['user1'] := 'Вася Пупкин'
...

Небольшой паресер по WordDelim с поиском параметров по разделителю и заменой их 'по ходу' парсинга.


Германн ©   (20.04.18 02:02[55]


> KSergey ©   (17.04.18 06:10) [34]
>
> > Германн ©   (17.04.18 03:03) [33]
> > О какой совместивости  вы говорите? Единственная разница
> > между Д2009+ и более ранними версиями - это использование
> > Юникода взамен ANSII.
>
> Замечу: насильное использование юникода, без возможности
> его не использовать.
> Для чисто дельфовых проектов - это на самом деле фигня и
> даже классно. Всё в юникоде - и это отлично.
> Но как только есть связь с внешним миром - приплыли.

Ну в таком варианте согласен.
Именно поэтому я и отказался от использования Д2009+ в своих уже малочисленных и редко вспоминаемых проектах. Я хорошо помню как при переходе с Д1 на Д2 разработчики ввели опцию компилятора $H+/-. Перенос проектов был очень простым.
А сейчас с одной стороны по слухам и разработчики гораздо более слабые и задачи у них в основном другие.
А с другой стороны. Если ввести новую опцию компилятора по включению/выключению юникода, она явно будет конфликтовать с вышеуказанной опцией $H.


KSergey ©   (20.04.18 09:03[56]

> Дмитрий Белькевич ©   (20.04.18 00:42) [52]
> Посмотри на TStringBuilder:

А вот это спасибо! хорошая затея
Надо глянуть реализацию, если он каждый раз возвращает ссылку на самого себя, т.е. просто в один буфер всё складывает без перекопирований - то очень даже толково  придумано в рамках синтаксиса Delphi


ухты ©   (20.04.18 19:16[57]


> толково  придумано в рамках синтаксиса Delphi
стырено )


Страницы: 1 2 3 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо