Contributing to the F# Language, Library and Tools
visualfsharp.codeplex.com
visualfsharp.codeplex.com
People internally has been pushing Microsoft the open source way (some evangelists of MS and .Net). They have gotten greater influence into the firm, because of success and a allround positive influence (and Microsoft didn't had any appeal to a great group of developers because of closed source and patents).
The similarity between the new CEO and those people where greater then with Balmer. So it's a logical step into it's evolution.
It doesn't mean that Balmer hold them back at all, they could thrive under Balmer, but perhaps he hasn't had any experience with this business direction or couldn't grasp the concept of it. And as a result, someone else was more fit for the job.
Steve Jobs promised that FaceTime would be an open protocol... never happened.
AirDrop is yet another closed protocol.
XPC is a new protocol for sandboxed processes to communicate with each other, it's basically distributed objects. Again, a secret even though things like CORBA, Java RMI, etc. have been around for years.
But SQL Server Management Console supports obdc, LocalDB (like SQLLite) and SqlServer (MySQL) at once.
But it's on the Microsoft platform though.. I wouldn't know another reason.
It would mean binning the project and starting from scratch privately right? At the risk of being accused of stealing the open contributed code.
However, code that's been distributed under an open license stays that way. So Microsoft could add a commercial license, and even stop making updates under an open license. But if they do that, then there's nothing stopping the community from moving forward with their own fork of the open source version.
If I recall correctly, the Darwin operating system might be a good example of how that sort of dynamic could play out.
(I'm very sure however that they have this worked out. )
Are there any benefits besides the obvious 'write-once, run-anywhere' one?
EDIT: I just want to be clear that I don't have any negative opinion of F#, I am genuinely curious why someone would want to use this on a platform that is not Windows.
1. You have much richer libraries available. There's a
decent amount of stuff in OPAM these days, but that's
dwarfed by what you can grab out of NuGet.
2. You have a great asynchronous/multithreading story. The F# async
workflow makes it trivial to write multithreaded apps in
a similar way to C#'s async/await calls (in fact, F# is
the origin of that design), and it performs very well.
OCaml still doesn't do very well with multithreaded
programs.
You also lose some things, two of which that are most poignant to me: 1. OCaml is faster than F# for single-threaded programs.
This has nothing to do with Mono's maturity or speed as
such, but does have to do with its garbage collector,
which has not historically dealt well with F#'s allocation
patterns. I have not taken time since SGen landed to
revisit that, though, so the situation might be much
better.
2. OCaml can produce tiny self-contained binaries. Mono's
AOT gets you the self-contained easily, but you'll be
looking at relatively large executables.1) Familiarity, if you already know the language, tooling and libraries then you might be better off sticking F# than learning OCaml.
2) Size of community. I'm willing to be proved wrong here, but I find it alot easier to get an F# question, and often more importantly, a question about a library I'm using when I write F# than when I write OCaml.
3) Libraries, Libraries, libraries...
Also the mono runtime is pretty darn good. I agree its not as tuned to handle the small object and lifetimes that functional languages generate but I'm not really running into that limit currently.
With standard library I mean int/float/string/IO/http/xml/async/etc not speaking about stacks of .net (like ui with wpf).
Standard library work really good cross platform with mono, share documentation/stackoverflow with .NET. Mono team fix fast bug when behaviour differ from .NET
Instead of use complex stack like wcf (to create service, partially implemented on mono, webservice ok, soap WS-* less) but bundled with .NET, you can use open source libraries (like nancy, servicestack), change serialization library, etc.
F# use .NET standard library (same library/dll, so a c# answer about StringBuilder class is the same from c# and f#). Can also use every .NET library, bundled with mono/.NET or third party.
Xamarind is a drop in the sea of .NET
+ runtime
+ core = standard library, io/string/async/thread/etc/linq.
+ some bundled stack, like wcf for create service, wpf for ui, mef for plugin, xml serialization, json serialization, asp.net webforms, etc.
Mono try to reimplement all. Runtime and standard library work very well on mono.
bundled stacks can work, work partially or not implemented, depends (on contribution, check mono website). Some stack are really old way to do things, deprecated, usefull only on windows. Also Microsoft for new stacks (like asp.net MVC) try to open source, so mono need to compile source and fix bug/different behaviour, not rewrite
If you use a library who depends on a bundled stack, can or cannot work on mono. Library who depends on open source or standard lib, should work
And obviously you can't use SQL Server or IIS; two components usually used in .Net applications; under unix
[edit]
I suppose if I'm complaining I ought to make some constructive suggestions:
* central page listing my subscribed/voted issues/discussions.
* The only history link on a projects homepage is for the wiki.
It should have a prominent link to the latest changeset
with a date or age.
* Project wide search: issues, code, wiki, discussions
* In fact, remove discussions completely, everything should be an issue.is it just that people don't know that half the things that were open sourced have already been open sourced(like the asp.net stuff) or do we just copy and paste microsoft press releases here?
OR am i missing something crucial that someone can elaborate on please?
https://github.com/fsharp/fsharp/
EDIT2: thanks to the responses, it's about accepting contributions
EDIT: for those that don't know the asp.net developments had a lot of influence from the alt.net movements. it was ms' attempt to keep the c# web developers from moving to other frameworks that let you do similar things much easier.
Quoting from the associated blogpost - http://blogs.msdn.com/b/fsharpteam/archive/2014/04/03/facili...
"Prior to today, contributions were not accepted to the core implementation of the F# language. From today, we are enabling the community to contribute to the F# language, library and tools, and to the Visual F# Tools themselves, while maintaining the integrity and unity of the F# language itself."
Show me where I can directly contribute to random Apple products or where I'd send my upstream Android improvements.
Worse, the Linux kernel is open source, but getting my own changes into the main distribution is probably taking some work and the chance that they won't be accepted is rather good.
No offense, but I'm really unhappy about the continued MS bashing. Yes, right now (due to the BUILD conference) there are a good number of Microsoft related posts on this site. Yes, Microsoft wasn't the corporate citizen most of us wanted them to be in the past. But these news are _nice_ and the slights are really misplaced.
As for apple: bugzilla.webkit.org and llvm.org/bugs - you have to invest real time in these before you can submit patches, but they take take them.
'In Microsoft Fashion' here may be more mean than it needs to be, but I do not think it refers to a general greed or selfishness or what-have-you. It sounds to me like it refers specifically to the sort of open source that major Microsoft products had previously been released under, and that was it. Any hating ascribed to the statement is interpretation.
I agree about Android. I wish it were actually open source -- maybe someday. :)
From [1], posted March 27, 2012 (and note the author!):
You can also now contribute directly to the development of the products by reviewing and sending feedback on code checkins, submitting bugs and helping us verify fixes as they are checked in, suggesting and giving feedback on new features as they are implemented, as well as by submitting code fixes or code contributions of your own. Note that all code submissions will be rigorously reviewed and tested by the ASP.NET MVC Team, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source.
--
Sounds like .. any high profile open source project: Feel free to contribute, be aware that we might reject your work. So two years later, after opening more projects to this model, I don't think 'the sort of open source that major Microsoft products had .. been released under' is correct.
(Obviously there's a fair bit of interpretation going on. As it always is in text, unless you're fairly close to the author perhaps)
1: http://weblogs.asp.net/scottgu/archive/2012/03/27/asp-net-mv...
The problem with Android was never that they didn't have a contribution process. IIRC, they've had that since day 1 (or maybe even before with the pre-device SDK).
The problem is that the success rate for patch submissions is abysmal because Google evaluates patches in the context of the unreleased, unpublished version of Android they're working on internally rather than against the most recent published released that they are typically against.
I used Mono and F# for a project earlier this year and had no particular performance or behaviour issues, although my work was not generally performance-sensitive.
I think F# would benefit a lot from either ML's module system or at least type classes as a simpler case. As it is it can only (directly) do single virtual dispatch (mainstream OO dispatch), which is pretty limiting and makes it more of a C# with different syntax.
In the meantime, honest question: what are modules in OCaml? I tried to read up on it online, but my understanding of the topic is still murky. Regular modules don't really seem that interesting (they look like modules and/or types/classes in F#), parametrized modules seem to be something that is missing in F#.
Second question, do you have that proof of concept code laying somewhere around? I'm just curious how it would look in F#...
Here's my proof-of-concept code. I'll warn you now though -- it looks quite messy, because the goal was to show that functors could be supported on top of the existing .NET type system. If functors are ever added to the F# language, the syntax will be much, much cleaner.
I've been teetering with trying F#, and a proper ML-like module system may tip the balance in its favor for me, I'm sure I'm not alone in that. It just didn't seem like a "real" ML without the module system or at least type classes.
Double dispatch without visitor pattern, using dynamic type.
What I'm really after though is somewhat the opposite, which is static dispatch so that the functions called are known at compile time and can be optimized that way (I do a lot of numerics coding), so avoiding any method resolution lookup and even the vtable jumps and resulting target mispredicts. That's a nice feature of both type classes and ML's module system as usually implemented in functional languages. One really nice thing is they can also typically "dispatch" statically on return types of functions too which makes for some neat patterns as well using type inference.
Anyway thanks for pointing to that. It definitely beats the visitor pattern as is necessary in Java. And I assume it would work for more than two parameters too, which is another advantage over standard visitor.
Xamarin sponsor one dev fulltime (@7sharp9) to work on F# (see activity on github, is not only about Xamarin projects).
This link on .NET is really old (2009)
A few of the top contributing F# devs are there, it's an amazing company. Investors include Joe Lonsdale (founder of Palantir).
They are helping oil companies optimize oil and gas production - not your average startup problem.