views:

494

answers:

11

Are there any good, portable, open-source, high-level, statically-typed, imperative, object-oriented, garbage collected, safe languages/runtimes with reasonable performance besides Mono and Java? Mono is nice, but it is a Microsoft technology, and I'm kind of afraid of using it (I'm not sure how rational this fear is). The problem with Java is that it is just too simple (no unsigned data types, no structs, etc.).

+8  A: 

Mono isn't a Microsoft technology. .NET is, but Mono isn't - Mono is an open-source implementation of the ECMA-334 and ECMA-335 international standards. Yes, they originated from Microsoft, but Mono itself is not Microsoft technology.

Not that Mono is a language, of course - C# is the language. But then languages aren't really open-source or not - implementations are.

It does sound like you've probably got an irrational fear of C# - and likewise of Java. There are certainly things I'd like to see in Java (and I significantly prefer C#), but it's still perfectly possible to write very significant applications in it.

Jon Skeet
The problem with Mono is that a number of people don't trust Microsoft (based on past behviour) to not do something that screws Mono.
TofuBeer
You should not expect that mono will be a copy of the .net framework, because a lot will be missing. Same as don't expect Wine will emulate Windows for 100%.
Roalt
Indeed. And there are things in Mono which aren't in .NET, too.
Jon Skeet
Downvoters: please comment when downvoting, otherwise it's pretty pointless.
Jon Skeet
Any Microsoft patents covering the ECMA standards are covered by a RAND agreement (Reasonable and Non Discriminatory Licensing). Unfortunately the word "reasonable" is quite open to interpretation; the present situation with Mono continues at Microsoft's discretion. However, given their past...
Daniel Earwicker
... problems with monopoly law, MS are *very* unlikely to make a move against Mono; it makes MS look good for Mono to continue to exist and flourish, and (given the superiority of C# over Java) it is certainly beneficial to the open source community to build on it. So it's a pretty harmless win-win.
Daniel Earwicker
Very significant applications out in the wild being? Please don't say Paint.NET...
rama-jka toti
@Reoa: Very significant applications written in *Java*. GMail springs to mind.
Jon Skeet
@Jon +1 since I agree with the annoyance of down voting without giving reasons!
TofuBeer
A: 

There's always Python and Ruby

Sean
They fail on the "statically-typed" criterion.
Jon Skeet
The also fail on the "reasonable performance" for many problems.
Pete Kirkham
C# and Java can also fail on "reasonable performance" for many problems. What performance is reasonable depends entirely on context. Nonetheless, still fail on typing, so -1.
Devin Jeanpierre
+2  A: 

Eiffel fulfills all your requirements

Maurice Perry
+2  A: 

On the CLR, there is Boo.

Boo is a new object oriented statically typed programming language for the Common Language Infrastructure with a python inspired syntax and a special focus on language and compiler extensibility

The Boo Manifesto is a good starting point.

Romain Verdier
+1  A: 
siddhadev
Because it reads like a soup no one wants to maintain?
rama-jka toti
Lisp's power comes from the lack of predefined syntax and structure, but the same things that give it its power, are also the things that make it hard to read and hard to learn.
Grumbel
+2  A: 

C++ with a garbage collector? Though you issues with Java are not all that much of a show stopper (unless you can detail why you need those things, on the face of it those arguments are usually not very sound, but sometimes they are).

TofuBeer
A: 

First of all, Mono is not Microsoft technology. At second, there are only two serious Virtual Machines (VM) with mentioned features - .Net/Mono and Java. But, setting aside requirement of statically-typed language, you can draw an attention at newcoming Parrot Virtual Machine (Wikipedia article about Parrot).

And, of course, Ruby, Python Erlang, etc. are also crossplatform VM (for single dynamic language)

macropas
+1  A: 

How can you say that java is too simple?

Ok, one of the reasons for developing Java is to make it less complicated than C++ which has a 900+ page of specification. However, it's much more complicated than C.

About 10 years ago I attended a course by Les Hatton and he did research on making your C program safer to use. He argued that almost no-one could remember the 140 pages of C standard, so it would be exceptionally hard to understand something like C++.

Of course, your target may not require safety, but if you do it's something to remember.

Roalt
A: 

You may take a look on the D programming language.

But to be honest? I'd suggest to stay away of mono/C#. Why? Many reasons...

Also, for practical puroses take Java or C++.

Java is as good as C# even it is little bit different. C++ is as good as well because 99% of problems of GC are solved using reference counting so...

Artyom
-1 for not stating any of the reasons to stay away from mono/C#
Igor Brejc
I just didn't want to enter debates on FOSS, vendor lock in and many others. Probably the most important is the fact that mono will allways be behind .Net, in features performance and many others. For exmple: http://art-blog.no-ip.info/cppcms/blog/post/27So, FOSS just should not get in there
Artyom
+1  A: 

I'd like to point out Vala, which is a language based on the syntax of C#, but which targets a C compiler (similar to Eiffel) and a lightweight, self-hosted runtime. It lacks garbace collection, though.

Cecil Has a Name
From what I can see, it's like VB6 - it uses reference counting. This actually performs worse than GC in many applications. Ah well, let people learn the hard way! :)
Daniel Earwicker
Thanks for showing me that. Although there is no GC, it looks like the perfect tool for GTK development. No ugly GObject C code!
Zifre
The reference counting compares better to Objective-C than Visual Basic 6, which was slow for other reasons.
Cecil Has a Name
A: 

If you want to learn this in order to be able to be more suited for a job, I suggest you consider either .NET (if you want to go for a Microsoft platform) or Java (if you want to go for platform independence), and do a lot of coding. Both are very large platforms!

Anything else would be niche languages being used in only a few places, which can be very nice but is unlikely to land you a job anywhere but in those few places.

Thorbjørn Ravn Andersen
I'm not really worried about getting a job right now, I'm just looking for a good language to use in my spare time.
Zifre