Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
A glimpse into a new programming language under development at Microsoft (lambda-the-ultimate.org)
235 points by Garbage on Dec 28, 2013 | hide | past | favorite | 224 comments


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.


From 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%3Ajoedu...


> 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.


Some 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.


I 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.


>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?


> So you would rather be locked into a single crappy platform with a crappy language that only works on that single crappy platform?

Please explain how you arrived at that conclusion.


C# 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

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.)


I've ported an app from Winforms to Gtk-Sharp.

At first, I ran with the Mono reimplementation of Winforms on Linux. That didn't work very well. There are a lot of little incompatibilities, like differences in how keystrokes are translated, and very buggy text boxes.

So I reimplemented the UI in Gtk-Sharp. That was mostly a matter of translating existing Gtk documentation to the OO API presented by the C# wrapper. I could write this in Visual Studio and run using Gtk on Windows to test; Mono itself wasn't actually needed here.

I then ran the app using Mono on Windows. Once all the DLLs were in the right places, it mostly just worked. Running it on Linux - specifically, Ubuntu 12.04 LTS - was a little trickier, as Ubuntu has split out many of the different assemblies into separate packages, and you have to grovel around a bit to get what you want, if you don't want everything. But again, it mostly just worked.

Compiling using Mono took a little bit of figuring out - mainly, finding out I had to use dmcs rather than mcs or gmcs to enable the right language features. But again, once the right assemblies were referenced on the command line, it mostly just worked.

Writing a cross-platform app in Mono? I wouldn't really try that. Having a separate UI layer for each platform gets you a much better experience. Gtk programming itself is extremely clunky compared to Winforms, which itself is quite clunky - albeit in different dimensions - compared either with Delphi's VCL or WPF. But it was the only way I could see to go to get a reasonable experience on Linux.


Don't bother. No one is maintaining the cross platform GTK bindings (or .Net MVC framework) and basically no one cares about it. It's just getting more and more out of date.

Look at an actively maintained solution like Xamarin or Unity; Xamarin lets you write your UI specific code for each platform; Unity lets you share UI across platforms but you won't get a 'native' look and feel on any.

For both of these you won't be able to use the majority of existing .Net infrastructure (nlog, nject, nhibernate, etc) because they are locked into the windows CLR, but there are a few ports and you can often get away with compiling the source from codeplex yourself (the prebuilt DLLs just wont work).

