Here's a list of issues I know about with the codebase:
- IP addresses are very basic
- See Python's ipaddress module for what they would ideally be like.
- IPv6 parser doesn't support IPv4 addresses
- Several path functions do explicit checks instead of trying and failing.
- This is both slower, and (potentially) riskier.
- No pure-Kotlin path resolving
- Basically means that every
toAbsolutePath()
has to callrealpath(3)
underneath
- Basically means that every
- No buffer operations for datagrams
- Not really optimised for performance
- Allocations have tried to be kept to a minimum, but this isn't always achievable unfortunately
- ByteString's are copied in several places, e.g. if reading is too small
- Some methods like
ByteString.split
are particularly ripe for improvement
- If you are stupid and do fork-exec file descriptors will be copied (no O_CLOEXC yet)
- Win32 support:
- Win32 path methods will do a LOT of system calls
- Thank its weird concept of symbolic links for this.
- Linux doesn't have this issue because symlinks can always be treated as just files, and it has realpath() to do the symlink shenanigans for us.
- I think some can be reduced, at least, by merging some checks...
- No overlapped support on files. (Yet!)
- File handles require a new allocation due to an
expect/actual
bug.
- Win32 path methods will do a LOT of system calls
- Several interfaces are missing convenient default values.
- This is ALSO a Kotlin bug!