I'm a very experienced software developer and manager (I wrote my first line of 
code in 1960 in college!). I'm retired now, but still do a lot of software 
development for my own use. My primary focus is a suite of personal finance 
programs that I wrote mostly for myself, but have shared on github. The main 
program and several utilities are written in C; other smaller utilities in Tcl. 
The data is stored in a sqlite database. The gui was done with gtk3.

I do have a particular interest in programming languages and have used an awful 
lot of them over my long career. In recent years, I've written a fair amount of 
Haskell code and more recently, some Go and Rust code. I'd like to re-write the 
C components of my finance suite in something more modern, so am evaluating 
languages for that purpose. I've re-written the smallest of them in Haskell, Go 
and Rust as exercises in those languages. I've also done a similar exercise 
with Chez Scheme. That system is excellent -- solid and very fast -- but I've 
really become sold on static typing. I've had debugging sessions with Scheme 
code that were much too long and involved errors that would have been caught at 
compile-time in a statically typed environment.

I think Haskell is very interesting, something to which we should all have some 
exposure. But to get anything real done, you end up writing a lot of imperative 
code and it isn't a good vehicle for that.

Go is fine, well done, but pretty uninteresting as a language, and its 
performance, at least in bench-marking exercises, has not always been stellar. 
It's probably fine for my purposes, but I'd like to have some fun, too, and Go 
is awfully ho-hum.

Rust. Now there's an interesting case. I've spent too much time trying to 
wrestle it to the ground and have, finally, produced working code with it. But 
if you need global state for any reason -- e.g., hash-tables, switches, etc. -- 
I wish you a lot of luck. Trying to pass around a mutable global structure gets 
you into lifetime hell. Statics, particularly if they are mutable, are almost 
impossible to use, partly because the damned thing insists on imposing 
thread-safety upon you, even if your application is inherently single-threaded. 
Also statics can only be initialized with things that can be computed at 
compile time. Yes, there's lazy_satic and a thread-local thing, but I ran into 
road-blocks there, too. Basically, if you like wearing a hair-shirt while 
writing code and like fighting with your tools, Rust is just the thing for you. 
Did I mention that the documentation is awful? At this point, the only reason I 
can see for using Rust is if you have a situation that really can't tolerate 
garbage collection in any form. I can imagine situations where the pauses due 
to mark-sweep could be an issue, but reference counting? I wonder if this is a 
solution in search of a problem. I certainly don't think Rust is a sensible 
choice for most applications.

Reading slashdot recently brought nim to my attention. I'd never heard of it, 
but what I read suggested that I ought to have a look. I have done that and 
have re-written my smallest C utility in nim and have gotten it working (I do 
my work on Arch Linux systems and one machine running DragonFly BSD). So far, 
I'm very impressed. The language is nicely designed, a very sensible amalgam of 
good things from places like Python. The performance seems good, though what 
I've written thus far is not demanding in that regard. What has impressed me 
most is the speed of my work and the readability of the code. Developing in nim 
thus far has been comparable to Go and the opposite end of the scale from Rust 
in terms of productivity and frustration level. The code reads very much like 
Python and that's a good thing, especially when you consider that you have the 
added advantage of the performance of compiled code and the debugging advantage 
of static typing.

So I just wanted to drop a note and pay a compliment for what appears to be 
very good work. Hopefully I won't run into any show-stoppers, but so far, so 
good.

/Don Allen|   
---|---

Reply via email to