(Unfortunately, porting your existing application is absolutely out of the question in most cases, for the reason above. Perhaps if you've carefully isolated concerns it might be possible...)


FWIW, every pre-built assembly I've used on the CLR has "just worked" on Mono, no recompile necessary. But I don't have a lot of third party dependencies, mostly database drivers and a few bits and pieces.


If you want to write cross platform applications use Qt. End of story, it's the only extremely well supported cross platform GUI framework out there. If you are looking for a smaller framework you can try WxWidgets, but I would stay away from GTK. GTK has been getting less and less support since version 2. Version 3 is only Mac and Linux and the Mac version is terrible, there is a "custom" Windows version by some french guy, but it's just that, not community supported.

You could also take a look at Juce, depending on what you need to do with it.

But, if you don't mind large binaries you could easily embed a chromium or awesomium layer as your frontend and do your frontend in html/css/javascript and use JavaScript to communicate with your backend.

As people as said, the best idea would be to write one backend and three or two frontends. That will give you the best experience on all three platforms, and the native GUI look, something that on Mac Qt still suffers with.


I have been building GUI applications with Java and Swing for some time. I am willing to go on-the-record and state that Swing provides a reliable and thorough cross-platform GUI toolkit. Once you put the work in, you really can build an application that looks native-ish and does the same thing on Windows, Linux/GTK and Mac OSX. Unfortunately the learning curve is quite steep, many things are more complicated then they need to be.

I have just started working on GUI apps with Clojure and the story is much better so far! Seesaw[0] definitely slims up the Swing code, and I've been using Core.Async[1] to remove a lot of the callback handlers. So far, so good. :-) It's definitely worth looking into.

[0] https://github.com/daveray/seesaw

[1] https://github.com/clojure/core.async


>I have been building GUI applications with Java and Swing for some time. I am willing to go on-the-record and state that Swing provides a reliable and thorough cross-platform GUI toolkit.

Swing is used by two kinds of people: developers, because the tools that use it are just too good to go elsewhere (IntelliJ etc) and enterprise users that have it forced upon them.

I don't think anybody is using Swing willingly -- or enjoying it. Besides the "uncanny valley" effect to native widgets, it suffered from the start from the main negative of Java's culture: it was overengineered. On top, it underdelivers in many areas.


>I don't think anybody is using Swing willingly -- or enjoying it. Besides the "uncanny valley" effect to native widgets, it suffered from the start from the main negative of Java's culture: it was overengineered. On top, it underdelivers in many areas.

Just out of curiosity, what other gui tool kits have you used that you compare Swing too? I always wonder what gui toolkits those who decry Swing have experience with.

Myself, I've used Win 32 api, MFC, SWT, and gtk. Imo, Swing is by far the best of those; relatively consistent api, a wide variety of widgets, customizable, ... True it can be very complex (ie editor kits) and some things are/were missing for a long time (close buttons in tabbed panes). Also true that it doesn't look 'native' on all platform, but no gui tool kit can. I have not used Qt, but it seems to be equivalent to, or surpass Swing in all those areas.


>Just out of curiosity, what other gui tool kits have you used that you compare Swing too? I always wonder what gui toolkits those who decry Swing have experience with.

I've used Cocoa, GTK on Linux, and Windows Forms (or whatever .NET v1 and v2 had called) in Windows. Have also used Swing.

Quality of results wise, Cocoa beats them all down, but single platform unfortunately. The .NET solution was also nice, but limited to a single platform too. (I know of, but don't care for small-time hacks to make Cocoa/.NET play on other platforms, only for officially supported projects).

Swing had been a pain in the ass to create UIs with, overengineered, with missing functionality (how long did we have to wait for a HTML control?) and ugly too boot.

Swing has one thing going for it: it does work on all platforms. I just wish it was better designed (API wise), more complete, and less uncanny valey-ish.


It may be over-engineered, but it's easily available, at hand, when you need it.

The only cross-platform GUI toolkit that I loved working with and that does a much better job than Swing is Qt. Unfortunately Qt is C++ and it's not even standard C++. So language bindings are hard to build and (compared with Gtk) working with C++/Qt is not so painful. The bindings for Mono are dead. Trolltech released at some point Qt Jambi, the Java bindings, which were awesome, unfortunately the Java community hasn't been interested in it, so Qt Jambi also died after Nokia acquired Trolltech - for the moment at least (the wonderful thing about open-source stuff is that it can be revived with enough interest). The only well maintained language bindings for Qt is PyQt.

And yes, building the UI using the platforms native stuff yields better results, but it's also more expensive to do so. We're all moving in that direction anyway, given the emerging mobile platforms. Sometimes I'm thinking that for desktop apps it's just better to embed a web browser and build the UI with HTML/CSS and JS.


>It may be over-engineered, but it's easily available, at hand, when you need it. The only cross-platform GUI toolkit that I loved working with and that does a much better job than Swing is Qt.

Both statements I agree with!

I think it's a sad state of affairs, that the tens of billion s IT industry, and the whole OSS community, cann't produce, and maintain, a decent, cross platform UI, based on C with hooks for various languages.

GTK has dropped the ball even on Linux (Mac/Windows support is crap, and the library is essentially what it was 10 years ago content wise).

wXWidgets is at the same level more or less.

QT is nice, but is C++, so you either by into the whole thing or you face the not so good support and bindings to other languages (Python has the best support, but even that is mediocre).

Mozilla's XUL was never wrapped and maintained properly (as once promised), to be use to use for cross platform development.

SWT needs Java, and is too tailored to Eclipse's needs.

I, for one, don't need native look in all apps -- I could do with something like the cross platform widget library Adobe built for Lightroom -- that and a webkit view.


Swing is also fully rendered on the GPU.

Seesaw is the only reason why I'm still bothering with Swing too, it actually makes the thing fun to use!


I'm in the market of cross-platform desktop application as well and I've been monitoring Mono/Ximian for a while until last night when I was searching for a .NET Oauth 2.0 library and came across of a project called DotNetOAuth which after further digging does not work on Mono.

I'm a Java developer and I would write the software using Java if only Java isn't stigmatized by "bad software" in the desktop market. It's too bad because so far only Java that provide some of the solutions for me in a few areas to tackle in the cross-platform desktop market, namely: dealing with dependencies, rich 3rd-party libraries (and most of them are FOSS) and a packaging tool for Mac App-Store!.

I wouldn't mind writing 3 different UI code as long as I can share the back-end part and that shareable code works consistently across platform (i.e.: something that communicate with an embedded database like SQLite).

Can anyone share their experience using Mono for cross-platform desktop application that requires DB connection and potentially deal with Service API (i.e.: Twitter, Dropbox, etc)?

My requirements are as follow:

1. Installer/Packager

Something that can help me to generate installer for Windows 7, Mac AppStore, Ubuntu software center (or .deb). RPM would be nice but I can live with writing shell script.

2. Build+Dependency management (don't know if NuGet works flawlessly or not in Linux/Mac)

Maven spoiled me (people who dislike Maven please close your eyes...). I've read that Mono has xbuild but the documentation seems... lacking.

3. Unit-testing

Something where I can run unit-tests through the IDE so I can debug directly from my unit-tests when bugs are found.

4. Good enough 3rd-party libraries

I'm down writing missing libraries if needed but my first priority is the app itself.


I recently worked on a small-ish desktop app that shuttled data between a HID USB device and a web service. We targeted Windows and OSX. The UI portion of the application was very simple and I still found the Xamarin/GtkSharp combination buggy and frustrating.

We used Wix for the Windows installer and the included OSX tools to make the Mac installer (http://s.sudre.free.fr/Stuff/PackageMaker_Howto.html was helpful).

A TeamCity build system using NuGet worked fine for building both flavors, though the Mac build was really just a shell script that TeamCity launched. We used the Xamarin compiler for Mac.

In hindsight I wish we had taken (found?) the time to go all the way and write separate OSX specific UI code and not used GtkSharp. And not require the install of the Mono framework for Mac users-- that really kills the experience. Supposedly you can bundle in Mono with the Xamarin .Mac product but we haven't found the time to get that far yet.

*EDIT: I failed to mention explicitly this was C#/Mono. Also for those interested I used http://www.signal11.us/oss/hidapi/ as a wrapper around the Mac HID USB APIs and it worked fine.


> Does anyone have any recommendations for the easiest way to write cross-platform GUI apps that can run without an internet connection?

Granted, for many people, it's about as hip as Rails is to a newly converted node.js fan, but Tcl and Tk are still a pretty good way of writing smaller apps that run cross platform. Like someone else says, if you want a native GUI, you really need to write that separately for each platform. But that's a big investment, and for some systems, it might not be worthwhile.


A webapp doesn't necessarily have to be hosted on the internet. You can try with embedded server - Java + Jetty + GWT.


If 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.


If python is the language that you are gonna use, you would try Kivy cross-platform framework to make GUI for desktop and mobile.


I just tried Kivy. Thanks for telling me about it! Kivy is pretty awesome: very easy to use, and it Just Works on all platforms, even mobile. It's also painless to deploy Kivy apps to users, which is great.

It's hardware accelerated, so I can write my own custom GLSL shaders for the UI, which is pretty cool. I bet I could even implement a Mario-style game using Kivy. The main application window is just a GL context, and all the UI widget rendering is done via GL.

Unfortunately the Kivy UI seems to be riddled with bugs, and the UI widgets themselves are very alien. For example, the Kivy file browser widget seems to be incomplete (it lacks basic features) and confusing (it behaves nothing like a native file selector). So Kivy is probably too jarring of an experience for users... if I use Kivy in its current form, all my users would balk at the unintuitive UI, since Kivy's widgets don't look or feel anything like native platform widgets. And since users would also be fighting Kivy's UI bugs, I predict every user would immediately ragequit my app. (E.g. drag-selecting text within multiline textboxes seems to be broken, etc.)

That said, Kivy is very close to being an effective way to effortlessly write crossplatform GUI apps. The main reason to use Kivy is because it's so easy to write useful apps with it. I wrote one in about 15 minutes from start to finish. The API is a pleasure to use, and the data binding design is especially brilliant.

Kivy seems pretty fantastic for writing internal tools. Data visualization via Python is now a cinch thanks to Kivy. For example, it'd be easy to write an app that shows the current status of all your server instances. And of course at that point it'd be easy to extend your app's functionality with features like "right click on a server instance to spawn an SSH session into it". Stuff like that is a breeze thanks to Kivy.

Time to try out everyone else's suggestions. Up next: Clojure + Seesaw. (This thread has been incredibly helpful... So many interesting ideas. Thanks, everyone!)


Kivy excels at a lot of things, but I'd say that its real value shows when you want to quickly make a cross-platform mobile app that also happens to run on desktop OSes. The widgets and markup language (KV) are designed to be used in a multitouch environment, and they seem pretty alien when used with a mouse and keyboard. They are pretty intuitive when used on a tablet or phone, though -- I recommend you try compiling your app for Android before giving up on the framework.

That being said, even when compiling for PC it's worked very well for me when a client wants an internal tool and is willing to give up a native feel in exchange for fast (cheap!) development. I wrote this for UCLA a few months ago, and I think the whole thing only took me about 20 hours: https://github.com/sbrother/wassum-lab-lick-program/


I have had similar experiences with Kivy. I previously developed a simple game with PyMT[0] relatively easily, so I was very excited when Kivy came out. I had another project requiring multitouch support on a PC recently and decided to use Kivy and it immediately crashed my window manager every time I tried to run it which turned me off pretty quickly.

I ended up doing the multi-touch UI in JavaScript and HTML instead. It felt much clunkier to work with, but I wasn't comfortable with wrangling Kivy's instability for the rest of the project.

[0] http://cleichner.blogspot.com/2011/02/multitouch-project.htm...


It 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.


Go, 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.


Ack ... 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?


Although 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.


>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.


> 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.


C# 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.


You 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.


kotlin looks cool. But it's missing some minor things that would make it much more friendly:

* no regex literals

* a little verbose(instead of [] for arrays, it's "Arrays")

* hashes IMO should be JSON

* why doesn't null evaluate to false? God I hate writing if (a != null). I'm much happier in javascript/ruby/groovy land where if can type "if (!a)" or "unless a" or even cooler "raise Exception("a should not be null") unless a"

* why did the world standardize on camelCase instead of snake_case ? the world was wrong about this!

basically a little more javascript and ruby influence would have been good. make the language more "fun" and expressive. There is no equiv of the ||= operator or | for joining arrays, etc

But the big things it's missing are more ecosystem features: * REPL

* an alternative build system (please don't make anyone use maven!) should be an interpreted scripting language. I'd look at Rake or Gradle for inspiration

* rails like web framework


Trouble with all the build systems is they're language based, and the best systems use the worst languages, and vice versa.


>kotlin looks cool except they should do all kinds of dumb stuff as if it were a scripting language

It is a statically typed language designed to try to drag java programmers kicking and screaming into the 1970s. Virtually everything you listed would be a bad change. Just use a language that is actually similar to what you want.


This attitude is why java is stuck in the stone ages. Any ideas coming from the dynamically typed world are "dumb".


No, dumb ideas are dumb. It has nothing to do with java. Haskell is statically typed, and it is far more advanced than the languages you are thinking of when you think advanced.


which ideas are dumb and why?

btw being a jerk doesn't help your case.

lesson in civil discourse by example: "I don't think that a ||= operator is a good idea because XXX"


Trying to turn a language into a totally and completely different language is dumb. This is not complicated. Civil discourse also requires that you take the time to read and comprehend words before you reply to them with crap.


look at Rust btw. Statically typed, but heavily influenced by the scripting languages. You should set them straight!


I've seen rust. I don't know what you think is so heavily influenced by scripting languages, you'll have to share.


Kotlin 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


You can start with the latest build. It is that good. There is no need to wait for the 1.0 version.


I'm sure it's good. It's just not for real yet.

* If you read the link, there is no guarantee of backwards compatibility to the current point within future releases. This is why they're still in milestones.

* Jetbrains has yet to show us that they are, themselves, committed to Kotlin by implementing something major in it.

* They won't provide a timeline for 1.0.

I love thinking about and toying with new languages, but when it comes to sitting down and doing stuff, I need to know the environment has enough commitment such that I don't have immediate code rot.


So you would use a pre-1.0 version with no guarantees of backward compatibility to implement something real? Something that a business depends on, not just something you can toss up on your GitHub page to look cool? I would fire you as soon as we tried to update to a new version and had to spend weeks fixing your now broken code.


I'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)


Did you re-implement ReSharper or any of your _major_ products in Kotlin?


I want to like it but the lack of value type structs and other GC avoidance features will keep its performance at java levels.


And for wide variety of server side applications, Java level performance is awesome


Project 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.


They 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.


Xamarin 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.


It 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.


I 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.


You're right. I am completely missing your point.

I can't speak for all .net shops, but in my experience you roll your own. You sit down, discover your problem, and write a solution for whatever you need from scratch specifically tailored to your need and performance requirements. Afterward, you understand the code (and the intent behind it) very very well.

I don't lament the lack of third party frameworks. I take them as an inspiration when I find interesting ones, and I know my toolset well enough to re-work their solutions and make them my own in pretty good time.

For me, as long as whatever it is is meant to run on windows (and doesn't require native performance), C#'s sweet spot is whatever I decide it needs to be.

Having a C#-like language in which I can write code with performance comparable to native will put some icing on my cake.


Believe me, I'm a great advocate of building the thing you need rather than blinding using libraries, but there's some great stuff out there: lessc, RabbitMQ (although that works well on Windows), Riak, Postgres, neo4j, hadoop, jQuery (Microsoft saw the light on that one), elastic search, pygments. Of those, Microsoft can offer alternatives to 2 of them: MSMQ and SQL Server. The others are sufficiently costly to re-implement that you're likely to just try to work around the problem (I'd love to see someone attempt a DB with Riak-like reliability on .NET... RavenDB is not that DB.)


If you like Riak, there is a .net client library. There is a .net port of lessCSS. RabbitMQ works with .net. You can access postgres with .net. I didn't see any features of Neo4J that I can't do pretty easily with MSSQL and a custom DAL. You can talk to Hadoop from .net. I've been using jQuery with ASP.net since it was released. Elasticsearch runs on windows, and I don't see why you can't use it with a .net project. I don't really see the point of pygments, but it looks like it's pretty easy to use with IronPython.

So in those instances you have a choice. You can use those libraries/products as they stand, or you can roll your own.


>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.


It'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.


That is still light years ahead of coding with vi/emacs in UNIX SYSTEM V style, like many here still seem to do.

I only do it when I am left without any other choice, maybe growing up with Amiga/Smalltalk/Oberon GUIs has spoiled me.


Yeah, Microsoft's ORM solutions are pretty horrible but then... so is NHibernate. But NHibernate was better and five years earlier, so it was really hard to see why Microsoft even bothered with EF.

Only ORM I use is the wonderful Dapper.NET.


You've heard of IntelliJ, right?


Me yes, but the bash/vi/emacs guys not.


There is Hadoop, Microsoft have been pursuing it aggressively recently.

SciPy type stuff is best handled using F#, which also works on Mono, and has some features that I haven't seen in any other languages (e.g. Type Providers).

There are multiple .NET web frameworks, including Microsoft's own ASP.NET MVC and Web API, but also OSS efforts like FubuMVC, Nancy, ServiceStack, Simple.Web and more, most of which work as well on Mono as on MS .NET.

As you say, the Node story on Windows has improved lately, and most current languages work as well on Windows as on any other platform.

C# itself is probably second only to JavaScript in terms of cross-platform development: Xamarin for Mac and mobile; Mono for Linux (yes, it's incomplete, but Linux people should be used to that); Unity for game development across consoles, mobile devices, web and traditional PCs. By "cross-platform" I don't necessarily mean write-once-run-everywhere, which results in lowest common denominator dreck anyway, but the ability to reuse your skills and some code in many different environments and domains.


> (yeah, I know about Mono)

Mono solves everything you complain about and that's the only mention it gets?


I 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.


It's like saying "Java only works on old Nokia phones (yeah I know about all other ports of JVM)".


Not 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.


I 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.


Ah, 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 ;)


> 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


> 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...


I'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.


Also, Mono's own ecosystem of additional libraries works better on Windows than on Linux. A while ago, I used a project that used an SQLite binding from the Mono project. They decided to discontinue development of this library in favour of a newer alternative, and it was then totally broken by subsequent Mono updates - but it continued to work fine on Windows with .Net. So any projects that still use this library are basically impossible to get working on Linux/Mac because Mono has awful backwards compatibility with the Mono Project's own libraries compared with .Net.


Quite funny that you try to generalize a statement from what appears to be just one single example (note: mono developer here and this is the first news I have about a fuckup like this).


It comes with the territory, I'm afraid. Some users will try something once, find a bug or limitation, decide the platform sucks and never touch it again (and if the platform is worthless, why bother filing a bug report.) I've been guilty of it myself quite a few times. First impressions count for a lot, and they can be difficult to control.


"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.


Getting 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.


You forgot mono-winforms. And most users do forget it and then complain to a developer that the software does not work.


I am big C++ fan, but i understand that the C++ language is going into nowhere. It's like "all in one" solution that is too big, too hard to learn and use nowadays. I've been using C++ for more than 10 years, still many things are shocking me ))

I am sure C# is the "Next Main Desktop App Dev. Language". I really wish MS would OPEN-SOURCE it one day. You can read article in my blog about that here (really short): http://anthonyakentiev.github.io/blog/2013/12/08/what-if-see...

I wish C# will be used freely everywhere - on Apple, on Android, on Linux... Really - Mono/Xamarin does not have a full .NET/CLR/C#/frameworks support.


I disagree that C++ is going nowhere. The last few years has had more interesting stuff than most of the language's history.

First C++11 which added lots of interesting stuff. (Lambdas, move constructors, threads as part of the language spec, better smart pointers, and more.) Most of this was added in a very clever "C++ way" - for example lambdas that can be inlined as functors and can take advantage of copy constructors and RAII kind of blows my mind. Major compilers picked it up pretty quickly. Already people are talking about C++14.

I will agree that its history makes it a sort of Byzantine language (I really prefer the simplicity of C for a lot of things), but there is a lot to be optimisitic about for C++ in the last few years. With the latest standards and best practices the language it ought to have been for a long time is finally getting out.


Work with Mono and report back..


I 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.


>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?


C# itself is better than Java, so the new language must be 2x better than Java


The language is better, but the backend and ecosystem are not.


I don't see why Microsoft would create something that would work on other systems....they want people to use Windows.


Of 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


And 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.


I 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.


I 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.


For 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.


Perhaps 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.


Because before C became widespread, there were languages that allowed the same type of systems programming while allowing safer coding, like Modula-2.

C's widespread made systems open to buffer and pointer misuse exploits, patched by external tooling and multiple attempts at OS levels. All of them still far away from the desired outcome.


I can only speak for Rust, but Rust does actually give you the flexibility and unsafety of C, but this is an escape hatch; you can write most of your program with the memory and data race safety that Rust provides, only dropping down to the super-low-level C-like code when absolutely necessary.

I.e. you can rely on the compiler to verify most of your code, only the explicit `unsafe` blocks (which are normally very rare, especially with some considered abstractions that keep all the unsafety in one place) absolutely need auditing for things like buffer overflow and use-after-free (unlike C/C++ where any code in the whole codebase can have these problems).


For what it's worth if I'm getting voted up in my comments, I take it as a sign that HN is declining.


The homepage of Joe Duffy says "I’ve been granted 45 patents, with another 33 pending" (see his homepage under /about via google cache since the page is down due to load from HN). Bragging about patents doesn't exactly make me like the guy. Has he been living under a rock, why would he write that on his about page?

Anyway, he says explicitly that he cannot reveal any details at this point; i.e. Microsoft has filed patents related to this "new langage" and can't talk about it until they are approved. He also claims to have been working on his "new language" for 5 years already; I wonder what those 33 patents he says he got pending are? Or maybe he patented 33 things related to something he hasn't been working on for the last 5 years? Not likely. Microsoft will get more and more desperate as they continue to be marginalized in terms of market cap, market share and developer mindshare. They have a long track record of simply being dicks (i.e. just look at how they charge royalty for every android phone, and how they created the Rock Star patent troll company etc).

It would be better for everyone if Microsoft stayed out of the "perf + productivity" language niche.


>> Joe Duffy says "I’ve been granted 45 patents, with another 33 pending"

>> Bragging about patents doesn't exactly make me like the guy.

Genuinely asking, do you see putting information on patents as bragging or more generally as a negative? I have also been putting the same on my profile, so would like to understand your viewpoint better to see if I should remove it.

My side of the story:

I have nearly always worked for big technology companies and for various reasons they are always very protective of their IP. This means that an employee can barely talk about his/her projects at the company without making the description too generic. People are barely allowed to publish papers on their work, make contributions to open-source (unless with consent of the employer, which is rare), and cannot have side projects [1].

Such generic descriptions of the projects and a mere mention of the skills do not leave many options for employees to demonstrate their expertise. Recommendations is one way (and I correspondingly have plenty of stellar ones on my LinkedIn profile), but is also gamed a lot: I know several cases where non-deserving people also have great recommendations.

Then comes the patent filings. I have been known as a well-respected and "a prolific inventor" in my last employment, the "most original thinker" at college, etc. Yet, it is hard to reflect this on the profile or CV since these terms by themselves are also often overused.

[1] While it may be a common practice to have side projects, the employment agreements most big technology companies have, that most people sign without even reading, place a lot of restrictions on the side projects. These issues have been discussed on HN several times before. In fact, since most employees do not even read these agreements, talk about negotiating on them, the equilibrium position for these agreements is heavily biased in the favor of employers than of employees.


Software patents are contentious issue for some people so it's not something I'd include in a CV or on an open accessible "about page".


I see. Issue is with software patents specifically, not patents in general. (Mine are mostly non-software.)


> Bragging about patents doesn't exactly make me like the guy. Has he been living under a rock...

No, you've been living in an echo chamber :-)

Open source enthusiasts may well want to share their work for free (or statistically more likely, use others' work for free), but that's their prerogative. Most companies will not give away their competitive advantage and will seek to protect it anyway they can, and similarly, they are well within their rights to do so.

However, open source seems to be the dominant religion around here. And also you have a lot of Google employees here, and Google is a bit handicapped when it comes to patents at the moment. This is why you hear a disproportionate amount of anti-patent rhetoric. Outside these circles, most engineers are either ignorant about patents or quite proud of their patents.


> you have a lot of Google employees here, and Google is a bit handicapped when it comes to patents at the moment. This is why you hear a disproportionate amount of anti-patent rhetoric.

Do you actually belive this?

> most engineers are either ignorant about patents or quite proud of their patents.

Cooperate America seems to be the only echo chamber that belives software patents are a pretty neat idea.


>Do you actually belive this?

I haven't seen a single Google employee (that I know of) here or on other forums who's had a nice thing to say about patents. I'm sure there are some pro-patent Google employees, they just don't seem to post on here :-)

But I don't understand what you mean by "corporate America"... Aren't companies that are complaining loudly about software patents also part of "corporate America"? How is that an echo chamber?


I'm going to ramble a little below, so I'll get to the point up front: is there even a new language here? I don't mean in the sense that Rust seems to attempt what is being hand waved about in the submission, but that the linked blog post states

> I’ve given a few glimpses into this work over the years. In the months to come, I will start sharing more details. My goal is to eventually open source this thing, but...

We'll have to wait and see, I guess. I also found this quote a bit odd

> There are other candidates early in their lives, too, most notably Rust and D. But hey, my team works at Microsoft, where there is ample C# talent and community just an arm’s length away.

D is hardly early in its life, but there is something about the whole "my team works at Microsoft, where there is ample C# talent" bit that is so very Microsoft, and I don't mean because it mentions Microsoft and C#, but in the sense of how they tend to work there. At least, this is my outside view, based mostly on what they promise vs. actually deliver in the C++ world, and where their interest constantly seem to fall short. Of course, you can't blame Microsoft for being interested in advancing Microsoft.

With that out of the way, and being up front that the rest of this comment is unnecessary, I wonder why this is on the front page of Lambda the Ultimate. It's become a favourite site of mine as I've recently become a lot more interested in language implementations. I'm certain the comments on the article will make it worthy, but as it stands, and with my comments above out of the way, I don't see what it offers. It's just hand waving about some ideal language that doesn't (fully) exist yet. The actual answer to my question of why it is on the front page is because Charles Torre can make front page posts, but just be aware that he works at Microsoft and hypes up their behaviour (that I'm admittedly not so pleased with) often. I know he is, like me, actually interested in language implementations, and has made far more worthy contributions on LtU than I ever have, but the front page of LtU is usually a bit more grounded.


For the record, Charles didn't post it to the home page. I promoted it there, since I thought (correctly, it turns out) that it might be of wide interest. So all the blame for that goes to me.


It's actually nice to see activity on the LtU front page. The two other posts I would assign to the same category as the submitted one would be xkcd: Functional [0] and The Three Laws of Programming Language Design [1] posts. They both had good discussion, which is where a lot of value at LtU comes from. I even wrote my own little script to make the expanded, threaded list of comments collapsible to consume them more to my liking.

To be fair, I was being unjustly negative because of my worry about how Microsoft treats such projects. Admittedly, after sleeping on it, I don't see it to be as big as a deal as I did last night. It'll be interesting to see what Microsoft produces, and we'll still have the open and approachable Rust regardless.

I find Charles reply to your comment about the HN thread odd though. He says

> It's interesting, though not unexpected, that folks are already comparing this language to D, Rust, and Go which also aim for a nirvana (safe, productive, fast, open) without really having many of the details required to make intelligent comparisons (on reddit, somebody made a post asserting this language is MS's _answer_ to D and Rust... WTF?).

Why is this interesting or unexpected? Joe Duffy's blog post mentions D and Rust explicitly. That we don't have "many of the details required to make intelligent comparisons" was my issue with it being hand wavy. There are already conspiracy themed posts about this being because Microsoft wants to lock down patents on these parts of the language [2]. Post the details, and we'll likely see "intelligent comparisons" being made on HN and Reddit.

The post is spreading on Reddit as well, if you would like to see others feelings on the matter [3].

[0] http://lambda-the-ultimate.org/node/4816

[1] http://lambda-the-ultimate.org/node/4754

[2] http://www.reddit.com/r/rust/comments/1tve0m/a_glimpse_into_...

[3] http://www.reddit.com/r/programming/duplicates/1tvic1/the_mi...


> It's actually nice to see activity on the LtU front page.

I agree.

But I think it would be more appropriate to conduct LtU meta-discussions over on LtU...


I am quite disturbed by this claim:

> It’s commonly claimed that with type-safety comes an inherent loss of performance

If we've learned anything, it's that type safety buys you performance because it enables a lot of compiler optimizations that are not possible in dynamically typed languages.

Other than that, the language sounds very interesting but if it's going to be Windows only, it will suffer the same fate as C#: powerful but crippled by its platform boundaries in a way that will make it impossible to compete with Java.


He's distinguishing between safe and unsafe languages, not between static and dynamic languages. The general mindset is that C++ can be faster than Java because it lets you do unsafe operations like pointer arithmetic and reinterpreting the raw bits from one type of data as another type, while Java requires you to go through (safe) interfaces or disallows those operations altogether.


I assumed he meant safety in the general sense or memory safety specifically. Things like array bounds checks, dynamic cast failures throwing exceptions, etc.


But he said type safety, which is entirely compile time and allows you to avoid run time checks, making it faster not slower.


Type safety means well-typed programs can't go wrong. Corrupted memory is surely a case of going wrong, so memory safety is a part of type safety. (In this sense, C, C++, etc. are not type safe.)

By the way, it is possible and sometimes preferrable to do all type checks in runtime. Haskell provides this option: https://ghc.haskell.org/trac/ghc/wiki/DeferErrorsToRuntime


Context is cool. With context, you can participate in a conversation, rather than stating an obvious but non-sequitur fact. By definition, type checks are done at compile time. Haskell's defer-type-errors is precisely an example of that. The error is found at compile time, but rather than signal it, the offending code is replaced with an exception.


sanxiyn's comment seems to fully understand the context. Re-read his message in the context of my message.

> By definition, type checks are done at compile time.

That does not match my definition of type checks.

Ignoring things like Typed Racket or clojure.core.typed for a moment. Consider a cast in Java: This is a type safe operation which incurs a runtime type check.

Now maybe you're thinking of global type checking for correctness. In which case, I'd still disagree, since there is no rule that you can't have a resident analyzer and run type checks after compilation. Go read about Typed Racket, for example.


>sanxiyn's comment seems to fully understand the context

No it doesn't, given that the context was specifically runtime checks like array bounds checking, and he replied with a non-sequitur about memory corruption.

>That does not match my definition of type checks.

That is because "your definition" is incorrect. I am using the actual definition. "Dynamic typing" is a deliberately incorrect name for untyped languages. Runtime checking of value compatibility is not type checking.


1) Surely the most common source of memory corruption is bounds violations.

2) Even reconciling our disagreement on terminology, I still disagree A) that a strict phase separation is a prerequisite for types to exist at all and B) that it even makes sense to talk about "untyped" as if I couldn't just invent a type system (however complex) for proving properties of a particular language that previously had no known type system.

