9 ms·
This is going to be horribly negative so a bit of context first: I'm a professional C# programmer. I love C#, I think it's a great language. But there's a hug
by moomin 13y ago
This is going to be horribly negative so a bit of context first: I'm a professional C# programmer. I love C#, I think it's a great language.
But there's a huge downside: C# only works on Windows. This vastly reduces the number of things you can do with it (yeah, I know about Mono). There's nothing here that suggests that this would have anything other than the same restrictions. So, assuming the language develops into everything that's promised, you're left with something on which you can't do mobile, can't do big data, probably won't work very well for scientific computing. In fact, basically you're still stuck with the same LoB apps and ETL tools that C#'s already great at. And probably the same second rate (not awful, not great) web experience.
So the best you can hope for, basically, is a better C#. But not good enough to take on Java.
Don't get me wrong, it sounds exciting, but equally I worry that it'll be used as a way to generate patents to prevent the ideas being used elsewhere in environments where, tbh, they'd find more use.
- romanovcode 13y agoC# developer here, also love the language. I completely agree and I only hope that this new thing will be just as good as C# but fully cross-platform. It would be great. >mobile Xamarin is pretty solid, although it costs a lot.
- tluyben2 13y agoXamarin has been nice so far; it's not that expensive compared to any serious project, but it should be cheaper to capture larger audiences. The free version is very crippled even for trivial projects.
- venomsnake 13y agoProject Rotor will be left in the history books as the "Java killer that was never unleashed". I remember using C# back in 2005 and just thinking how far ahead of everything it was. But it was never allowed to leave the shackles of MS.
- thirdsight 13y agoThey did release it, source code and all. Unfortunately with a shit license. I had it building on FreeBSD back then! They did the right thing for them but not the community. Isolation and ecosystem ate tightly controlled at Microsoft and always have been. It's how devdiv remain scarily profitable.
- hhariri 13y agoYou looked at Kotlin? As a C# developer I'm loving the language and it is x-platform. And that's despite my assumed bias, because I work at JetBrains.
- talloaktrees 13y agoI've been really impressed by Kotlin after trying it out for a week. I didn't have huge problems with Java (I accept it for what it is) but it really is nice to user a more modern Language. (note: I've never tried Scala)
- _random_ 13y agoDid you re-implement ReSharper or any of your _major_ products in Kotlin?
- bartwe 13y agoI want to like it but the lack of value type structs and other GC avoidance features will keep its performance at java levels.
- dodyg 13y agoAnd for wide variety of server side applications, Java level performance is awesome
- trimbo 13y agoKotlin seems nice but when's Kotlin going to be "for real"? What I mean by that is, when will it go 1.0? When will we see a major project from Jetbrains implemented in it? Kotlin has been around for a couple of years now and Jetbrains still won't answer these questions as far as I can see[1]. [1] - http://devnet.jetbrains.com/message/5490337?tstart=0 http://devnet.jetbrains.com/message/5490337?tstart=0
- dodyg 13y agoYou can start with the latest build. It is that good. There is no need to wait for the 1.0 version.
- rplnt 13y ago> yeah, I know about Mono What's wrong with Mono? I worked with C# only briefly and I really liked it (as opposed to Java.. but maybe I just had better tools). If I'd need something a bit faster than python, C# would probably be my choice. That's assuming it's portable to other platforms...
- OGC 13y agoWork with Mono and report back..
- taude 13y agoI've tried working with Mono on my Mac. Meh. You loose a big part of the eco-system of third-party libraries because almost every program I've written uses a ton of third-party libraries. When ever you google soething on C#, you'll likely be getting windows specific results. Once you go down the pain of getting Mono to run on Linux...you may as well have just written your program in Java (or something else). While I loved working with C#, once we moved down the path of moving off Windows platform, it's just easier to learn a new language and change your tooling.
- octotoad 13y ago"the pain of getting Mono to run on Linux" What's painful about 'apt-get install mono-runtime mono-mcs'? (or your distro's equivalent) Its main target platform is/was Linux.
- Zverik 13y agoYou forgot mono-winforms. And most users do forget it and then complain to a developer that the software does not work.
- taude 13y agoGetting my app to run was the hard part, not the Mono libraries itself. Even on OS X, it was pretty straightforward to get the libraries on there. But once you started needed ASP.NET MVC, specific database drivers and setup, it become non trivial quickly, especially since stuff isn't as well documented as most other mainstream open source techs... Edit: Also, to try and help our transition to running on Linux easier, we even integrated ServiceStack for a lot of the database drivers into the app. (Note: ServiceStack is one seriously great library if you are working in .NET-land) Edit: Adding, that if I'm going to go through all this trouble to have a sub-set, and not-up-to-date version of the .NET framework and it's ecosystem to run as open source, I'd rather just use Java, and it's full ecosystem and be done with it. Also, using MonoDevelop on my Mac was very uninspiring.
- platz 13y agoFrom Joe Duffy's Blog [1]: "Finally, you might wonder, “Why not base it on C++?” As we’ve progressed, I do have to admit that I often wonder whether we should have started with C++, and worked backwards to carve out a “safe subset” of the language." ... "I do expect to take our learnings and explore this avenue at some point, largely for two reasons: (1) it will ease portability for a larger number of developers (there’s a lot more C++ on Earth than C#), and (2) I dream of standardizing the ideas, so that the OSS community also does not need to make the difficult “safe/productive vs. performant” decision." "But for the initial project goals, I am happy to have begun with C#, not the least reason for which is the rich .NET frameworks that we could use as a blueprint (noting that they needed to change pretty heavily to satisfy our goals)." [1]: http://webcache.googleusercontent.com/search?q=cache%3Ajoeduffyblog.com%2F2013%2F12%2F27%2Fcsharp-for-systems-programming%2F&oq=cache%3Ajoeduffyblog.com%2F2013%2F12%2F27%2Fcsharp-for-systems-programming%2F http://webcache.googleusercontent.com/search?q=cache%3Ajoedu...
- sillysaurus2 13y agoC# only works on Windows. This vastly reduces the number of things you can do with it (yeah, I know about Mono). Speaking of Mono, does anyone know of a good resource for C#/.NET devs to learn how to port their Windows apps to Linux/Mac relatively easily? I did a writeup a month ago about my first impressions of Mono: https://news.ycombinator.com/item?id=6744622 https://news.ycombinator.com/item?id=6744622 In short, there don't seem to be very many "Here's how to write cross-platform C# code that runs on all three platforms without much effort" type resources. It seems like most Mono newcomers will find it difficult to get up and running, especially if you've been developing your app with Visual Studio 2010 or later. So it seems like there aren't very many good tutorials written specifically to teach Windows C# devs how to quickly get up to speed with Mono. After spending some time researching the idea of writing GUI apps using C# and Mono, I gave up because it just didn't seem straightforward. Maybe I was going about it the wrong way, but it seemed like Python + Qt bindings would be a more effective approach, even though you lose out Visual Studio's awesome GUI designer. But I haven't actually tried python+qt yet on all three platforms, so maybe it isn't as easy as it seems. And my Qt knowledge is somewhat dated, so maybe there's a better solution nowadays. Does anyone have any recommendations for the easiest way to write cross-platform GUI apps that can run without an internet connection? I was thinking maybe making it a webapp, but the offline requirement seems to rule that out. (Has localstorage progressed to the point where people can start up a browser "app" without an internet connection? I haven't looked into it for awhile.) Plus I'm not sure how easy it is to write custom webapp GUI objects compared to the fantastic ease of writing custom .NET GUI objects via the VS GUI designer. Although anything that lets you quickly and easily write powerful GUI apps that run on all three platforms would be pretty fantastic. What toolset would you use to get the job done? EDIT: Hmm, just thought of another idea... Would Clojure work well for writing native GUI apps? It's based on the JVM, so it seems like it could leverage existing GUI libraries. (All the Java GUI libs used to suck, but maybe the situation's improved now that Clojure is popular.)
- bluefinity 13y agoIf you want to use C#, the easiest way is probably using GtkSharp. I don't know if there's a way to use the VS GUI designer, but MonoDevelop has a built in GUI designer that works with GtkSharp -- and MonoDevelop runs on Windows too. Might be worth trying out. You can still run your application on Microsoft's .NET stack on Windows, GtkSharp supports it just fine, and because it uses GTK it will look native on all of the supported platforms. Disclaimer: I haven't actually tried any of the above.
- ksk 13y ago>So the best you can hope for, basically, is a better C#. But not good enough to take on Java. From the linked material - What are you basing this statement on?
- Kiro 13y ago> (yeah, I know about Mono) Mono solves everything you complain about and that's the only mention it gets?
- _random_ 13y agoIt's like saying "Java only works on old Nokia phones (yeah I know about all other ports of JVM)".
- sophacles 13y agoNot really. We've tried running several C# programs on mono, and as of a few months ago, the effort to port them so they will work on mono was pretty intense, and the performance was lacking. C# (especially when developed in VS) is a nice language and environment, but cross-platform is not one of it's strengths.
- _random_ 13y agoI am sure I would have similar issues with Java on *nix because of my lack of experience with both. Cross-platform is definitely a major C# strength at least in the mobile space given the power of Xamarin tool chain. Android and iOS do matter and they are not Windows.
- nkohari 13y agoI don't know about desktop or mobile, but my experience with Mono for web applications has been pretty awful in comparison to Microsoft's implementation. I have a tremendous amount of respect for the Mono team, but it's just not a good enough replacement. It's actually caused me to stop writing C#, because I can't stand managing Windows systems, but there isn't really a good alternative.
- catnaroek 13y ago> But there's a huge downside: C# only works on Windows. Not true. And, even if it were, how is that in any way a downside from Microsoft's point of view? As a Linux user myself, the main reason why I switched from Windows is that all the exciting advances in programming languages are happening in * nix-land, mainly Haskell and Rust. If there were some super-duper-awesome language for which Windows were the first-class platform, I would seriously consider switching back. I do not give a single damn about software freedom, technical excellence trumps all else. > So, assuming the language develops into everything that's promised, you're left with something on which you can't do mobile, can't do big data, probably won't work very well for scientific computing. Or Microsoft could be aspiring to make Windows a viable platform for all of those applications. Just because today Windows sucks for them, it does not mean it has to suck forever. > So the best you can hope for, basically, is a better C#. But not good enough to take on Java. Java's sole achievement is being consistently (as in "in the same way") crappy on all platforms. I would much rather be locked into a single platform for which there is an awesome language.
- mcdougle 13y agoI dunno. I agree with you that "only works in Windows" is not a downside for MS, but.... I'd argue that the best way for them to make Windows a good programming platform would be to make it better and easier to program in the other languages already there -- C++, Java, PHP, Rails all work on Windows, just... not as easily as on *nix. Although I guess a new, good language wouldn't hurt.
- edwinnathaniel 13y agoSome of the .net libraries only run on Windows CLR. Example: DotNetOauth. Many other people pointed out other libs as well. Kick-ass language with poor ecosystem is the common symptoms of academic language: for fun but lack of productivity and not battle tested.
- raptormissle 13y ago>I would much rather be locked into a single platform for which there is an awesome language. So you would rather be locked into a single crappy platform with a crappy language that only works on that single crappy platform?
- mpg33 13y agoI don't see why Microsoft would create something that would work on other systems....they want people to use Windows.
- acqq 13y agoAnd they even let their the conflicts of interests influence the development of their programming languages. C# is the best example. There are more reasons why C# has poorer performance and less libraries outside of Windows but most can be tracked to the interest in Microsoft to have something tightly enough controlled and bound to Windows.
- yareally 13y agoOf course they want people to use their OS (just like Apple wants people to use theirs), but that does not mean they always lock the language into the OS. They created TypeScript, licensed it under Apache 2.0 and made the installer for it an npm package in Node[1]. [1] npm install -g typescript and it's installed and ready to go wherever you are using Node.js
- ezico 13y agoI miss the HN of old where there were hardcore technical discussions about the merits and demerits of the technical approaches in such posts. Here we have almost none of those and instead there is lot of horse beating about aspects that are not even announced yet, taking sides in big tech politics etc which dominated and then killed Slashdot. I guess I must be getting too old for HN and the marked shift in the audience.
- sjs1234 13y agoIt is a systems language. The competitors are c, c++, go, and D. Within Microsoft it's just c and c++. Competition with Java is irrelevant, c# already occupies that space. Microsoft has enough need and scale that a systems language that picks up internal use is justified. The use case is making platforms, not crossing them.
- catnaroek 13y agoGo, a systems language? I would not be so sure. Stop-the-world garbage collection and dynamically typed interfaces seem like a poor fit for this niche.
- sjs1234 13y agoAck ... I'm largely ignorant of the details of go other than its original positioning. Do the semantics of go constrain gc implementation in such a way that it precludes low latency? Or is it just not a focus of the implementors?
- catnaroek 13y agoAlthough Go has channels for civilized communication between goroutines, the language does not have a native notion of what data is owned by which goroutine, which pretty much forces garbage collection to stop the whole world. This, together with pervasive mutability, means that communication using channels is merely a convention that can easily be circumvented.
- Sssnake 13y ago>I'm largely ignorant of the details of go other than its original positioning It is a faster python with a very primitive type system tacked on. I don't know how they ended up there from their original idea of a systems language, but they did.
- catnaroek 13y ago> It is a faster python with a very primitive type system tacked on. And concurrency primitives in the core language. (In a properly designed language, these could have been made part of the standard library, though.) And worse error-handling facilities than the original Python.
- grandeb 13y agoI miss the HN of old where there were hardcore technical discussions about the merits and demerits of the technical approaches in such posts. Here we have almost none of those and instead there is lot of horse beating about aspects that are not even announced yet, taking sides in big tech politics etc, especially in upvoted comments, a trend which I previously noticed slowly dominated and then killed Slashdot. I guess I must be getting too old for HN and the marked shift in the audience.
- sergiotapia 13y agoFor what it's worth if I'm getting voted up in my comments, I take it as a sign that HN is declining.
- asveikau 13y agoI haven't been on here long enough to remember an HN of old, but I totally agree that on a lot of topics the depth is lacking here. Witness that TFA is all about how GC makes C# kind of suck, and that is the big thing they are trying to fix. Any commenters showing signs of grokking this? Nope, they are mostly talking about C# being awesome. I think a lot of folks here have a hard time thinking about a world without GC or that GC might ever be a bad thing.
- moomin 13y agoFor the record, top rated comment here, and I do a fair bit of C++ as well as C# and am fully aware of how awesome have proper control over allocations would be. My frustration is that once they've finished, I don't believe it would be any more use than C# in practice. (There's a nice language struggling to get out of C++14.) However, Rust exists and is unlikely to be as encumbered as what Microsoft produces.
- asveikau 13y agoPerhaps you are right that I am painting HN with too broad a brush. I do see some good points made scatteringly in this discussion, such as yours. On Rust, and also this project (I believe the following point is mentioned elsewhere in this thread as well): There's one thing I don't get about the whole thing. People who want a low-level language with lots of control have C and C++. People who want a high-level language with GC etc. have lots of options today as well. So, why Rust, and why this MS project? C and C++ have faults but the people who care about them are well aware; if nothing else they are a known quantity. People who don't care about any of this will just pick the higher-level stuff. I guess I'll have to try one of these languages out to form a better opinion.
- Locke1689 13y agoAh, but you forgot to note that this language is being developed in the context of a research operating system, so there's no guarantee it even runs on Windows ;)
- computerslol 13y agoIt looks like you have a very narrow perspective on C#. I've never tried running .net on a non-windows platform, so I can't comment in that space. I'll leave that to someone else. As someone who's built bespoke big data applications, scientific computing (if we're both talking about large scale computation for analytics), desktop applications, server applications/services, and web sites (one of which is within the US top 150 on alexa) in c#; I'll have to disagree that anyone working in the language is stuck with LoB applications and ETL tools.
- moomin 13y agoI think you're missing my point, it's about sweet spots. C# has a sweet spot on windows desktop and ETL style data processing. You could have written all of those things in C++, Java or Python. But the ecosystem isn't there. There's no Hadoop, SciPy, Django or Rails. For crying out loud, just running a less compiler on Windows required someone to sit down and rewrite it from scratch. (The node story has improved on windows since then.) And none of this looks likely to change. Windows has been a second rate development platform for some time now, and Microsoft don't mind.
- pjmlp 13y ago>And none of this looks likely to change. Windows has been a second rate development platform for some time now, and Microsoft don't mind. Says who? Those of us that use GUI environments not stuck in 70's terminals workflow think otherwise.
- edwinnathaniel 13y agoIt's getting better a bit since 2-3 years ago but before that Microsoft was always stuck in the 90's style of development while other platforms have moved forward significantly. Nuget is a late attempt to follow Maven and yet still behind. EntityFramework came in late and I heard ppl moaned. No Docker... Chocolatey came in late. So yeah... Says the parent thread and me.
- 13y ago
- lukasm 13y agoI think MS has finally realised that they no longer have monopol. Have a look at F# totally open source and work well on Linux. TypeScript is distributed with npm.
- JTenerife 13y ago> C# only works on Windows That's not true. > yeah, I know about Mono And you know it :-). I agree if you want to express that C# on Linux is a niche. But there're big projects using it in production. Have a look at the Mono project page. Also, have a look at Xamarin. > can't do mobile, can't do big data, probably won't work very well for scientific computing There's no language that does all these things well. Java is for Android and big data suited, but not for scientific computing. Fortran, C and C++ are great at scientific computing, but certainly not for mobile (except Qt on niche plattforms). Objective C is not appropriate for big data and scientific computing. Rust and Go aren't the can-do-it-all languages / ecosystems either. C# and the .NET ecosystem are actually second to Java in terms of reach and versality. Taking Xamarin into account C# has the top spot for mobile. > equally I worry that it'll be used as a way to generate patents to prevent the ideas being used elsewhere FUD