What's the best programming language for DNS?
Everytime I get ready to start a new project, I struggle with what language to write it in. Lately, I've been writing a lot of prototype DNS features. The development environment is becoming more and more important to me. In the past, I've used the standard vim/gcc/gdb/ctags/id-utils tools. This still works but after having experimented with other languages, I realize this is outdated. After using Xcode on macOS for iPhone/iPad development, I've come to really appreciate Xcode for the speed of the edit/compile/debug cycle. But available libraries and language features in C are still a problem and Objective-C isn't portable.
I've tried some interpreted languages like python and ruby but they don't seem to be suited for high performance, scalable network server software and debugging them is not easy.
After using Xcode and the LLVM based tools, I really love the speed of LLVM based solutions and all of the advantages they bring like the static analyzer and optimizations that can be made at compile time with memory efficiency, strict typing, and debugging. Therefore, I decided to only look at LLVM based solutions. Sorry Golang. Sorry Node.js.
Also, I'm starting to like features introduced in many of the functional programming languages like promises or futures, async/await, and observables (see here).
Based on this criteria, I've found two possibilities:
There's a scattering of Swift DNS code around but nothing low level or comprehensive. But Rust has what seems to be a very exciting option:
This work is broken down into a bunch of smaller Rust Crates, see here.
So if you're a DNS Rust developer and you want to collaborate, let me know!
I am going to see how much I can integrate Rust into Xcode 10.0 and would love some help.
This dns-parser crate seems pretty good so far. When programming custom DNS applications, I find it simpler to work with.
The answer is NLnetLabs. What was the question? Oh yeah, what is the best DNS library I've found so far for Rust? domain and the crate is here: crate.