The simple fact of the matter is that definitions evolve over time as we learn more about our field. "Type safety" is historically valid phrase for what we now know as "memory safety". In context of the performance claims, it was quite clear what the author meant.


>Surely the most common source of memory corruption is bounds violations.

Surely the most common source of oranges is orange trees.

>Even reconciling our disagreement on terminology

You aren't reconciling it, you are just repeating "I don't like the real definition of type system in regards to computer science". That's great for you and all, but it has nothing to do with me. If you want to learn about it I can recommend some material, but if you just want to argue "I don't understand X therefore using the correct terminology for X is wrong" then there's no need to continue.


> Part of what my team does is regularly convert C# programs to this new language, and it’s not uncommon for us to encounter 30-50% time spent in GC. For servers, this kills throughput

I think a lot of money in computer technology is made off of the cluelessness of application programmers. Then again, sometimes "cluelessness" = "schlepping" = opportunity. Azul systems Zing JVM is an example of this. Instead of arcane tuning, architecture, and optimization, you just put in a pauseless GC VM.

ARC with Objective-C shows that one can have automated deterministic memory management that's not only workable in practice, it works about as well as GC. That is, 90% of the time, with gotchas for application programmers not paying enough attention the other 10%. A functional language should enable a "just works" percentage even higher than 90%.


