Introducing The Heron Programming Language
Christopher Diggins writes "The Heron programming language, is a new general-purpose multi-paradigm programming language in the style of C++ which is starting to make waves. The popular Polish software development magazine Software 2.0 is featuring an article on Heron, in its first English version of the magazine slated to appear in February 2005. A preview of the Heron article is available."
Of course, the first thing I search for in the article is a link that describe the language itself. What a thing to leave out!
The author of this language seems a bit clueless.
You're looking for Python and Ruby. Both are so easy to learn that the correct answer to which one is "both"; try the tutorials for both and you'll probably know pretty quickly. The thing to look for is which philosophy suits you better.
The only thing out of that list you might think is missing is "generic programming", but in general that's because both languages support it so naturally that it isn't even a seperate paradigm. I know Python has libraries for people who insist on the trappings of generic languages, or who really, really need completely seperate functions for the various combinations of args, but I don't know much about them because while I've looked at such things, I've never encountered a situation where the "correct" answer wasn't a slighty more careful API, YMMV.
Unless you're doing intensive numerical calculations that can not be expressed in terms of the various libraries for numerical calculation, or are really focused on embedded programming, both are plenty fast for normal programming.
(I don't know about Ruby but there is a lot of progress towards optimizing Python being made, although I don't know if we'll ever quite get to compilation to pure native code. See PyPy, for instance, which has recently been funded so it ought to stick around and produce something. I expect that within another couple of years, through one avenue or another, the speed penalties of Python will be gone for all practical purposes.)
Granted, neither of these may currently perfect... but holy cow, are they better than C++. Unbelievably better, for the vast majority of uses.
Heron2C compiles to C++, where did I give the impression it compiles to Java? Heron attempts to satisfy all of those goals you list. Check it out at http://www.heron-language.com/
Christopher Diggins
Note that Christopher Diggins is both the author of the language and the article submitter. This may affect your perception on whether a new C++like language is really newsworthy.
The world does not need more C-alike languages, especially if they don't even add in higher order functions and sum/product types. What are they thinking?!
When the primitive type system of a primitive statically typed language like C++ or Java is getting in the way, perhaps.
A modern statically-typed language like ML does not have complexities like templates.
For example, suppose you want to create a list of integers. Let's look at the hated C++:I agree with you: that is ugly and clunky.
Let's look at that in Python:I agree with you: that is much simpler and much more elegant.
Now let's look at it in OCaml, a modern statically-typed language:Can you explain to me how this is more complex than the Python example?
first class functions in a static language? This is like having mallable steel trusses? What is this trying to do again? If you want first class functions, you'll want a define-on-the-fly language as well.
You, sir, are either trolling or criminally ignorant.
Here is a statically typed, natively compiled language that provides fully first-class functions.
Here is another.
There are many others; those are just the most widely used.
Patrick Doyle
I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
The only thing out of that list you might think is missing is "generic programming", but in general that's because both languages support it so naturally that it isn't even a seperate paradigm.
They are both dynamically typed, so they provide no support whatsoever, they just stay out of your way while you support yourself. They don't actively get in your way like C++ and friends, but nor do they know to poke their noses back in when you've introduced a bug like a modern statically-typed language would.
I guess it's only fair that I try to answer the question, since I've ruled your answer out. Hmmmm. I'm not sure anything fits all of those criteria - there is only the tiniest niche for languages that have the safety features useful for complex programs and the desired low level features - but I'll stick my neck out and suggest Cyclone. The only real caveat I can see is that ad hoc polymorphism is only supported in the bare form of existential types (ETs are effectively the assembly language of OO) but that's still vastly better than C and infinitely safer than C++. To be honest, I'd recommend you just write everything you can in Haskell and then invoke little snippets of C or Cyclone when you need the low level access - fortunately there's a lot of common ground in learning the Cyclone and Haskell type systems.