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

start [/forum/topic.php?fid=58&tablet=1&tid=2038681]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 484ms |

| 0 / 0 |