The tech report version of the OOPSLA paper Joe mentions, about a type system for side effect understanding, is here: https://research.microsoft.com/apps/pubs/default.aspx?id=170...


also from MSR, Koka[0] has effect types and a sweet online repl!

[0] http://rise4fun.com/koka/tutorial


I would imagine that language like that would be one of the best you could hope for. I hope this language will fit all the bullets.

- C# syntactic sugar

- As fast as C++

- Does not require .NET

- Runs on Windows/Linux/Unix with no problems


> - C# syntactic sugar

No, we need better foundations.

> - As fast as C++

I think it is not so much about raw speed (although this is certainly important) as it is about reliability. Raw speed (and, in general, runtime efficiency) is usually a corollary of elegance in design.

Now that we have programming languages with linear types and static lifetime management (Rust), I think it is fair to say garbage-collected systems have "duck-typed lifetimes" and languages with raw pointers have "untyped lifetimes".

And here is the catch: The principle that duck typing adds overhead (unacceptable for systems programming) does not only apply to values (in the form of the "type tag" that every value must carry), it applies to lifetimes as well (in the form of garbage collection pauses)!

Furthermore, I strongly suspect the aforementioned principle applies to anything worthy of being expressed statically. Off of the top of my head: validity of indices for sequential containers and keys for associative containers, which requires dependent types to be expressed statically, and whose duck typing counterpart is throwing something like .NET's ArgumentOutOfRangeException or KeyNotFoundException.


