14 ms·
I've spent most of my time in the open source world, and I would have to agree that C# on .NET feels like the most mature high-level software development tool I
by sreque 15y ago
I've spent most of my time in the open source world, and I would have to agree that C# on .NET feels like the most mature high-level software development tool I've ever used. C#'s biggest strength isn't the language. While the language is nice, there isn't a lot you can do with it in terms of productive development that you can't at least approximate in Java, especially with a good IDE to generate your boiler plate for you.
Where C# and .NET really shines is in its native integration and low level facilities. How many other tools in the world let you debug a mixed application containing both native and managed code, all in the same IDE and in the same session, with the ability to set breakpoints in either area, view values, do memory watch points, and so on?
It also feels so incredibly easy to call native code in C#. There's even a whole web site dedicated to making it easier, pinvoke.net!
Lastly, C# itself contains several performance-sensitive features that have no JVM equivalent, including value types, unsigned integrals, and unsafe code with raw pointers. The .NET platform even has an implementation of tail recursion , now, though the C# compile will not generate IL that uses it, which makes it inaccessible for most people.
When it comes to language design, C# is a little sloppy but it more than gets the job done. In terms of tools and low-level facilities for building a real-world application, C# on the Windows .NET platform feels absolutely world-class.
For my favorite language, I of course, voted for Scala!
- veyron 15y agoHow is this C#+.NET integration on mono? Are the relevant low-level facilities translated well into linux or osx?
- sreque 15y agoI like Mono, and I respect the work that they've accomplished. It is incredibly difficult to build a runtime like .NET, especially as it was never designed to be cross-platform. That said, the Mono experience on Linux is inferior to that on Windows. MonoDevelop is nowhere near Visual Studio, so that I just develop on Windows and deploy on Linux. Unfortunately, that doesn't help the fact that both the soft and hard debuggers for Linux are nowhere near Microsoft's debuggers. It also doesn't help the fact that the runtime itself is less stable (i.e., more prone to crash) and there are APIs that only work well on Windows. I would also imagine that the Microsoft runtime exhibits much better overall performance. My understanding is that Mono mainly excels at MonoTouch, and that is where Xamarin is making most of its money, but I am not knowledgeable in that area.
- andyjohnson0 15y agoIt is incredibly difficult to build a runtime like .NET, especially as it was never designed to be cross-platform. Just a historical note: The Shared Source Common Language Infrastructure [1] aka "Rotor" is an alternative version of the .net 2.0 platform developed by Microsoft for research/education use. It can be compiled for FreeBSD and Mac OS X 10. Its rather out of date, but maybe shows that MS did make some kind of effort to make it cross-platform. [1] http://en.wikipedia.org/wiki/Shared_Source_Common_Language_Infrastructure http://en.wikipedia.org/wiki/Shared_Source_Common_Language_I...
- chollida1 15y agoI remember working on Rotor when I was at Corel. I'm glad to see someone still uses it:)
- jamesaguilar 15y agoThe FFI is still far better than most of the other FFIs for other Linux-targeting languages. Yeah, and MonoDevelop is not equal to Visual Studio, but it's a damn sight better than almost any other OSS IDE.
- kaolinite 15y agoHow does it compare to QtCreator, do you know?
- deleted 15y ago[deleted]
- neovive 15y agoUnity3d ships with Mono/C# and MonoDevelop as one of the programming language options for its game engine. I haven't used it as much, since I prefer the Javascript version, but most (if not all) high-end game developers opt for scripting in C#.
- FrojoS 15y agoI'd be curious to hear, why. I will be working on a Unity3D project and the team wants me to use C# with VS. As a Mac user and Open Source fan, I didn't jump at the idea. Glad to hear, that a lot of people think C# is a good choice. I'm excited to learn it! Any suggestions for a good book or website? I've been programming in C and C++ quite a bit, but its been a few years. I've only been doing functional programming since then and would probably need a refresher on object oriented programming. Can someone comment on the best development environment for Unity/C# when using a 2011 Mac Air with 4GB Ram? Should I install bootcamp, use Parallels Desktop or Unity+Mono under Mac OS?
- yoklov 15y agoI know nothing about developing Unity/C#, however, I know VS runs quite well under VMWare Fusion on a MacBook Air (with 4GB of ram).
- v21 15y agoThe thing to realize is that the Javascript isn't Javascript. It just looks like it. Writing good Unityscript/Javascript is going to be only syntactically different from writing C# anyway. Unityscript/Javascript is well made, but there's a few edge cases that you'll only encounter once you've already written most of the project. And mixing the two languages is messy and limited. For C# dev, it depends how hardcore you're going to be getting. Ultimately, you normally going to be scripting, not programming. getting familiar with the Unity3D API is of more use than learning high level features of C#. For instance, while C# is object oriented, >90% of the things you write will inherit from MonoBehaviour, and most of the rest are just fancy structs. And I code on an iMac -- I use Unity natively, and the version of MonoDevelop it ships with. It works nicely!
- lordlicorice 15y ago> While the language is nice, there isn't a lot you can do with it in terms of productive development that you can't at least approximate in Java There is no substitute for lambdas :)
- wolfgke 15y agoLuckily C# supports them: http://msdn.microsoft.com/en-us/library/bb397687.aspx http://msdn.microsoft.com/en-us/library/bb397687.aspx
- aaronblohowiak 15y agoyour parent is suggesting that java does not have a substitute for lambdas.
- spacemanaki 15y agoWhich isn't true anyway, since anonymous inner classes are just very verbose and awkward lambdas. (I'm a Java hater but I'm also a horrible pedant)
- djacobs 15y agoTrue. Then again, what's the practical point of lambdas that aren't concisely expressed?
- spacemanaki 15y agoThere are plenty of practical uses: http://code.google.com/p/guava-libraries/wiki/FunctionalExplained http://code.google.com/p/guava-libraries/wiki/FunctionalExpl... Note that the Guava lib specifically points out how ugly this is. I prefer Clojure.
- baddox 15y agoWhat's the decision procedure for whether a certain expression is "concise?"
- katane 15y agoC# (or, .NET) really has tremendous capabilities for low level stuff. There is one thing missing, though: support for varargs on cdecl functions. Of course, you can always just use C++/CLI to wrap a native library into a nice .NET managed interface, and not deal with the pinvoke stuff at all.
- noblethrasher 15y ago> The .NET platform even has an implementation of tail recursion , now, though the C# compile will not generate IL that uses it, which makes it inaccessible for most people. Sort of. It just so happens that the tail call optimization does get used on x64 platforms because of an implementation detail of the 64-bit JIT. Source: http://blogs.msdn.com/b/davbr/archive/2007/06/20/tail-call-jit-conditions.aspx http://blogs.msdn.com/b/davbr/archive/2007/06/20/tail-call-j...
- insidius 15y agoOne thing missing in terms of low level facilities is calling varargs cdecl functions. What has not been mentioned is that you can use C++/CLI to write .NET wrappers of native libraries. This is often even faster because you can use the libraries headers.
- Iv 15y ago> It also feels so incredibly easy to call native code in C#. There's even a whole web site dedicated to making it easier, pinvoke.net! I'm with you that C# is really nice to use, but interfacing with native code is a nightmare. The reason why a whole bunch of websites exist on pinvoke is because of its poor documentation and incoherent behavior. As far as low level goes, I'm happy with C++ (if I were an embedded engineer I would say C but it is very nice to be allowed to use the C++ niceties). I think that everyone needs to have a language that can generate native code. On higher levels, python is fine for me. I simply do not have the use for an intermediate language like C# or Java, however nice they are.