D-Scanner icon indicating copy to clipboard operation
D-Scanner copied to clipboard

add warnings for known useless / avoidable memory-allocations (especially in phobos)

Open WebFreak001 opened this issue 1 year ago • 1 comments

Known useless extra allocations (can be removed without any downsides):

  • [ ] std.array:array on SortedRange!(T[]) -> use .release (avoids allocation) or .dup (keeps behavior) instead
  • [ ] std.array:array on result of joiner -> use join

Known extra allocations that might be there for a reason:

  • [ ] any function taking both string and string range - only warning in trivial cases with simple strings as arguments, since other types and ranges may not be evaluatable twice - suggest replacement function (avoids allocation) or use new local string variable (keeps behavior)
    • [ ] std.path : buildPath -> chainPath
    • [ ] std.utf : toUTF8 -> byUTF!char
    • [ ] std.utf : toUTF16 -> byUTF!wchar
    • [ ] std.utf : toUTF32 -> byUTF!dchar
    • [ ] std.uni : toLower -> asLowerCase
    • [ ] std.uni : toUpper -> asUpperCase

WebFreak001 avatar Sep 04 '23 15:09 WebFreak001

cc @ljmf00 this might actually be something that should be trivial to implement in ldclint, where you could even accurately check for InputRange/ForwardRange and actually also warn on cases that D-Scanner wouldn't easily be able to tell apart and would just leave out to avoid false positives.

Although we are likely still going to implement this in D-Scanner anyway, with its not full accurate, but much less RAM using dsymbol index, while ldclint isn't fully ready to be used yet

WebFreak001 avatar Sep 04 '23 15:09 WebFreak001