Sounds a lot like D (http://dlang.org/)...



Sounds like Java 8!


Doesn't Java still require an instalation of JRE, which is an analogue to .NET?

edit: If it somehow didn't need it, I would start considering it as my next language to learn.


No. The JRE can ship with the app. The CLR ships with the OS.


> No. The JRE can ship with the app. The CLR ships with the OS.

Yet you still need the JRE for Java.


The fact that the JRE can ship with the app doesn't change the fact that it stills need a VM runtime with all the overhead that it implies.


Sweet, in 4 years they can completely remove all support for it and start again!


YAGPL (yet another general-purpose language).

I think we've had enough of those in the past decade. Each one has something new to offer, but at the same time it disperses attention of the programmer crowd and so less effort is put into each language's development.

I think we need to experiment more with single-purpose languages. I'm not saying DSLs because those are mostly embedded syntactic constructs in existing languages. By single-purpose I mean an independent language (not just new syntax, but semantics as well, and possibly new runtime) that does one thing and does it well.

I believe such a language will have much more luck in becoming the single good enough solution for a particular problem (any problem it chooses to address, but only that one). There is really no hope for any general-purpose language to be a good fit for the whole wide spectrum of problems modern computing needs to solve.


How about a system for creating single-purpose languages?

http://www.vpri.org/pdf/tr2011004_steps11.pdf


Do you have any "particular problem" in mind? You don't mention one.

I think the trouble with single-purpose languages is that, realistically, their development needs to be motivated by a real problem not satisfactorily addressed by an existing language. And since the people with these problems are not often going to be language designers, most such opportunities will be missed. I'm frankly surprised by the existence of Julia.


Fetching information from a data store of some kind, and presenting it as a web page would be a good one.


I just hope it's not so heavily tied to an IDE. One of the things I really enjoy about using Go and Ruby is that I can use whatever the heck I want to write code. C# was my first language learning and it took a while to shake off the notion that "everything must be done with an IDE".


I couldn't agree more.

That said, I think hidden in your last sentence is the fact that working with C# in an IDE with a statically typed language is such a pleasure.

For most mundane code (loops, linq, if/else), Resharper will literally autocomplete everything.

I really wish other languages offered such tooling at times.

I don't think any other language/IDE combo comes close (in my opinion).


Try Intellij IDEA with Java and the various Java frameworks - IDEA is Jetbrains' (developers of Resharper) flagship IDE, they also do slightly more focused variants for Python, Ruby, PHP, and web development (PyCharm, RubyMine, PHPStorm, and WebStorm respectively.)


Modern Java with IntelliJ is similar.


I think Microsoft language research is wonderful. But they tools do not run on Linux and MacOS well.


A part of me is very excited by this. C# lives in a very interesting place now - MVC and EF are open-source and Mono is getting mature. There are tons of blind, stupid alleys of bad politics in C#'s library, but MS seems to have worked out the kinks.

A new gaming-compatible language that breaks free from the old legacy and purely embraces the new Microsoft platforms and their semi-open development model could be excellent. And with MS offering hardware platforms for gaming, mobile, desktop, and server, there's a lot of space for this language to really shine - a good systems language for XBox and WinPhone would be beautiful.

And while I'd cringe at another platform-specific language, Apple has proven that people will suffer through your exotic toolchain if it means getting to develop for a popular platform.

The biggest problem historically with C# isn't the windows-specific nature of the platform, it's the heavily Cathedral-oriented community. Developers are married to Microsoft libs, even when they suck, and it doesn't have the kind of open reusable tools that other platforms have. Microsoft has finally started achieving this, but only by creating open-source communities around their existing libs like EF and MVC.


This sounds suspiciously similar to Rust.


codingbinary, you are hell-banned (your comments are invisible to the vast majority of users).

Your comments aren't all "great", but they seem to be in good faith. I feel that a friendly reminder to strive to post substantive and relevant comments [1] would be a far more appropriate remedy than killing your account after your second comment.

[1] http://ycombinator.com/newsguidelines.html


Yes it does, but IMO only superficially. Rust has a completely different type system model and also Rust is not aimed at high performance applications, while this seems to be. Many(most?) new languages fade away because nobody is interested in implementing compilers/libraries writing documentation/teaching material/etc etc. I'll be impressed if they can ship something next year.


> Rust has a completely different type system model

What are the differences? It sounds pretty similar to Rust—"rvalue references, move semantics, destruction, references / borrowing" are straight out of Rust's playbook.

Granted, if it's based on C#, it sounds like it'll be more object-oriented than Rust is, which is a difference. Rust has some object-oriented features, but they're much more minimalist than what C# offers; idiomatic Rust prefers composition over inheritance, etc.

> Rust is not aimed at high performance applications

This week has been bizarro week for weird things people are saying about Rust. :)

