F# is a real breath of fresh air in comparison to something like Scala. It's direct ML heritage really shows, also just diving in with an IDE (like Xamarin, or I suppose Visual Studio) is super easy.
I see it as the future of pop-functional programming. For example look at the way it handles type inference w/ JSON parsing. Compare that to what you have to do to parse JSON in Scala. It's subtle, but a major usability win.
Scala is getting really interesting lately though with projects like Spark and SparkSQL. Spark takes a Scala AST tree and computes a plan on it in order to distribute it to a cluster of possibly thousands of nodes and then uses transformations on that plan, similar to how an SQL query optimizer works, to make the plan more efficient. The cluster compute benchmarks on it are crazy good.
The only problem I have with Scala is that it has so many features that it tends to have a steeper learning curve than most languages. However, this is mitigated somewhat in that it lets one switch between object and functional depending on what's more convenient or performant, thus making it easier for programmers who are not highly skilled in functional programming to pick up.
I've done a bit of scala spark as well, and my initial thought was prototype in pyspark and then rewrite in scala if necessary. Just this week DataBricks announced they are working on changing some of the data structures behind RDDs to save on unnecessary java object creation hubbub https://databricks.com/blog/2015/04/28/project-tungsten-brin...
That and the SQL compiler thing seems pretty darn awesome. Spark has the nice benefit of being plug and play (w/ a joyful time of compiling and deploying) with legacy HDFS/Hadoop systems. That alone will keep it in toolboxes for a long time to come.
>Spark takes a Scala AST tree and computes a plan on it in order to distribute it to a cluster of possibly thousands of nodes
Unless Spark has changed dramatically in the year since I used it, that's not really how it works. You lazily construct an expression graph of RDD operators but the actual Scala code (the functional payload of e.g. flatMap) doesn't get analyzed. Are you talking specifically about Spark SQL's code generator?
>The cluster compute benchmarks on it are crazy good.
...and also carefully chosen to show off the niche cases where Spark shines. More commonly, you'll encounter crippling garbage collector stalls leading to mysterious and undebuggable job failures.
Spark has a very clean API but the implementation (at least for Spark versions 0.8-1.0) is still prototype quality.
I did a toy comparison of ML-derived languages running on Linux the other day (http://thebreakfastpost.com/2015/04/22/four-mls-and-a-python...) and found F# already simple to get along with and fast to run, at this beginner level. It could become a really interesting option.
"F* is a new higher order, effectful programming language (like ML) designed with program verification in mind. Its type system is based on a core that resembles System Fω (hence the name), but is extended with dependent types, refined monadic effects, refinement types, and higher kinds. Together, these features allow expressing precise and compact specifications for programs, including functional correctness properties. The F* type-checker aims to prove that programs meet their specifications using an automated theorem prover (usually Z3) behind the scenes to discharge proof obligations. Programs written in F* can be translated to OCaml, F#, or JavaScript for execution. "
Gotta love automatic theorem proving. I read the Shen language book on "logic, proof and computation" which got me into the idea of a theorem prover inside of your normal language.
They do seem like very similar languages. I imagine in most cases your choice would have effectively already been made for you by the context -- e.g. whether you wanted the option of fast native binaries (OCaml) or deep .NET integration (F#).
I don't agree, it's 'direct ML heritage' is quite superficial, as it omits ML's most powerful feature, functor modules.
Scala however has all kinds of super powered functional programming features that F# is missing, implicit parameters for type class constraints, ADTs, higher kinded types, etc.
I know it doesn't say much, but having never coded in ML and having tried F# briefly (I code mostly C#, and it'd be easy to have mixed F#/C#), I think Scala has much clearer syntax, or perhaps it's just more familiar for someone who's coming from imperative languages like C++ or C#.
case class Fruit(name: String, variants: Set[String])
val fruitJson =
Json.parse(
"""{
"name": "apple",
"variants": ["cox", "braeburn"]
}""")
val fruit = fruitJson.as[Fruit]
Doesn't seem to be too painful to me.
I agree that F# is syntactically closer to ML (though Scala is closer to ML with its module system which F# gave up completely).
In this base case, no, it isn't too painful. But once you get to larger and more complicated structures, F#'s type provider system can be a tangible timesaver. Especially if you're doing exploratory programming.
TBH, I think the JSON example might underrate things a bit anyway. Where type providers really start to feel impressive is when you get to tricks like being able to noodle around inside undocumented (or poorly documented) COM interfaces with the help of CodeSense, or getting red squigglies in your editor (and compile time errors) when there's a problem with an SQL query.
F# isn't all roses, of course. I really wish it had typeclasses, and discriminated unions are less powerful than Scala's case classes in some tangible ways. But from a purely pragmatic perspective, my (almost certainly biased) sense is that I can usually Get Things Done™ with less ceremony in F#, and type providers are a shining example of that pragmatism.
For those of you who want to save the click: you need to build half the stuff on a windows machine and the copy it over - and you need mono to fetch the dependencies(!).
This is interesting but is there any commitment to support it long term? I remember when Silverlight was supposed to be the savior that brought .NET to Mac and Linux, but that didn't last more than 5 years. Would be nice for MS to say they guarantee support for 10, 15, etc. years.
I'm playing devil's advocate: But Silverlight was too little too late. It arrived right as Flash was effectively dying. I don't blame them for killing it, it was dead on arrival.
I can explain the entire problem with Silverlight using two dates:
- iPhone initial release: 29th of June 2007
- Silverlight initial release: 5th of September 2007
Now, we can argue if iOS killed Flash, but I think between iOS's lack of support and all of the security issues associated with Flash, it was set up to lose popular support (and then HTML5/HTML5 DRM filled in the gap, even if it took years ultimately).
Silverlight was a Flash competitor in a world that decided it didn't need Flash.
Silverlight was a half-assed, brain-dead attempt at trying to compete with Flash. It started out as a cool demo and then blew up into a role that didn't fit it well with insufficient support on the dev side. What it should have been was a competitor for AJAX/jQuery. What it turned into was just another video player browser plug-in.
This is the thing with Microsoft is this is never in doubt. It is Google who ends of life's things and stops support. Microsoft still has supports things in Windows 8.1 that were BUGS in MS-DOS in order to allow programs from that era to run.
Microsoft will support .NetCore for at least 20 years. Without doubt.
I have the largest cable provider in the country and when I click "watch TV on my laptop" it launches Silverlight. (It sucks, by the way). But people pretending the thing isn't used and isn't supported are really grasping at straws here.
If you're going to bring a plastic knife to a watergun fight, at least point it in the right direction...
You know who didn't (and does not) support Silverlight? Developers!
We moved on from Silverlight well before Microsoft did. That's the important distinction when you talk about sunsetting technologies. Microsoft's track record here is FAR better than that of Google or Apple.
Supported with bug fixes, sure. Supported well enough to do modern application development (with the latest C#, .NET framework features, etc)? No. The last major release (Silverlight 5) was 4 years ago.
This is the CLR and .NET class libs. Unlike Silveright they have been supported for 15 years already, and will be aggresively developed in the future too. Besides, they've just been opensourced, even if this IDE project dies, those will stick around as long as Java will...
One thing that's nice is that it's now open source, so as long as it remains open source, it will likely remain cross platform. Contributers that are on non-windows platforms will likely notice when something breaks on their platform, and get it fixed.
Only core components and now a stripped down IDE are open source (core is actually free software IIRC). I will only be impressed if the entire runtime stack becomes open source. Otherwise it's still a platform for DRM or other forms of lockdown.
If you're not porting a .net application to MAC or Linux, I would avoid this for quite a while still. We don't know where this is going long term.
It's a bit different when there's a runtime required to run the apps. An app written in Go/Rust today will run on a machine 10, 20, 100 years from now as it's just an entirely self-contained executable. A .NET app will only run on a machine that has a functioning and supported .NET framework.
> Silverlight was supposed to be the savior that brought .NET to Mac and Linux
Silverlight was supposed to bring .NET to browsers on Mac and Linux. Someone1234's comment is IMHO correct and very astute - Silverlight wasn't all bad, but it solved the wrong problem.
On the other hand, this is all about bringing .Net to web servers on Mac and Linux. particularly Linux boxes and container in clouds. My experience may not be typical, but to me that's the right problem. The MS Azure team probably agrees.
They're still charging and threatening people for Android patents without really telling anybody what patents they hold over Android.
I think they realize they can make money via open source now and they might do this for future product. Threaten people via patents or some kind of trojan horse.
While it's great we have another programming language and platform option but their actions so far in the past and present isn't so great.
They also tried to make a Hadoop clone that failed miserably so now they team up with Hortonworks.
Perhaps that opening sourcing their VM they can have big data projects like Hadoop and such. Oracle have big sway over Java and JVM. Perhaps that's what Microsoft wants. People might forget about Oracle and JVM but I still remembered and it really sucks for Apache.
In general, I'm not taking this bet and I'll wait on it.
Also with my current skill set which is mainly open source, it is fine not dealing with Microsoft. Unless they have a better market share and momentum in some niche market like big data with Hadoop, spark or whatever I wouldn't even think about touching their open source stuff.
They had already announced the various parts of this, and the only link I see in here is a GitHub repo with links to other GitHub repos that we've already seen. Is there anything new in this announcement?
Pardon my ignorance, but I've never adventured too much into licensing stuff myself, and always had this kind of silly question roaming in my mind: what would happen if someone - after releasing some code open-source with the most permissive license, say on Github - immediately after changed their mind and changed the license back to a very restrictive one and someone had forked the project in that short range of time? Would their forked repository with the permissive license version be a totally legit code repository ?
I know this is sounds silly, but I wonder if it's a thing or not that when a software company publicly releases some valuable code open-source, then there is always someone thinking: "better fork this as quick as possible! you never know!" :)
The code that will allow the software to run on Linux and Mac OS has not yet been built. “It will be a few months before you can get your hand on this." -Somasegar
Yes. FreeBSD and OSX support was done 100% by the open-source community w/ support from MSFT whom helped a little bit with domain knowledge (the CLR product managers and developers can be found in the Gitter room)
I don't know about any major project. I was waiting for MS to commit to running CLR on Linux (or any unix like clone) so that I can consider the CLR languages seriously (I am very interested in F# in particular).
Was able to build it and run the HelloWorld.cs example. You need to build coreclr and corefx on windows for the managed components, since only the core cpp source can be built on linux at this time. You also need to install mono and grab nuget and use it to fetch a few packages. But all in all it feels fairly historic.
I'm glad that you were able to make it all work with the instructions[1] we provided. There are two major pieces that we're still working on, which you call out:
- Compiling managed source on OS X and Linux with Roslyn.
- Running DNU (NuGet) on .NET Core to restore packages.
Most everything else functionaly works. Once those are solved (and we are close to it), the experience will be great. In just a few commands, you'll be able to acquire .NET Core, restore packages and run your app, independent of which OS you are on.
For .NET developers, it is indeed historic. Community and corporate developers alike are quite excited and see a lot of new opportunities going forward. You might have noticed that the community is leading the OS X and FreeBSD .NET ports, with support from Microsoft. We added official FreeBSD CI[2] only a week ago, upon the request of the community.
Thanks for chiming in. Really looking forward to further developments. As a 15 year+ Windows development veteran whose been doing python on Ubuntu for 3 years it's great to be playing with .NET again. As far as the HelloWorld instructions go, they worked very well, so kudos on that. I think it's super important for developers to be able to jump in and check it out. I also should have mentioned that I used docker's ubuntu:14.04 image as a launch pad for this exercise, and it worked great as well.
I'm curious, is there enough released yet to build server-side web apps? Would there be an apache mod, or some other web server? Or is there something more akin to a node app? I really enjoy C#, but everything that I did was either a Windows-only desktop app or a web app served through IIS. Thanks for any insight.
There's enough released to build server-side apps. ASP.NET and .NET in general has been decoupled from IIS over the last year via project OWIN. Self-hosting binaries is in big time.
I see a pattern here. People were excited about JVM, then came along CLR. And it is now getting attention as MS is porting it to Linux/OSX. Next cool thing will be BEAM (Erlang's VM) based languages, i.e. Elixir, Lisp Flavored Erlang etc. Reminds me of the hype cycle. So lets get hyped!
Funny thing I cloned their repo yesterday on Mac Os to check the advancement of their project, I could run the hello world and the static Web site but not the MVC one.
In order to stay relevant, Microsoft attempts to supplant Xamarin's stakehold in the Linux/iPhone market, by directly eating their lunch.
This is the same thing Microsoft did to IBM. Microsoft will do it to any "partner" they feel they can cannibalize. The Halloween Documents are not only relevant, but canon with this move.
You can run Unity editor under Wine [1] and you can publish Unity games for Linux [2] but I assume native Unity editor support on Linux would require the use of a cross platform GUI library (Qt, GTK etc) as it probably relies on WinForms [3] which is only supported by mono (and I think OSX) up to .NET 2.0 [4].
Java, with Oracle at the wheel, is not going anywhere. They've added closures in 8, big deal.
C# is centuries ahead of Java 8, and with even more to come faster. And I'm saying that as an old Java dev (for 8 years up until 2008 or so) who have only dabbled in C#.
Yeah, but a lot of the features they're adding or just talking about adding to C# are already in more modern JVM languages like Kotlin / Scala / Ceylon.
Kotlin in particular has quite a lot of the things like people like in C# (no full equivalent to linq though), and some things that are only pencilled in tentatively for the version of C# after next, like full nullability in the type system. And you can convert Java files to Kotlin with a single keypress, and your entire project still compiles, so there's a migration path for Java devs to Kotlin whereas there isn't one from Java to C#, really.
So yes the Java language moves slowly. However Oracle/Sun have barely been trying with the Java language: the bulk of their efforts are going into things like upgrading the standard library, better virtual machines, better support for more types of languages, better performance etc. I think they've pretty much bitten the bullet on letting other companies run with language research and development (like JetBrains)
Think of it as like the Java runtime environment, but not terrible.
You have two main pieces: the Common Language Runtime, which is the virtual machine (like the JVM) that executes the code. Then you have the library it comes with, which is fairly large compared to most languages.
> Think of it as like the Java runtime environment, but not terrible.
What's terrible about the JVM/JRE?
Many people complain about the language Java (conservative language, programmer culture of complexity...), or the web browser plugin for the JVM (security vulnerabilities, bad startup performance...), but I've generally heard good things about the JVM itself.
One of the interesting things I'm waiting to see is if .NET gets good enough to become the "main" platform for compile to VM languages like Clojure. It can already compile to .NET, but it's significantly less used than the JVM version, despite .NET generally being easier to target.
It is like the Java runtime, but started afresh with all of Java's learned lessons taken into account (although Java with 7 and 8 in particular is catching up).
Up until now however it has only ran on Windows which was its biggest "downside" Vs. Java which runs on many platforms.
> started afresh with all of Java's learned lessons taken into account
I don't think that's really historically accurate. Java and C# were pretty similar back in 2002. The .NET team was more willing to add complexity and occasionally make breaking changes, like generics in CLR 2.0.
Windows and .NET are different things. I'm fairly confident being able to run .NET on unix machines won't affect you very much so you can stay a happy Linux User. Also, times are changing man, for the better. Embrace it.
The only part which scares me is that people will start making Linux apps using dotnet technologies.
>Also, times are changing man, for the better. Embrace it
Yup. That is why MS had to realize that *nix is eclipsing it in cloud and to grab extra some extra pennies out of our pockets, they are releasing their products on these platform just to fool us that they care. Actually they don't care us at all.
I don't think is too little but I'm sure they are late. Too late? Probably not but imagine if they did this 10 years ago, the impact it would have had on Java and many other ecosystems. I bet many of them would have been smaller and MS larger.
The difference is the Microsoft implementation is probably going to be much better quality and better documented. Also, you can't compare Microsoft of ten years ago with the Microsoft of today.
Am I the only one bothered that they didn't include the space between the "OS" and the "X"?
More importantly, this is huge, but as a Linux developer/user I still have no desire to use .NET on my platform. Maybe Mono has scarred my permanently.
Just out of curiosity why? I personally can't imagine why someone would choose it as a favorite. Not because I think it is bad, but because I feel its kind of a kitchen sink language that doesn't really have any clear advantages or features.
Nothing wrong with Microsoft bringing OSX and Linux to parity with Windows. In fact, there's a lot right with it. I like this new Microsoft, and I've been using Linux for years. Keep up the good work Redmond!
Excited to see that interesting tech like C#, F#, CLR, LINQ and friends is heading our way. If anything it'll give Java a run for its money and that's no bad thing.
I don't think anything is giving the JVM a run for its money. There are millions of man hours that have gone into performance tuning the JVM. The CLR has substantially less. Possibly for mid-size projects the CLR _could_ be an alternative but for the foreseeable future any administrator who is comfortable with Linux is likely also comfortable with the JVM tools necessary to troubleshoot and improve JVM performance.
It would've been great if the author knew what 'distribution' means in this context.
"Distribution" is hardly specific to Linux distributions in technical circles. I don't know how you got that impression. The term is synonymous with software bundle, e.g. "Erlang/OTP distribution".
F# is a real breath of fresh air in comparison to something like Scala. It's direct ML heritage really shows, also just diving in with an IDE (like Xamarin, or I suppose Visual Studio) is super easy.
I see it as the future of pop-functional programming. For example look at the way it handles type inference w/ JSON parsing. Compare that to what you have to do to parse JSON in Scala. It's subtle, but a major usability win.
Scala is getting really interesting lately though with projects like Spark and SparkSQL. Spark takes a Scala AST tree and computes a plan on it in order to distribute it to a cluster of possibly thousands of nodes and then uses transformations on that plan, similar to how an SQL query optimizer works, to make the plan more efficient. The cluster compute benchmarks on it are crazy good.
The only problem I have with Scala is that it has so many features that it tends to have a steeper learning curve than most languages. However, this is mitigated somewhat in that it lets one switch between object and functional depending on what's more convenient or performant, thus making it easier for programmers who are not highly skilled in functional programming to pick up.
Yeah, I did a presentation at the DC Area Apache Spark meetup... slides: http://www.slideshare.net/RichardSeymour3/2015-0224-washingt... associated blog post: https://www.endgame.com/blog/streaming-data-processing-pyspa...
I've done a bit of scala spark as well, and my initial thought was prototype in pyspark and then rewrite in scala if necessary. Just this week DataBricks announced they are working on changing some of the data structures behind RDDs to save on unnecessary java object creation hubbub https://databricks.com/blog/2015/04/28/project-tungsten-brin...
That and the SQL compiler thing seems pretty darn awesome. Spark has the nice benefit of being plug and play (w/ a joyful time of compiling and deploying) with legacy HDFS/Hadoop systems. That alone will keep it in toolboxes for a long time to come.
>Spark takes a Scala AST tree and computes a plan on it in order to distribute it to a cluster of possibly thousands of nodes
Unless Spark has changed dramatically in the year since I used it, that's not really how it works. You lazily construct an expression graph of RDD operators but the actual Scala code (the functional payload of e.g. flatMap) doesn't get analyzed. Are you talking specifically about Spark SQL's code generator?
>The cluster compute benchmarks on it are crazy good.
...and also carefully chosen to show off the niche cases where Spark shines. More commonly, you'll encounter crippling garbage collector stalls leading to mysterious and undebuggable job failures.
Spark has a very clean API but the implementation (at least for Spark versions 0.8-1.0) is still prototype quality.
2 replies →
Would there be a F# equivalent to that Scala/Spark thing?
3 replies →
I did a toy comparison of ML-derived languages running on Linux the other day (http://thebreakfastpost.com/2015/04/22/four-mls-and-a-python...) and found F# already simple to get along with and fast to run, at this beginner level. It could become a really interesting option.
Good writeup. I posted it to HN: https://news.ycombinator.com/item?id=9463254.
Maybe you could try out Haskell also? I would gladly assist if you'd be in need of any.
Thanks, very interesting. Do you happen to know how large OCaml binaries get if you use Core.Std?
1 reply →
Also interesting is their F* language: http://fstar-lang.org/
"F* is a new higher order, effectful programming language (like ML) designed with program verification in mind. Its type system is based on a core that resembles System Fω (hence the name), but is extended with dependent types, refined monadic effects, refinement types, and higher kinds. Together, these features allow expressing precise and compact specifications for programs, including functional correctness properties. The F* type-checker aims to prove that programs meet their specifications using an automated theorem prover (usually Z3) behind the scenes to discharge proof obligations. Programs written in F* can be translated to OCaml, F#, or JavaScript for execution. "
It's open source too: https://github.com/FStarLang/FStar
Gotta love automatic theorem proving. I read the Shen language book on "logic, proof and computation" which got me into the idea of a theorem prover inside of your normal language.
I'm going to write a package manager and call it F* ck
1 reply →
Have you worked with it? I love the idea of a fully powered F# without the kiddie gloves. F* looks pretty neat.
If F# is of interest to you then check out http://www.fsharpworkshop.com/ + https://github.com/ghuntley/fsharp-workshop and finally http://fsharpforfunandprofit.com
Did you just invent a term? "Pop-Functional"... I like it!
Starts singing
make my func the p-func / I want my func uncut...
2 replies →
I hope so.
You would think something like OCaml would fill in that niche with its wider availability.
They do seem like very similar languages. I imagine in most cases your choice would have effectively already been made for you by the context -- e.g. whether you wanted the option of fast native binaries (OCaml) or deep .NET integration (F#).
OCaml doesn't come with the ecosystem that F# does. It isn't about availability, but APIs to play with.
5 replies →
There's a very cool implementation of (multi-threaded!) OCaml for the JVM: http://www.ocamljava.org/
2 replies →
I don't agree, it's 'direct ML heritage' is quite superficial, as it omits ML's most powerful feature, functor modules.
Scala however has all kinds of super powered functional programming features that F# is missing, implicit parameters for type class constraints, ADTs, higher kinded types, etc.
I know it doesn't say much, but having never coded in ML and having tried F# briefly (I code mostly C#, and it'd be easy to have mixed F#/C#), I think Scala has much clearer syntax, or perhaps it's just more familiar for someone who's coming from imperative languages like C++ or C#.
Doesn't seem to be too painful to me.
I agree that F# is syntactically closer to ML (though Scala is closer to ML with its module system which F# gave up completely).
In this base case, no, it isn't too painful. But once you get to larger and more complicated structures, F#'s type provider system can be a tangible timesaver. Especially if you're doing exploratory programming.
TBH, I think the JSON example might underrate things a bit anyway. Where type providers really start to feel impressive is when you get to tricks like being able to noodle around inside undocumented (or poorly documented) COM interfaces with the help of CodeSense, or getting red squigglies in your editor (and compile time errors) when there's a problem with an SQL query.
F# isn't all roses, of course. I really wish it had typeclasses, and discriminated unions are less powerful than Scala's case classes in some tangible ways. But from a purely pragmatic perspective, my (almost certainly biased) sense is that I can usually Get Things Done™ with less ceremony in F#, and type providers are a shining example of that pragmatism.
1 reply →
Tell me what happens with that technique when your json has > 22 keys. ;)
(Edit) this is apparently working in the latest scala 2.11 But it killed my adoption of scala for real work early on. https://issues.scala-lang.org/browse/SI-7099
1 reply →
Learn Scala before you say something about it.
My first question was "So how do I build "Hello World"?
For anyone else wondering that, go to https://github.com/dotnet/coreclr/blob/master/Documentation/....
1) ghuntley@freebsd-frankfurt:~/coreclr-master % ./build.sh
2) ghuntley@freebsd-frankfurt:~/coreclr-master % cp bin/Product/FreeBSD.x64.Debug/corerun ~/coreclr-demo/runtime
3) ghuntley@freebsd-frankfurt:~/coreclr-master % cp bin/Product/FreeBSD.x64.Debug/libcoreclr*.so ~/coreclr-demo/runtime
4) ghuntley@freebsd-frankfurt:~/coreclr-master % cd ~/coreclr-demo/runtime
5) ghuntley@freebsd-frankfurt:~/coreclr-demo/runtime % ./corerun HelloWorld.exe freebsd
Hello, FreeBSD...
See also https://github.com/dotnet/corefxlab/commit/a39310b028ad830f8... - "HelloWorld: Pimp up the FreeBSD daemon to have colors. Basically pay full respects to the original console screen-saver."
For those of you who want to save the click: you need to build half the stuff on a windows machine and the copy it over - and you need mono to fetch the dependencies(!).
For now? Yes but not for long - https://github.com/dotnet/corefx/issues/1576
Thanks for saving me the click.
This is interesting but is there any commitment to support it long term? I remember when Silverlight was supposed to be the savior that brought .NET to Mac and Linux, but that didn't last more than 5 years. Would be nice for MS to say they guarantee support for 10, 15, etc. years.
I'm playing devil's advocate: But Silverlight was too little too late. It arrived right as Flash was effectively dying. I don't blame them for killing it, it was dead on arrival.
I can explain the entire problem with Silverlight using two dates:
- iPhone initial release: 29th of June 2007
- Silverlight initial release: 5th of September 2007
Now, we can argue if iOS killed Flash, but I think between iOS's lack of support and all of the security issues associated with Flash, it was set up to lose popular support (and then HTML5/HTML5 DRM filled in the gap, even if it took years ultimately).
Silverlight was a Flash competitor in a world that decided it didn't need Flash.
Silverlight was a half-assed, brain-dead attempt at trying to compete with Flash. It started out as a cool demo and then blew up into a role that didn't fit it well with insufficient support on the dev side. What it should have been was a competitor for AJAX/jQuery. What it turned into was just another video player browser plug-in.
1 reply →
This is the thing with Microsoft is this is never in doubt. It is Google who ends of life's things and stops support. Microsoft still has supports things in Windows 8.1 that were BUGS in MS-DOS in order to allow programs from that era to run.
Microsoft will support .NetCore for at least 20 years. Without doubt.
They may still support it, but it can be a technological dead-end. Just like Silverlight.
1 reply →
>Microsoft will support .NetCore for at least 20 years. Without doubt.
On Windows for sure. Not on *nix though.
3 replies →
Heard of Visual Basic 6?
1 reply →
Silverlight is still supported by Microsoft - https://support.microsoft.com/en-us/lifecycle?c2=12905
I have the largest cable provider in the country and when I click "watch TV on my laptop" it launches Silverlight. (It sucks, by the way). But people pretending the thing isn't used and isn't supported are really grasping at straws here.
If you're going to bring a plastic knife to a watergun fight, at least point it in the right direction...
You know who didn't (and does not) support Silverlight? Developers!
We moved on from Silverlight well before Microsoft did. That's the important distinction when you talk about sunsetting technologies. Microsoft's track record here is FAR better than that of Google or Apple.
2 replies →
Supported with bug fixes, sure. Supported well enough to do modern application development (with the latest C#, .NET framework features, etc)? No. The last major release (Silverlight 5) was 4 years ago.
Your username sounds very similar to the .NET Rocks host :-)
2 replies →
This is the CLR and .NET class libs. Unlike Silveright they have been supported for 15 years already, and will be aggresively developed in the future too. Besides, they've just been opensourced, even if this IDE project dies, those will stick around as long as Java will...
One thing that's nice is that it's now open source, so as long as it remains open source, it will likely remain cross platform. Contributers that are on non-windows platforms will likely notice when something breaks on their platform, and get it fixed.
Only core components and now a stripped down IDE are open source (core is actually free software IIRC). I will only be impressed if the entire runtime stack becomes open source. Otherwise it's still a platform for DRM or other forms of lockdown.
If you're not porting a .net application to MAC or Linux, I would avoid this for quite a while still. We don't know where this is going long term.
5 replies →
Has Google/Mozilla made the same commitments to Go/Rust?
It's a bit different when there's a runtime required to run the apps. An app written in Go/Rust today will run on a machine 10, 20, 100 years from now as it's just an entirely self-contained executable. A .NET app will only run on a machine that has a functioning and supported .NET framework.
3 replies →
> Silverlight was supposed to be the savior that brought .NET to Mac and Linux
Silverlight was supposed to bring .NET to browsers on Mac and Linux. Someone1234's comment is IMHO correct and very astute - Silverlight wasn't all bad, but it solved the wrong problem.
On the other hand, this is all about bringing .Net to web servers on Mac and Linux. particularly Linux boxes and container in clouds. My experience may not be typical, but to me that's the right problem. The MS Azure team probably agrees.
Never thought I'd say this but go Microsoft!
I dunno about that.
They're still charging and threatening people for Android patents without really telling anybody what patents they hold over Android.
I think they realize they can make money via open source now and they might do this for future product. Threaten people via patents or some kind of trojan horse.
While it's great we have another programming language and platform option but their actions so far in the past and present isn't so great.
They also tried to make a Hadoop clone that failed miserably so now they team up with Hortonworks.
Perhaps that opening sourcing their VM they can have big data projects like Hadoop and such. Oracle have big sway over Java and JVM. Perhaps that's what Microsoft wants. People might forget about Oracle and JVM but I still remembered and it really sucks for Apache.
In general, I'm not taking this bet and I'll wait on it.
Also with my current skill set which is mainly open source, it is fine not dealing with Microsoft. Unless they have a better market share and momentum in some niche market like big data with Hadoop, spark or whatever I wouldn't even think about touching their open source stuff.
So, what is actually new here?
They had already announced the various parts of this, and the only link I see in here is a GitHub repo with links to other GitHub repos that we've already seen. Is there anything new in this announcement?
Check also https://github.com/dotnet/llilc compilation of MSIL byte code to LLVM supported platforms.
Does it include the source? And how liberal is the license?
https://github.com/dotnet/coreclr
MIT license
Checkmate Stallman.
16 replies →
How about patent use grants, hmm?
If I remember correctly, Microsoft is making a lot of money off of Android by licensing patents.
2 replies →
Pardon my ignorance, but I've never adventured too much into licensing stuff myself, and always had this kind of silly question roaming in my mind: what would happen if someone - after releasing some code open-source with the most permissive license, say on Github - immediately after changed their mind and changed the license back to a very restrictive one and someone had forked the project in that short range of time? Would their forked repository with the permissive license version be a totally legit code repository ?
I know this is sounds silly, but I wonder if it's a thing or not that when a software company publicly releases some valuable code open-source, then there is always someone thinking: "better fork this as quick as possible! you never know!" :)
1 reply →
The code that will allow the software to run on Linux and Mac OS has not yet been built. “It will be a few months before you can get your hand on this." -Somasegar
Oh hey the CLR finally achieved platform independence. Which is great because it is great.
Yes. FreeBSD and OSX support was done 100% by the open-source community w/ support from MSFT whom helped a little bit with domain knowledge (the CLR product managers and developers can be found in the Gitter room)
See https://news.ycombinator.com/item?id=9431368 w/ Microsoft .NET CoreCLR is now running on FreeBSD 10.1 (amd64)
how long until i can `brew install dotnet`?
Wow yes, apt-get install dotnet anyone?
Should Microsoft provide a few common platform install methods?
It would be hilarious if it became easier to install .NET on Linux than it is to install Java.
11 replies →
Turns out the command at the moment is
brew tap aspnet/dnx; brew install dnvm
Not quite, but they're getting there. And supporting Homebrew, apparently.
I really want to run it on a Raspberry Pi
mono is integrating the coreclr floss bits pragmatically... so you can probably use mono (if it's in the raspian repo).
1 reply →
There'll still be no Winforms or WPF on Linux, is that right? So no desktop apps will be portable?
Yes! Finally we can use .NET on on Linux a supported official way.
What are the major projects that are built in Mono? I only know opensimulator.
http://www.mono-project.com/docs/about-mono/showcase/compani...
As much as it pangs me to say it, I'm playing some great games on Linux now because the Unity people built it on Mono.
I don't know about any major project. I was waiting for MS to commit to running CLR on Linux (or any unix like clone) so that I can consider the CLR languages seriously (I am very interested in F# in particular).
https://raygun.io/
Was able to build it and run the HelloWorld.cs example. You need to build coreclr and corefx on windows for the managed components, since only the core cpp source can be built on linux at this time. You also need to install mono and grab nuget and use it to fetch a few packages. But all in all it feels fairly historic.
http://i.imgur.com/XyCB3uA.png
.NET Core team member here.
I'm glad that you were able to make it all work with the instructions[1] we provided. There are two major pieces that we're still working on, which you call out:
- Compiling managed source on OS X and Linux with Roslyn.
- Running DNU (NuGet) on .NET Core to restore packages.
Most everything else functionaly works. Once those are solved (and we are close to it), the experience will be great. In just a few commands, you'll be able to acquire .NET Core, restore packages and run your app, independent of which OS you are on.
For .NET developers, it is indeed historic. Community and corporate developers alike are quite excited and see a lot of new opportunities going forward. You might have noticed that the community is leading the OS X and FreeBSD .NET ports, with support from Microsoft. We added official FreeBSD CI[2] only a week ago, upon the request of the community.
[1] https://github.com/dotnet/coreclr/blob/master/Documentation/...
[2] https://github.com/dotnet/coreclr#build-status
edit: formatting
Thanks for chiming in. Really looking forward to further developments. As a 15 year+ Windows development veteran whose been doing python on Ubuntu for 3 years it's great to be playing with .NET again. As far as the HelloWorld instructions go, they worked very well, so kudos on that. I think it's super important for developers to be able to jump in and check it out. I also should have mentioned that I used docker's ubuntu:14.04 image as a launch pad for this exercise, and it worked great as well.
1 reply →
So is this open-source enough to get into Debian (free) and hence Ubuntu?
C# just got a little sharper!
So does this mean that we might have Microsoft Lync client coming up for Linux?
When I tried to use Lync on browser, I remember seeing something about .NET. Or is it silverlight?
God, its like you took a dozen unrelated words and shoved them in a blender and this is what came ou.
I'm curious, is there enough released yet to build server-side web apps? Would there be an apache mod, or some other web server? Or is there something more akin to a node app? I really enjoy C#, but everything that I did was either a Windows-only desktop app or a web app served through IIS. Thanks for any insight.
Yes, you can do this now.
https://github.com/aspnet/Home/tree/dev/samples/latest/Hello...
Follow instructions here: https://github.com/aspnet/home
This can also be done with mono, fastcgi, and nginx.
http://www.mono-project.com/docs/web/fastcgi/nginx/
Excellent, thank you!
There's enough released to build server-side apps. ASP.NET and .NET in general has been decoupled from IIS over the last year via project OWIN. Self-hosting binaries is in big time.
http://nancyfx.org - Sinatra for .NET (Nancy being the daughter of Frank Sinatra)
ASP.net web apps have been possible on Linux without IS for many years.
I see a pattern here. People were excited about JVM, then came along CLR. And it is now getting attention as MS is porting it to Linux/OSX. Next cool thing will be BEAM (Erlang's VM) based languages, i.e. Elixir, Lisp Flavored Erlang etc. Reminds me of the hype cycle. So lets get hyped!
OSX (and FreeBSD) was done by the OSS community not by MSFT.
So how come they build VS:Code in HTML/JS/CSS using Chromium?
Funny thing I cloned their repo yesterday on Mac Os to check the advancement of their project, I could run the hello world and the static Web site but not the MVC one.
Microsoft moved further into Java territory; "Write Once, Run Anywhere"... literally, with an editor and the runtime.
Does this mean we are going to see a .NET based desktop environment in Linux anytime soon?
Immediately it means you'll see developers that use the Microsoft stack developing and deploying into docker containers running on Linux.
In order to stay relevant, Microsoft attempts to supplant Xamarin's stakehold in the Linux/iPhone market, by directly eating their lunch.
This is the same thing Microsoft did to IBM. Microsoft will do it to any "partner" they feel they can cannibalize. The Halloween Documents are not only relevant, but canon with this move.
Well technically Xamarin are eating Microsoft's lunch right about now - https://trello.com/b/vRPTMfdz/net-framework-integration-into...
I can just hear the chuckling in the Linux and Mac communities now.
How long until I can develop with Unity game engine from Linux?
You can run Unity editor under Wine [1] and you can publish Unity games for Linux [2] but I assume native Unity editor support on Linux would require the use of a cross platform GUI library (Qt, GTK etc) as it probably relies on WinForms [3] which is only supported by mono (and I think OSX) up to .NET 2.0 [4].
[1]: http://wiki.unity3d.com/index.php/Running_Unity_on_Linux_thr...
[2]: http://blogs.unity3d.com/2012/11/22/linux-publishing-in-unit...
[3]: http://en.wikipedia.org/wiki/Windows_Forms
[4]: http://www.mono-project.com/docs/gui/winforms/
Where are the actual download links to play with it?
It's a bit too late?
They mercifully waited until Java caught up a bit with version 8.
Seriously, they could have fair chance, C# was so much better, but today it's still quite better but java is proven and has more libs.
Java, with Oracle at the wheel, is not going anywhere. They've added closures in 8, big deal.
C# is centuries ahead of Java 8, and with even more to come faster. And I'm saying that as an old Java dev (for 8 years up until 2008 or so) who have only dabbled in C#.
Ehhh, When Sun was at the helm Java was stuck in quicksand even worse than today. Its only a few years ago.
2 replies →
Yeah, but a lot of the features they're adding or just talking about adding to C# are already in more modern JVM languages like Kotlin / Scala / Ceylon.
Kotlin in particular has quite a lot of the things like people like in C# (no full equivalent to linq though), and some things that are only pencilled in tentatively for the version of C# after next, like full nullability in the type system. And you can convert Java files to Kotlin with a single keypress, and your entire project still compiles, so there's a migration path for Java devs to Kotlin whereas there isn't one from Java to C#, really.
So yes the Java language moves slowly. However Oracle/Sun have barely been trying with the Java language: the bulk of their efforts are going into things like upgrading the standard library, better virtual machines, better support for more types of languages, better performance etc. I think they've pretty much bitten the bullet on letting other companies run with language research and development (like JetBrains)
Yep, the problem with Java is Oracle.
2 replies →
The libraries still leave a lot to be asked for. Not to mention that much of the 'big data' world is all JVM.
So, what exactly is .NET? As a non-corporate Mac user, I'd like to know.
Think of it as like the Java runtime environment, but not terrible.
You have two main pieces: the Common Language Runtime, which is the virtual machine (like the JVM) that executes the code. Then you have the library it comes with, which is fairly large compared to most languages.
edit: Added more context
> Think of it as like the Java runtime environment, but not terrible.
What's terrible about the JVM/JRE?
Many people complain about the language Java (conservative language, programmer culture of complexity...), or the web browser plugin for the JVM (security vulnerabilities, bad startup performance...), but I've generally heard good things about the JVM itself.
3 replies →
One of the interesting things I'm waiting to see is if .NET gets good enough to become the "main" platform for compile to VM languages like Clojure. It can already compile to .NET, but it's significantly less used than the JVM version, despite .NET generally being easier to target.
1 reply →
How does it compare to Swift/Xcode/Mac Native?
5 replies →
It is like the Java runtime, but started afresh with all of Java's learned lessons taken into account (although Java with 7 and 8 in particular is catching up).
Up until now however it has only ran on Windows which was its biggest "downside" Vs. Java which runs on many platforms.
> started afresh with all of Java's learned lessons taken into account
I don't think that's really historically accurate. Java and C# were pretty similar back in 2002. The .NET team was more willing to add complexity and occasionally make breaking changes, like generics in CLR 2.0.
1 reply →
The JVM is much more sophisticated than the CLR. Its GCs and JIT are many, many years ahead of the CLR's.
14 replies →
So, why would a Mac user develop in it, instead of in a Windows (virtual) machine?
How would .NET compare to Apple's native environment?
I guess the whole point is to write cross-platform code, but is the .NET environment that much better than Swift/Xcode?
I mean, Java never really caught on with the Mac user base.
5 replies →
So, what can one develop using this beside "hello, world?"
Can I build a cross platform GUI application? Is there a servlet container? How about an IDE?
Dear Microsoft,
Sincerely, A happy Linux User.
Windows and .NET are different things. I'm fairly confident being able to run .NET on unix machines won't affect you very much so you can stay a happy Linux User. Also, times are changing man, for the better. Embrace it.
The only part which scares me is that people will start making Linux apps using dotnet technologies. >Also, times are changing man, for the better. Embrace it Yup. That is why MS had to realize that *nix is eclipsing it in cloud and to grab extra some extra pennies out of our pockets, they are releasing their products on these platform just to fool us that they care. Actually they don't care us at all.
4 replies →
Too little too late.
I don't think is too little but I'm sure they are late. Too late? Probably not but imagine if they did this 10 years ago, the impact it would have had on Java and many other ecosystems. I bet many of them would have been smaller and MS larger.
Mono has been a thing for so many years, this is kind of a joke to me. Maybe its just that my hatred for Microsoft runs so deep.
The difference is the Microsoft implementation is probably going to be much better quality and better documented. Also, you can't compare Microsoft of ten years ago with the Microsoft of today.
I don't know who they're trying to fool. I don't run MS software in my computers and I never will.
In case you use linux, i have bad news for you. there is by now many code lines from MS.
Strictly speaking the statement is probably still true if lottin doesn't use Hyper-V (and most people don't).
Am I the only one bothered that they didn't include the space between the "OS" and the "X"?
More importantly, this is huge, but as a Linux developer/user I still have no desire to use .NET on my platform. Maybe Mono has scarred my permanently.
Also linux developer/user and I'd crawl over broken glass to have a reliable C# runtime on Linux, it's my absolute favorite language.
Just out of curiosity why? I personally can't imagine why someone would choose it as a favorite. Not because I think it is bad, but because I feel its kind of a kitchen sink language that doesn't really have any clear advantages or features.
1 reply →
I'm really looking forward to F# being really easily used cross-platform. I'm happy for C#, but I'll swoon for F#.
1 reply →
I have been using C# on Mono for a back-end and so far so good.
For code I am editing on MonoDevelop or on VS and then compiled and ran on Linux.
Nothing wrong with Microsoft bringing OSX and Linux to parity with Windows. In fact, there's a lot right with it. I like this new Microsoft, and I've been using Linux for years. Keep up the good work Redmond!
Excited to see that interesting tech like C#, F#, CLR, LINQ and friends is heading our way. If anything it'll give Java a run for its money and that's no bad thing.
I don't think anything is giving the JVM a run for its money. There are millions of man hours that have gone into performance tuning the JVM. The CLR has substantially less. Possibly for mid-size projects the CLR _could_ be an alternative but for the foreseeable future any administrator who is comfortable with Linux is likely also comfortable with the JVM tools necessary to troubleshoot and improve JVM performance.
For a moment I thought Microsoft is releasing a Linux distro with .NET sdk pre-installed.
It would've been great if the author knew what 'distribution' means in this context.
It would've been great if the author knew what 'distribution' means in this context.
"Distribution" is hardly specific to Linux distributions in technical circles. I don't know how you got that impression. The term is synonymous with software bundle, e.g. "Erlang/OTP distribution".
Distribution in this context means a million things. The author used the right word.