I really wish Mono would gain more traction. C# (3.0 onwards) is one of the nicest programming languages I have worked with (despite its warts). I also heard a lot of good things about F#.
F# is a phenomenal language. Not that C# is bad (it's fantastic!), but the more I use F# the more I feel it's a superior language for most tasks. First-class .NET support is the real kicker, since you can do anything from DB interaction to writing MVC controllers. Integration with existing C# projects is seamless too, so it's really just a joy to work with.
Mono is perceived as a second-class citizen in the Unix-like space. Java, its main competitor, integrates very seamlessly and has excellent runtime tooling support Mono doesn't rival. Mono may gain some traction in some niches, but the Unix-like ecosystem is exceedingly diverse, without any dominant tool. Mono could double its presence and still be barely detectable. It could displace some of Java, but that would not affect the majority of the space.
It's impossible (and foolish) to avoid C# if you develop for Windows, but I haven't written a single line of C# since 2004.
FYI, the current Mono website is pretty outdated right now and will soon be replaced by a new one built on Jekyll: check http://mono.github.io/website/ for a preview.
I got pretty far into building an MVC project that I have been working on for a long while in Windows.
I had to manually run the NuGet package restore command, as I couldn't see a way to enable package restore for the project. I set EnableNuGetPackageRestore=true preceding the command and it installed all the packages successfully.
I have run into a roadblock with a MSBuild TypeScript target however. The error message wasn't very telling but I'm assuming it's because it can't find the TypeScript compiler.
Mono performs "fine". That is, I've never really isolated Mono as the cause of performance issues. I'm running it in telecom applications, handling billions of transactions a week. Years ago I compared things, and the CLR was usually better. But generally speaking, the approach in algorithms/approaches is going to dominate the runtime.
The exception is when you're dealing with a very high transaction rate (say, doing 100K msg/sec, non-trivial processing per message, in a single process). Then the GC overhead is something to be aware of, and you'll go to extreme lengths just to remove a handful of allocations for each message. At that point, manual memory management (either via hacking up the runtime with unsafe code, allocating large arrays of structs, or using unmanaged code) is the right path. But from light reading, it seems the same is true in Java or other GC languages, so no difference for Mono there.
So the alternative is C, usually, which has its own set of tradeoffs. Rust looks far more promising, but in general, Mono's performance is just good enough that I'm more likely to keep my nice F# code and add a few boxes. Unless you're in a high-performance arena, and you'd know if you are, this likely holds true for your business.
Edit: Also, I'll note we're using Mono 2.10. So updating to 3 should get us the new GC which may make a difference, as well as allow LLVM code, which should help significantly for server apps.
Any time I wanted to use mono it didn't work. It wasn't many times though. A couple of times to try a FPS game and also for some sites based on Silverlight. I'm wondering if it is usable now or what's the common use case for it for which it works fine.
If you want to run Windows .NET applications, in particular GUI applications you may have problems.
But I have been using Mono for developing new software (libraries) for a decade and it works nicely. I often don't need a GUI and if I do, I just do that part on Windows later.
If you play mobile games and have seen a Unity3d splash screen, then you have already used Mono. Silverlight is not Mono. Also Silverlight plugin is being displaced by the HTML5 plugin (shipping with the browser).
we successfully host http://backrecord.com with it and this is now a very substantial project. I find there are often issues to work through when deploying the website (hanging out for ASP.NET vNext), but nothing that can't be overcome. We have background processes that do a lot of mathematics. With these, we find we can generally deploy what we've been testing with the Microsoft CLR to mono/linux and it just works.
You just have to wait a while for someone to build a package (and depending on distro, you might also have to wait a release), or just compile it yourself. Or, if you are "adventurous" and a good FOSS citizen, you can compile it yourself, and make a package.
It's sad to see VB.net being treated as a second class citizen on this platform and ironic to see little GAMBAS be a better option for BASIC programming on Linux, given the resources.
Why is this "sad"? VB.NET offers little (anything?) over C#. I've never seen a bit of VB.NET you couldn't transpile into perfectly readable C# outside of really gross and bad implicit type conversions around Booleans.
If Xamarin should care about VB.NET, it should be better at things than C# is.
[+] [-] lucianp|11 years ago|reply
[+] [-] edgyswingset|11 years ago|reply
[+] [-] rbanffy|11 years ago|reply
It's impossible (and foolish) to avoid C# if you develop for Windows, but I haven't written a single line of C# since 2004.
[+] [-] muhmi|11 years ago|reply
[+] [-] akoeplinger|11 years ago|reply
[+] [-] Ad_Nauseam|11 years ago|reply
[+] [-] Sir_Cmpwn|11 years ago|reply
[+] [-] romanovcode|11 years ago|reply
[+] [-] akoeplinger|11 years ago|reply
Anything complex may still hit some issues, though this might not matter much in the future as ASP.NET vNext will fully support Mono.
[+] [-] Locke1689|11 years ago|reply
Wow. Really impressive -- our MSBuild hackery is gut-wrenching.
[+] [-] deevus|11 years ago|reply
I got pretty far into building an MVC project that I have been working on for a long while in Windows.
I had to manually run the NuGet package restore command, as I couldn't see a way to enable package restore for the project. I set EnableNuGetPackageRestore=true preceding the command and it installed all the packages successfully.
I have run into a roadblock with a MSBuild TypeScript target however. The error message wasn't very telling but I'm assuming it's because it can't find the TypeScript compiler.
[+] [-] DAddYE|11 years ago|reply
[+] [-] MichaelGG|11 years ago|reply
The exception is when you're dealing with a very high transaction rate (say, doing 100K msg/sec, non-trivial processing per message, in a single process). Then the GC overhead is something to be aware of, and you'll go to extreme lengths just to remove a handful of allocations for each message. At that point, manual memory management (either via hacking up the runtime with unsafe code, allocating large arrays of structs, or using unmanaged code) is the right path. But from light reading, it seems the same is true in Java or other GC languages, so no difference for Mono there.
So the alternative is C, usually, which has its own set of tradeoffs. Rust looks far more promising, but in general, Mono's performance is just good enough that I'm more likely to keep my nice F# code and add a few boxes. Unless you're in a high-performance arena, and you'd know if you are, this likely holds true for your business.
Edit: Also, I'll note we're using Mono 2.10. So updating to 3 should get us the new GC which may make a difference, as well as allow LLVM code, which should help significantly for server apps.
[+] [-] romanovcode|11 years ago|reply
[+] [-] muhmi|11 years ago|reply
[+] [-] lmedinas|11 years ago|reply
To put their language into Mobile, OSX and Linux.
[+] [-] ldw|11 years ago|reply
[+] [-] logicchains|11 years ago|reply
[+] [-] jkbyc|11 years ago|reply
[+] [-] throwaway12321d|11 years ago|reply
[+] [-] _random_|11 years ago|reply
[+] [-] math|11 years ago|reply
[+] [-] tuio899|11 years ago|reply
Is Ubuntu supported? Where do Linux users other than OpenSUSE users get packages? Do they build it themselves?
[+] [-] akoeplinger|11 years ago|reply
One of the early outcomes of this are CI packages built for each commit: http://www.mono-project.com/DistroPackages/Jenkins
[+] [-] tracker1|11 years ago|reply
https://launchpad.net/~inizan-yannick/+archive/ubuntu/mono
[+] [-] kazagistar|11 years ago|reply
[+] [-] martinald|11 years ago|reply
It's not too hard to build, but it does take an age on a non-ssd machine.
[+] [-] fsiefken|11 years ago|reply
[+] [-] blutgens|11 years ago|reply
"Yawn... what is out? Oh yeah, I think I heard of that..."
[+] [-] dragonbonheur|11 years ago|reply
[+] [-] eropple|11 years ago|reply
If Xamarin should care about VB.NET, it should be better at things than C# is.
[+] [-] romanovcode|11 years ago|reply
http://purebasic.com/
[+] [-] jiggy2011|11 years ago|reply