Rust is about zero-cost abstractions, period. It's right there on the Wikipedia page: "Performance of safe code is expected to be slower than C++ if performance is the only consideration, but to be comparable (and sometimes faster) than C++ code that manually takes precautions comparable to what the Rust language mandates." http://en.wikipedia.org/wiki/Rust_%28programming_language%29

Mozilla is explicitly investing in Rust in order to build the fastest browser engine around and has been from day one…


>What are the differences?

As you mentioned, if they based it entirely on C# , it will be a unified type system. We'll only get more information when they release a standards specification.

>Rust is about zero-cost abstractions, period.

Um.. no? For one, the heap is reference counted - and if you use std::gc its... mark/sweep(not sure?). This obviously means that the programmer has little control over memory allocation other than what can be afforded by not compromising memory safety. Secondly from my initial use of Rust I dont think you cannot protect a chunk of data with a lock and share it (w/o copying) across threads/processes as you would with a systems language like C++.

--

Rust is not aimed at high performance applications - I dont see anything wrong with that statement.


> For one, the heap is reference counted - and if you use std::gc its... mark/sweep(not sure?).

No, the heap primarily uses unique ownership, which is equivalent to malloc/free. Reference counting is an option (and mark/sweep in the future) but idiomatic Rust only uses reference counting where it is necessary.

> Secondly from my initial use of Rust I dont think you cannot protect a chunk of data with a lock and share it (w/o copying) across threads/processes as you would with a systems language like C++.

Yes, you can. http://static.rust-lang.org/doc/master/extra/arc/struct.Mute...

> Rust is not aimed at high performance applications - I dont see anything wrong with that statement.

Rust is aimed at high performance applications and has been since day one.


So are you confirming or denying that Rust is about zero-cost abstraction? Because it sounds like you're saying if you don't use any abstractions, its zero cost :)

Anyway, I don't have anything against Rust. I cheer for their success.


You'll have to take the word of the people aiming rust, really.

Refcounted pointers are just one option in rust. ~Obviously~ you can use anything from C-style pointers and your own custom allocator that calls brk() directly to atomically refcounted and/or mutexed threadsafe smartpointers to manage your memory.


If you use a C style pointer, it is no longer an abstraction. I don't see what your point is.


Rust aims to match C++ in performance.


Nuts to that, I expect that Rust could regularly exceed C++ in performance. Ownership as a core concept means that you get pointer aliasing information for free, which has always been Fortran's biggest advantage over C. And correct me if I'm wrong, but C++'s unique_ptr isn't guaranteed to have zero overhead at runtime, as Rust's unique pointers are.


unique_ptr should have similar performance to Rust as designed right now, but the upcoming changes to eliminate zeroing out of moved values should give Rust's unique pointers an edge over those of C++ in 1.0.


Someone should add that to their FAQ then.

https://github.com/mozilla/rust/wiki/Doc-project-FAQ

This is what they state their goal is. (no mention of performance)

>To design and implement a safe, concurrent, practical, static systems language.

vs (linked article)

