Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 .. 6 7 8 9 10 [11] 12 13 14 15 .. 27 вперед Ctrl→ |
JaDi Member Откуда: Сызрань, Россия Сообщений: 3983 |
_Vasilisk_, смысл в том, чтобы у программиста для некоторых сущностей были убраны лишние или опасные вызовы. Такой вот прокси/фасад средствами самой системы. Не то, что такое хочется -- просто пример неудобства и источника косяков при работе с той же VCL. К сообщению приложен файл. Размер - 15Kb |
28 ноя 18, 19:12 [21747821] Ответить | Цитировать Сообщить модератору |
Beltar Member Откуда: Сообщений: 177 |
Насколько я понимаю, со словарями, или даже со строками может быстро работать и Java. И вообще любое г. даже если оно имеет доступ к API через 10 прокладок. Просто потому, что обработать 100000 строк по 1000000 символов в цикле может вообще никаких вызовов API не потребовать. А в целочисленной арифметике 64-хбитные компиляторы вроде практически одинаковы, у Delphi даже чуть быстрее прочих.
Ну хотя бы тот, что обращение к родителю случайно не сделаешь. И конкретно у меня, проблема возникла в том, что я как раз хотел привести к общему знаменателю 2 компонента, чтобы в одном приложении работать с ними хотя бы в 95% случаев единообразно через общего родителя. Но они могут быть и не оба сразу, и тогда необходимости дергать родителя нет, а значит и фигни меньше торчит. Возможность убрать проблему в 50% случаев лучше невозможности сделать это вообще. Точно так же отмененные в 10.3 управляемые структуры не появились в Delphi еще 10-15 лет назад только потому, что это в плюсах невозможно просто скопировать класс, если в нем есть хотя бы строка, и надо конструктор копирования делать, а в Delphi с полностью управляемыми строками любая структура в которой только числа и строки будет копироваться нормально, а это, наверное, 99% всех структур. Не 100%, но достаточно, чтобы низвести проблему до не слишком существенной. |
||
29 ноя 18, 09:58 [21748099] Ответить | Цитировать Сообщить модератору |
Siemargl Member Откуда: 010100 Сообщений: 6041 |
https://ideone.com/fTmVo0 |
||
29 ноя 18, 10:14 [21748119] Ответить | Цитировать Сообщить модератору |
Василий 2 Member Откуда: Сообщений: 411 |
Да, знаю, но это всё же костыль. |
||
29 ноя 18, 10:48 [21748170] Ответить | Цитировать Сообщить модератору |
wadman Member Откуда: Санкт-Петербург Сообщений: 24957 |
Что там? Ссылка на объект присваивается другой ссылке? |
||||
29 ноя 18, 11:06 [21748204] Ответить | Цитировать Сообщить модератору |
Beltar Member Откуда: Сообщений: 177 |
В чем вру? Что если в структуру входит ссылка на класс, то и скопирована будет именно ссылка? Или std::string теперь нормальный строковый тип, а не класс? Попробовал расшифровать (как вообще на этом можно писать...): Создаем экземпляр a класса A с текстовым полем. Присваиваем экземпляру b значение a. Выводим текстовое поле экземпляра b. Разумеется выведет ту же самую строку, с которой создали a. Что будет если мы поменяем строку у a? Предсказываю, она изменится и в b. А что будет тут? TMyObject=class S:String; end TRec=record a:Int32; b:String; o:TMyObject; end; var r1,r2:TRec; begin r1.S:='S1'; r1.o:=TMyObject.Create; r1.o.S:='OS1'; r2:=r1; r1.S:='S2' r1.o.S:='OS2'; end; Чему равны r2.S и r2.o.S? |
29 ноя 18, 11:08 [21748205] Ответить | Цитировать Сообщить модератору |
alekcvp Member Откуда: Сообщений: 1270 |
А действительно, чему будет равно r2.S?.. |
||
29 ноя 18, 11:22 [21748234] Ответить | Цитировать Сообщить модератору |
kealon(Ruslan) Member Откуда: Нижневартовск Сообщений: 4067 |
Beltar, просто конструктор копирования для структур в дельфи делается автоматом вернее там одна проца в которую адреса и ссылка на RTTI структуры передаются и это гораздо медленнее чем спец-конструктор |
29 ноя 18, 11:42 [21748294] Ответить | Цитировать Сообщить модератору |
X11 Member Откуда: Kharkiv, Ukraine Сообщений: 12783 |
Не менее важна быстрая работа графического интерфейса. Быстрый отклик. Быстрая загрузка форм, таблиц и т.д. А то, что цикл на одном языке выполнятся на 3% быстрее, чем не другом - это уже не так важно. |
||||
29 ноя 18, 11:49 [21748316] Ответить | Цитировать Сообщить модератору |
Гирлионайльдо Member Откуда: Сообщений: 427 |
Можно заинжектить приложение А в приложение Б и управлять приложением Б имея её память в карманные дыры |
29 ноя 18, 11:57 [21748339] Ответить | Цитировать Сообщить модератору |
kealon(Ruslan) Member Откуда: Нижневартовск Сообщений: 4067 |
Гирлионайльдо, Ссылка на позицию в клипе: https://youtu.be/FGWptuytOL8?t=1 |
29 ноя 18, 12:21 [21748389] Ответить | Цитировать Сообщить модератору |
Гирлионайльдо Member Откуда: Сообщений: 427 |
kealon(Ruslan), Всё программируешь? - Агя!!!! Делом займись!!! Из за тебя заводы простаивают, и экономика страны падает - АЙяАА!!! |
29 ноя 18, 12:36 [21748410] Ответить | Цитировать Сообщить модератору |
Beltar Member Откуда: Сообщений: 177 |
Делайте ваши ставки. Х)
ЕМНИП RTTI появляется только у TPersistent. Для структуры никакого RTTI нафиг не надо, просто потому, что компилятор по факту определения структуры знает, где в ней, например, строка и может вставить автоматически код, чтобы эта строка была скопирована. А копирование строк в Delphi вообще-то очень ленивое и выполняется через счетчик ссылок на строку с фактическим копированием в новую строчку только если одна из переменных, ссылающихся на строку поменяется. В моем примере это произойдет здесь r1.S:='S2'; Очевидно, что подобное может вообще никогда не произойти, делая саму постановку вопроса о скорости работа конструктора копирования бессмысленной. Метод в целом может быть быстрым, если нам не пришлось создавать новую строчку, а может медленным, если пришлось. А как вы подобное сделаете в плюсах я что-то не очень понимаю, надо будет прописывать в новую строчку вполне реальное копирование, которое будет всегда. Т. е. всегда медленно. Либо руками аналог счетчика ссылок делать, что абсурд. |
||||
29 ноя 18, 13:57 [21748559] Ответить | Цитировать Сообщить модератору |
alekcvp Member Откуда: Сообщений: 1270 |
Не произойдёт. У r1 нет поля S... |
||
29 ноя 18, 14:42 [21748642] Ответить | Цитировать Сообщить модератору |
Beltar Member Откуда: Сообщений: 177 |
Так и скажи, что там опечатка, должно быть: TRec=record a:Int32; S:String; o:TMyObject; end; |
29 ноя 18, 14:55 [21748673] Ответить | Цитировать Сообщить модератору |
Siemargl Member Откуда: 010100 Сообщений: 6041 |
Beltar, ну если ты не понимаешь, как оно работает, зачем что то голословно заявлять? Выучи дельфи сначала. И в С++ и в Дельфе будет работать как правильно, а не как ты себе надумал... В разных языках разные реализации строк - есть иммутабельные, есть COW, а есть простые как тапок. И у каждой реализации есть свои преимущества и недостатки для разных стратегий использования. Идеала нет. |
29 ноя 18, 16:37 [21748863] Ответить | Цитировать Сообщить модератору |
Siemargl Member Откуда: 010100 Сообщений: 6041 |
FPC https://ideone.com/yj9pmB Там есть кнопочка fork - можно экспериментировать |
29 ноя 18, 16:51 [21748879] Ответить | Цитировать Сообщить модератору |
kealon(Ruslan) Member Откуда: Нижневартовск Сообщений: 4067 |
я тебе просто вот это покажу
К сообщению приложен файл. Размер - 11Kb |
|||||||
29 ноя 18, 17:49 [21748926] Ответить | Цитировать Сообщить модератору |
Sapersky Member Откуда: Сообщений: 33 |
Вложенные классы не генерируют "внутреннюю RTTI", которая используется для обработки managed-типов. TRec = record // size = 12 0..3: <unknown>; 4: String; 8..11: <unknown>; // <- это класс end;Надо заменить на object или record. TRec = record // size = 12 0..3: <unknown>; 4: String; 8: TMyObject = record // size = 4 0: String; end; end; |
29 ноя 18, 17:54 [21748934] Ответить | Цитировать Сообщить модератору |
Sapersky Member Откуда: Сообщений: 33 |
Т.е. "компилятор знает" подразумевает некую структуру данных - вот это и есть внутренняя RTTI. Ну или можно назвать TypeInfo, 3-й параметр CopyRecord. |
29 ноя 18, 18:06 [21748956] Ответить | Цитировать Сообщить модератору |
vavan Member Откуда: Казань Сообщений: 3207 |
|
||||
29 ноя 18, 18:43 [21749002] Ответить | Цитировать Сообщить модератору |
Фэйтл Эра Member Откуда: Сообщений: 559 |
struct S { int i; std::string s; }; int main() { S s1 { 1, "Вася" }; S s2 = s1; s2.s = "Петя"; std::cout << s1.i << " " << s1.s << endl; std::cout << s2.i << " " << s2.s << endl; ![]() К сообщению приложен файл. Размер - 1Kb |
||
29 ноя 18, 21:25 [21749116] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1276 |
Для тех кто не зарегистрирован в QC. Список фиксов. http://docwiki.embarcadero.com/RADStudio/Rio/en/New_features_and_customer_reported_issues_fixed_in_RAD_Studio_10.3#List_of_publicly_reported_bugs_fixed_in_10.3 |
1 дек 18, 00:58 [21750871] Ответить | Цитировать Сообщить модератору |
X11 Member Откуда: Kharkiv, Ukraine Сообщений: 12783 |
Вместо того, чтобы исправить баги, они рекламируют IDE Fix Pack https://community.idera.com/developer-tools/b/blog/posts/performance-and-quality-in-the-rad-studio-10-3-ide |
1 дек 18, 10:12 [21750915] Ответить | Цитировать Сообщить модератору |
DmSer Member Откуда: Пенза Сообщений: 725 |
По такому принципу закрываются некоторые баги:
|
||
1 дек 18, 10:22 [21750917] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 .. 6 7 8 9 10 [11] 12 13 14 15 .. 27 вперед Ctrl→ |
Все форумы / Delphi | ![]() |