btdu - a sampling disk usage profiler for btrfs (written in D)
Vladimir Panteleev
thecybershadow.lists at gmail.com
Sun Nov 8 17:23:32 UTC 2020
https://blog.cy.md/2020/11/08/btdu-sampling-disk-usage-profiler-for-btrfs/
https://github.com/CyberShadow/btdu
D-related thoughts:
- D programs that build fine on one Linux machine may still fail
to build with mysterious linking errors on another, even when
using Dub which takes care of dependency management. I saw two
counts of this, caused by differences in DMD/LDC and Arch/Debian
(one being that, for whatever reason, libz is not pulled in on
LDC/Debian despite being a Phobos dependency). Also, LDC is the D
compiler that's installed by default when the system wants a D
compiler (e.g. if you try do install Dub by itself).
- The garbage collector is still a major hindrance for system
programming. In this case it was due to the ioctls used being
slow, and when the GC tries to stop the world to do its thing, it
just hangs the entire program until ALL ioctls in all threads
complete. This means it wasn't possible to have a stutter-free
interactive UI, so I had to move processing to subprocesses.
- One user wondered why the program needed so many threads. The
answer was that half of them were owned by the GC (it never stops
its worker threads, they just sit idle).
- I used the Deimos ncurses bindings package. I'm thankful that
it already existed, though I had to push some fixes to fix static
linking. The most annoying part was waiting overnight for
code.dlang.org to pick up the new tags, because there is no way
to get it to update a package unless you're the owner, and no way
to otherwise specify a dependency unless using a branch (which is
deprecated and prints a big warning when your users build your
program).
- Nice D features that came in useful: reflection to generate a
lightweight serializer/deserializer for subprocess communication;
strings as slices to allow processing them without copying them
out of the network buffer; and template mixins to add common
behavior to types without runtime polymorphism.
More information about the Digitalmars-d
mailing list