>high productivity (ease of use, intuitive, high level) AND guaranteed (type)safety AND high execution performance.


You're right, we should mention it. Thanks for catching this. I filed a bug ticket to add some language about our performance goals:

https://github.com/mozilla/rust/issues/11174


No, but this is Microrust

It's completely not at all the same, but still familiar to rust programmers.

It's but built for the enterprise with advanced patented technology.

The yearly license fee will include responsive customer service.


That's not how languages in the .net ecosystem have worked in the past. C# is an open, ecma standard, as is the specification of the common language infrastructure (the VM/byte-code design for running .net programs). And MS publishes the language specifications for VB and F#. That's why it's possible to run .net code on linux without ever paying MS. There's even an open source F# compiler.

Moreover, the .net compilers, library, framework, and run-time are, and have been, provided for free, as is a version of the IDE. All of which can be used to develop commercial applications. The only requirement being that they run on a Windows OS. Even so, you can run all of this from within WINE, again without ever paying MS any money whatsoever.

The idea that MS is out to envelope developers by enticing them into a language that requires massive cash outlays or ongoing licensing fees is not supported by reality.


    The idea that MS is out to envelope developers by enticing 
    them into a language that requires massive cash outlays or
    *ongoing licensing fees* is not supported by reality.
...

    The only requirement being that they run on a Windows OS
Mhm.

Yes, I suppose you can run some C# on a non-windows machine, but it'll have bugs, break, some libraries won't be supported and there's no tooling support.

...but don't worry, you can happily tell everyone how free and open source it is. That's really important!

(by comparison, have a look at go which actually bothered to make a commitment to supporting various platforms; and don't even start with that whole 'xamarin is awesome' stuff; yes it is, but it in no ways acts as a caveat for microsoft's 'we'll make the spec public, that's good enough right?' behaviour)


Why does this need to be explained to C# people every time we have this conversation? Seriously, every time!

C# runs great on 90% of desktop computers because Microsoft has had a 20 year desktop monopoly. It's is a walled garden until we can easily move code to other platforms and have it perform at the same level.


I'm not sure what your point is.

Mobile apps, web apps and games are where the money is these days; and writing those in C# requires license fees for tools and (in some cases) servers to run the software on.

Are you suggesting that if Microsoft releases this new language they might not require an expensive Visual Studio license so you can use the language plugin, or an expensive server license to run it on?

(To be fair, the python developer tools actually did this, with a forked free version of visual studio, and the typescript compiler is free and open (although the tooling plugin requires VS Pro)) ...so perhaps its not totally out of the question).

I'm not holding my breath, but if they surprise me, I'll happily eat my words.


What would make you happy here?

Would open sourcing the C# compiler be enough? Open sourcing .NET? Providing .NET support and development for Linux?

I'm honestly just curious, not to put you on the spot.


typescript and go are two examples of doing the right thing.

It's not hard, heck Microsoft has even done it before, they just missed the ball with C#.


I'm really appalled by the hostility that's being displayed here. This is Microsoft research in Cambridge, not the Xbox one marketing department. You know, the guys who work on Haskell, ported OCAML to .net and generally do a lot of awesome stuff.

What have you created that justifies this kind of an attitude?


FYI, this isn't really an MSR project. It (the OS project that spawned the language) was run under the "Startup Business Group" until recently, and developed in Redmond.


> You know, the guys who work on Haskell, ported OCAML to .net and generally do a lot of awesome stuff.

Not exactly. The guys who developed F# based the core language mostly on OCaml and borrowed some ideas from Haskell, but are not the same as the people who developed Haskell.


http://research.microsoft.com/en-us/people/simonpj/

Yes, I'm aware that it's not the Haskell core team who is working on this new language. But they probably have their offices across the floor.


well, if we only look at the language and the "recent" past then C# is both an Ecma and ISO standard.

yes, it's only one example among 1000s of opposite ones but things are changing even in Microsoft, very slowly, with lots of setbacks, but they are. They won't transform MS anytime soon and possibly ever but I see saner pockets emerging.


Yes their technical specifications for protocols and formats are wonderful since they released the open specification promise!

Oh no wait, for those of us who have actually used these specs (in my case MSRPC/DCE), it's a hopeless mess of blatantly incomplete documentation obviously written by the lowest bidder.

Microsoft haven't changed. They've succeeded in changing their perception only. The company is still predatory sales focused and always will be.


Their language specs are pretty decent and easy to follow.

It's almost like they have more than one person who writes specs.


Some are, some are not. Some are so bad it's unfunny. Literally someone has read the COM IDL and made up some padding. The core protocols like MSRPC are poorly documented i.e. the interoperability specs. They definitely have more than one person (did I suggest otherwise?) but I suspect the documentation was outsourced for a lot of stuff to people who have no idea how it works


Anecdotal, but sometimes things seem so dysfunctional within MS that I can't believe they get anything done at all: I once met a professor at a conference who said his grad students were reverse-engineering some of Microsoft's distributed system protocols (not MSRPC). I asked him why he didn't directly contact the team owning that project at Microsoft for help instead, and if I should introduce him to them -- I had met them before and they were pretty friendly and eager to get people to use their stuff. He said he was doing the reverse engineering for Microsoft. When I was like "WTF, why?!", he wouldn't give any details but said in an offhand way that MS needed somebody to document the system.

Now, I cannot imagine what unearthly sequence of events led to a snafu where MS had to ask an outside party to reverse engineer their own stuff in order to document it... But that may explain your experience.


> it’s not uncommon for us to encounter 30-50% time spent in GC

Hmm... not sure if that's just C#, or if I should start profiling my Java apps a lot more closely.


I'd written a JVM project a while ago that also spent an ungodly amount of time in GC. You can create bottlenecks almost anywhere given enough (lack of) effort. Who knows how finely tuned these projects were or what their load was like before a rewrite. A rewrite in a new language gives you more benefits than just the new language , it also gives you the benefit of hindsight. The ability to fix mistakes made in the first implementation can go a long way.


> Who knows how finely tuned these projects were or what their load was like before a rewrite. A rewrite in a new language gives you more benefits than just the new language , it also gives you the benefit of hindsight. The ability to fix mistakes made in the first implementation can go a long way.

That's a very good point with these rewrite stories - you could happen to rewrite some really poor code while porting and boom! Language Y is 50% more performant!


I think they would be better off porting C# to other platforms. Their long term strategy of keeping developers locked up on Windows has become counter productive. Developers want / need to develop on Apple and Android platforms as well as Windows.

Microsoft has great development tools. It would be better for them to hold onto the developers and share them with other platforms rather than losing them completely. By making their development tools multi-platform they would be bringing many developers to Windows who today want little to do with that platform.


It's interesting that there's renewed interest in a modern systems programming language. However, I feel as though the world doesn't need another ALGOL-like language. C# is very good at what it does, but managed code will always execute at a slight penalty vs native code. Nonetheless this will be an interesting experiment into a modern "safe" systems language.


Sounds great, but I'll wait to see some actual code before getting my hopes up.


C# might be a great language now, but 1.0 was horrible! It was a painful experience to gain adoption within companies and frameworks on top of it (ASP+ for example) still needed to mature. The world is different now.

I predict Microsoft will push NodeJS / JavaScript / HTML5 for application development. I'm assuming this will be targeted towards the Go style community and applications. It has a lot of the same properties with Go starting to gain traction I can see why Microsoft would be exploring the space.


