SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001268SAS.ПланетаРефакторингpublic07-04-2012 13:2710-10-2012 11:47
Reporterzed 
Assigned Tovdemidov 
PrioritynormalSeverityminorReproducibilityN/A
StatusclosedResolutionfixed 
PlatformWindowsOSXPOS VersionSP3
Product Version.Nightly 
Target Version120808Fixed in Version120808 
Summary0001268: Мелкие оптимизации в больших количествах (646 оптимизаций)
Description1. Missing "const" for unmodified string parameter: 308
2. Missing "const" for unmodified record parameter: 63
3. Missing "const" for unmodified array parameter: 19
4. Array properties that are referenced/set within methods: 3
5. Virtual methods (procedures/functions) that are not overridden: 229
6. Local subprograms with references to outer local variables: 24

Отчёт сгенерирован при помощи Peganza Pascal Analyzer 6.1.2 для SAS.Планета 5332
TagsNo tags attached.
Attached Filestxt file icon OptimizationReport.txt [^] (77,196 bytes) 07-04-2012 13:27 [Show Content]

- Relationships

-  Notes
(0006408)
zed (manager)
07-04-2012 13:40

Так же, эта утилитка выплюнула около 2,5 тысяч варнингов с заголовком "Interfaces passed as parameters without "const" directive"... походу интерфейсы нужно _всегда_ передавать как константы?
(0006409)
vasketsov (manager)
07-04-2012 15:06
edited on: 07-04-2012 15:09

>Missing "const" for unmodified string parameter
И это плохо.

>Missing "const" for unmodified array parameter
Такого по идее вообще нельзя допускать. Передавать указатель (пусть и через const). То же с рекордами.

>нужно _всегда_ передавать как константы?
По идее всё неизменяемое надо указывать как const. Потому что формально компилятор должен давать по рукам, если из процы с const зовётся проца без const. Но он в этом случае занимается "копированием" (очевидно для обратной совместимости). Одно дело если в стек уронить int (тут как бы нет копирования), а строки и интерфейсы - совсем другое.
Если интерфес передать как const - я так понимаю у него счётчик ссылок не будет меняться (не работает конструктор копирования). Значит если в рамках одной процы создать поток и отдать в него интерфейс как const а потом обNILить - поток грохнется при обращении к интерфейсу? Но вроде как все "долгоживующие" экземпляры интерфейсов в поля объектов падают, так что наверное 99% надо с const их передавать.
Я для себя ещё давным-давно придумал: если параметр явно не меняется независимо от типа - пиши const. Где надо - компилятор сам укажет на изменение константного параметра.

>Local subprograms with references to outer local variables
Это либо я не понял, либо не понимаю, что именно предлагается в конкретных случаях.

(0006413)
vdemidov (manager)
07-04-2012 19:19

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

А где эту софтинку можно взять? Это все нужно потихоньку править.
(0006414)
vdemidov (manager)
07-04-2012 19:35

>>Local subprograms with references to outer local variables
> Это либо я не понял, либо не понимаю, что именно предлагается в конкретных случаях.
Предлагается передавать их во вложенные процедуры явным образом. И это правильно.
(0006415)
vasketsov (manager)
07-04-2012 20:10
edited on: 07-04-2012 20:30

Что ж тут правильного? Вместо дешёвейших jmp при нескольких параметрах будет генериться стек. Вроде как суть темы - оптимизация, а не чтобы тулза ничего не выдавала. А под оптимизацией должен пониматься некий критерий оптимальности, скорость, размер, а вовсе не абстрактная "красота". Коли нет в конкретном случае ничего оптимальнее чем тупой jmp на кусок кода в рамках того же стека из кучи мест в процедуре - нужны крайне веские основания, чтобы переделывать неотпимально.

>Array properties that are referenced/set within methods
Это тоже непонятно. Вроде бы Array properties всегда через methods реализуются?

(0006419)
vdemidov (manager)
11-04-2012 19:40

Local subprograms with references to outer local variables
This section shows nestled local procedures, with references to outer local variables. Those local variables require some special stack manipulation so that the variables of the outer routine can be seen by the inner routine. This results in a good bit of overhead.
(0006420)
zed (manager)
11-04-2012 20:00

>require some special stack manipulation
Т.е. тут не то что выгода, тут наоборот, ущерб быстродействию? О "дешёвейших jmp" и речи нет?

Да и читаемость кода при таком подходе хуже, нежели явная передача переменных.
(0006421)
vasketsov (manager)
11-04-2012 20:14

Судя по всему надо по месту смотреть, в зависимости от числа параметров и т.п.

- Users who viewed this issue
User List Anonymous (3092x)
Total Views 3092
Last View 22-11-2024 03:07

- Issue History
Date Modified Username Field Change
07-04-2012 13:27 zed New Issue
07-04-2012 13:27 zed File Added: OptimizationReport.txt
07-04-2012 13:40 zed Note Added: 0006408
07-04-2012 15:06 vasketsov Note Added: 0006409
07-04-2012 15:08 vasketsov Note Edited: 0006409 View Revisions
07-04-2012 15:09 vasketsov Note Edited: 0006409 View Revisions
07-04-2012 19:19 vdemidov Note Added: 0006413
07-04-2012 19:35 vdemidov Note Added: 0006414
07-04-2012 20:10 vasketsov Note Added: 0006415
07-04-2012 20:13 vasketsov Note Edited: 0006415 View Revisions
07-04-2012 20:30 vasketsov Note Edited: 0006415 View Revisions
11-04-2012 19:40 vdemidov Note Added: 0006419
11-04-2012 20:00 zed Note Added: 0006420
11-04-2012 20:14 vasketsov Note Added: 0006421
17-04-2012 10:14 vdemidov Status new => resolved
17-04-2012 10:14 vdemidov Fixed in Version => 120808
17-04-2012 10:14 vdemidov Resolution open => fixed
17-04-2012 10:14 vdemidov Assigned To => vdemidov
14-05-2012 08:32 vdemidov Target Version => 120808
10-10-2012 11:47 Tolik Status resolved => closed



Copyright © 2007 - 2024 SAS.Planet Team