|
|
|
with и без with
|
|||
|---|---|---|---|
|
#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. Я думал, компилятор выделенное давно умеет оптимизировать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 11:36 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
в том числе поэтому я за with. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 12:27 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Квейд, Решается дополнительной локальной переменной (указатель на TRecord), их компилятор умеет раскладывать по регистрам если ему не мешать. with, в текущем её виде, очень опасная конструкция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 13:06 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Квейд, А оптимизацию в debug-сборке включили?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 15:13 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
alekcvp, Я проверял релизную сборку и сморел внешним дизассемблером. Оптимизации это не про дельфю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 15:29 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
alekcvp Квейд, А оптимизацию в debug-сборке включили?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 17:10 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Посмотрел FPC, он в обоих вариантах обновляет значение EAX. Дополнительная переменная ему тоже помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 17:16 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Посмотрел ещё Oxygene... Он вообще выкинул лишние операции, оставив только однократное присваивание. А чтобы он и его не выкинул пришлось в конце метода добавить вывод в консоль. Вот что LLVM животворящий умело приготовленный делает. Эх... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 17:58 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Это только с динамическим массивом, а вот с таким PRecordArray = ^TRecordArray; TRecordArray = array[0..9] of TRecord; нормально оптимизирует. И вроде бы с дин. массивом переданным как const. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 18:36 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Вот что LLVM животворящий умело приготовленный делает. Эх... :( https://wiki.freepascal.org/LLVM#Build_FPC_with_LLVM_support ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 19:29 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Sapersky, Да, я вкурсе (+18% к производительности, неплохо так). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 19:49 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
18% они получили на самом компиляторе - в целом не очень впечатляет, но это видимо из-за того, что там алгоритмы не векторизуемые и/или никто специально не затачивал под векторизацию. Если заточить, тогда должно быть больше. Видимо, это они имеют в виду под "Artificial benchmarks will also be much faster". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 20:46 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Sapersky, В том то и дело, что на обычном коде c обычным набором команд, а не на заточеном бенче. Это круто. На вычислительных задачах должно быть значительно больше, это да. Впрочем, у них и своя векторизация есть т.ч. отрыв может и не быть значительным (правда, я не смог собрать бенчик с использованием AVX, компилятор постоянно падал. Хотя, давно это было). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2020, 21:10 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Очевидно что Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. либо Код: pascal 1. Всё остальное говнокод. А ну да, в новых версиях тип auto var Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. [/SRC] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 04:45 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
И что будет в RA после таких присвоений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 11:01 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
DmSer, Код: pascal 1. будет ровно Код: pascal 1. 2. 3. 4. 100% одинаковый код листинг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 13:40 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
KtoI DmSer, Код: pascal 1. будет ровно Код: pascal 1. 2. 3. 4. 100% одинаковый код листинг Учитывайте, что только в случае использования with будет изменён элемент массива RA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 14:58 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
Пофантазирую... Оператору with в Паскале не хватает возможности определения алиасов. Было бы здорово иметь такой синтаксис: with myArray[i] as a, myObject as o do begin a := 1; o.Value := a; end; Это позволило бы сделать оператор with более безопасным, а синтаксис языка более приятным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 17:21 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
DmSer И что будет в RA после таких присвоений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 18:06 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
DmSer with myArray[i] as a, myObject as o do ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 18:08 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ DmSer with myArray[i] as a, myObject as o do Вместо as можно предложить и другой набор букв, это не самое главное. Да и с as можно разрулить, было бы желание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 19:03 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
DmSer with myArray[i] as a, myObject as o do В Oxygene это выглядит так: Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 19:24 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
DmSer Пофантазирую... Оператору with в Паскале не хватает возможности определения алиасов. Было бы здорово иметь такой синтаксис: with myArray[i] as a, myObject as o do begin a := 1; o.Value := a; end; Это позволило бы сделать оператор with более безопасным, а синтаксис языка более приятным. Для этого with не нужен, решается через обычные переменные: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 23:17 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
alekcvp DmSer Пофантазирую... Оператору with в Паскале не хватает возможности определения алиасов. Было бы здорово иметь такой синтаксис: with myArray[i] as a, myObject as o do begin a := 1; o.Value := a; end; Это позволило бы сделать оператор with более безопасным, а синтаксис языка более приятным. Для этого with не нужен, решается через обычные переменные: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Согласен, способов написать отвратный код в Delphi предостаточно (как и везде). Я-то другое предлагаю: способ, позволяющий в некоторый случаях писать более приятный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2020, 23:47 |
|
||
|
with и без with
|
|||
|---|---|---|---|
|
#18+
IMHO, оператор width лучше реализован в VisualBasic : свойства, которые относятся к переменной из with предваряются точкой, сам символ, конечно, не важен, можно заменить на "~", например. Тогда можно писать: Код: sql 1. 2. 3. 4. 5. Конструкция, когда есть вложенные операторы width (неважно в краткой или полной записи), достаточно редки, т.к. приводят к совсем трудно понимаемому коду, но когда используются свойства в методах, это было бы удобно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. В такой конструкции происходит присвоение битмапу размеров формы. Возможно, смысл такой записи можно интерпретировать и наоборот :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2020, 00:27 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39915809&tid=2038681]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
168ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 548ms |

| 0 / 0 |