"NodeJS / JavaScript / HTML5" - more likely to be just another option to satisfy everyone. I would rather move to Scala than use JS for anything other than rich GUI. Who wants to support business logic implemented in JS by an average developer?


Microsoft would never promote Scala as it's a JVM language. NodeJS is likely given the recent relationship with Red Gate and effort surrounding Azure support.

As for business logic by an average developer - I would say the same thing about every language.


Why give up Scala when you're writing code for the browser? https://github.com/scala-js/scala-js


> 5) Modern error model.

I am pretty excited to see this. Any existing language out there actually does this?


Racket, of course!

Very sophisticated contract system and exceptions and reified continuations.

It's dynamic, JITed language, and it's a Lisp, but I recommend studying it just for the sake of learning various techniques Racket uses. They are frequently very interesting from the language design perspective and their usage is easier to understand than in Haskell :)


It sounded a lot like Eiffel[1] to me, except they also have traditional Exceptions when you need them.

[1] http://en.wikipedia.org/wiki/Eiffel_(programming_language)#E...


"...that a nirvana for a modern general purpose language would be one that satisfies high productivity (ease of use, intuitive, high level) AND guaranteed (type)safety AND high execution performance..."

So they're making MS Go. Just like C# is MS Java.


Sounds like a lot of effort to pay in exchange of an incremental improvement of C#.


Is this a research project, or something that will be released to the public?

As someone that's spent a lot of time learning how to get c# to perform, this sounds fantastic to me. I can't wait to see it.


Sigh.. a Windows-only language? Really? Talk about ivory tower..


It's interesting that there is renewed interest in finding a "modern" systems programming language. I'm not entirely sure if the world


No Linux and Mac, no thank you!


To clarify, Mono is no Stereo: no first-class support of non-Windows platforms pretty much dooms the language. And it's not about where you develop, it's where you deploy. I'm not gonna switch to Azure or AWS/Windows, because of a fancier language when there are D, Go, and others!


who needs another Windows only new programming language?


C# but with better performance? Sounds a bit like Delphi with curly braces.


Just like Microsoft copied Java with C# they are now trying to copy Go. Always late to the party as usual.


Ignoring the fact that the post directly references Rust and D (languages that are actually similar to this effort), they have no reason to copy anything from Go because existing Microsoft libraries and languages already do everything Go does with more mature libraries and a more mature runtime (for example, unlike Go, Microsoft's runtime has a precise garbage collector!)


C++ does not perform, is not a managed language, and has nothing to offer. What could he possibly be talking about?

I read this as MS once again getting it completely wrong. Seriously C++ solving managed languages performance and memory problems?

Physician, HEAL THY SELF.


> C++ does not perform,...

You sure seem to be an expert on these things.


He could be Torvalds, I guess. :)


I don't think Torvalds has said C++ is slow, just that the language is shitty compared to C.


Computer games which are impacted by performance the most are written in what language?


I doubt that C++ is chosen because of raw performance (both C# and Java are close enough), but mostly because of memory and cpu cycle determinism.


>I doubt that C++ is chosen because of raw performance

As long as you're guessing, you can say anything you want.

>but mostly because of memory and cpu cycle determinism.

There is SOME memory determinism in C++. Much of the memory layout is left unspecified in the standard and left upto the implementations - e.g. virtual tables, exceptions, C++ standard library internals, primitive data type sizes, and a bunch of stuff that if listed one-per-line would take up dozens of pages.


>"(both C# and Java are close enough)"

Not really, a GC call in the middle of your render loop can drop your FPS rate significantly, and those cpu cycles are vital when you start adding physics simulation, not to mention the limitation of memory on consoles.

Sure, Java and C# would be enough for minecraft or some xbox live puzzle game, but I really doubt that you could manage to write an Uncharted game in Java or C# on a PS3 or an Xbox.


A GC call cannot drop your FPS a lot, but it could add a lot of latency spikes and inconsistent framerates. Techreport's inside the second is amazing read on the subject.

So ... you will have slightly lower FPS (55 instead of 60) but much worse experience.


Does it have anything to do with history? Given Java relying on JVM and in the beginning JVM's performance probably wasn't so good, game libraries were probably written in C, C++ and then nobody wanted to rewrite game engines because gaming industry is really fast-pace and very very busy.


Both: Manual memory management and library support.


C/C++ though game engines usually support higherlevel languages like Lua or Python.


The entire logic of most games is written in slow-ass languages like UnrealScript or LUA.

The runtimes of the games are often code monstrosities wasting performance here and there.

Performance is way over-rated.


C with classes


Judging by their track record, I completely trust the geniuses at Microsoft to solve another non-existent problem /s.


MS have been very very good on the technical side of the things. It is the business decisions that mess things up.

The only really bad technical decision that they have taken is the broken security model of user accounts.


Do we really need more languages? Aren't there enough languages already?

I suspect I have just outed myself as a substandard hacker. :( But seriously! There's so many!


Yes, we need more. There are many ideas to explore still.

The "do we really need more languages?" argument predates most of my preferred languages(and that probably includes C and Pascal).

I like Haxe, Rust is looking like being really good also. I don't like Go but others do, and that is a really important point. You don't have to like, or use the new languages. As long as someone finds them useful they have a place.


I'm a bit leery of that argument, because in my experience the most important component of a language is its ecosystem. By far.

I've played with many really nice languages, but never used them seriously because they had no libraries (let alone quality libraries), had poor tooling, poor documentation, buggy runtime, and almost nobody to compare notes with. In my experience, the largest jump in productivity is libraries, not some feature of a language.

On the one hand, languages are useful to explore a space. On the other, there's a lot of reinvented wheels going on here. If all languages stuck with the same ABI (e.g. C), it'd be one thing, because then you could use the same libraries and many tools between languages. Unfortunately, they often cannot, and thus you can't. There's some serious opportunity cost going on here.

I'm happy using node.js at the moment (ooh, shiny!), but the current situation with a plethora of languages isn't exactly great either.


It is true that most of the best supported languages have been around for a good ten years. But each of those languages had a time when they were only a year old.

I don't deny languages take time to mature. I feel like Haxe is about two-thirds of the way towards being properly Mature. It is approaching 10 years old, yet I feel like it is only just getting started, A lot of people still haven't even heard of it.


Haxe is great but confusing for newbies. You can write anything to run on anything but with what libraries; tons of halfbaked thing around. The tutorials are per target which make it seem you can use the same language but have to write different code per platform. I like Haxe and tried it a number of times, but unless coming from Flash/AS it feels underdocumented and, in a lot places in the main site, quite dead. It's not but broken links, vital libraries which are unsupported etc.


Of course we need more languages. We need to continue evolving languages until we get better and better ones. When languages stop improving so significantly from generation to generation then we can start settling down into a smaller number of languages.

We still haven't figured out the best tradeoffs between dynamism and type safety. And we definitely haven't sorted out the best set of features for memory management and error handling. And after that there are a lot of even bigger fish to fry.


We do, because if you reduce languages to their fundamental core, we had around... 3 - 6 languages in wide use.

Note that this means we need a language which has certain fundamental differences to existing languages, so we don't need YAJAWiSS (yet another java with syntactic sugar), but something that takes a step forward. Their error model, first class immutability and RAII outside of C++ might be something like this, if done well.


There aren't that many languages backed by a giant corporation (=> tools and docs). And no, we just need C# (multi-paradigm, multi-typed) with better performance - which is what they are doing.


Well really we just need C, now get off my lawn.


There aren't that many languages in the systems space.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: