-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
F# and OCaml are kind of great for this in my opinion.
With F# in particular, the code project/workspace has a root .fsproj file where you list the dependency order of files. The topmost file cannot depend/call anything from any of the files below, and the bottom most file is the program's entry point depending on all the other files in the project and which itself cannot be depended on. OCaml has the same rule, but the dependency order is automatically detected (which I comparatively dislike to be honest as the .fsproj file serves as easy documentation - although I've seen tools that generate a graph for OCaml's dependency order).
The same dependency rule (code at the top of the file cannot call code below) is followed within a single file too by default. It is possible to opt-out of this rule in an intra-file (within the same file basis) but discouraged to do so I think.
I've found that much more helpful in understanding code than UML diagrams in all honesty.
I remember (before I learned F# or OCaml) reading some of VS Code's source code[0] for learning purposes and finding that class A referenced another class B, and that class B referenced class A which I found confusing. I managed to overcome my issue by drawing a dependency tree of functions which gave some chronological order and understanding.
[0] This to be precise: https://github.com/microsoft/vscode-textbuffer .