Live data from Hacker News

Community-led tooling for F# in Visual Studio

blogs.msdn.com

21–26 of 26 posts

Re: Community-led tooling for F# in Visual Studio

#21

I'm a long-time C# developer, and several years ago tried out F# for a project for which it seemed like a reasonable fit. However, after a month or so, I switched back to C#. I missed the very strong type inference of F# and pattern matching, and C# suddenly seemed very verbose and awkward to me. But C#'s tooling was just head and shoulders ahead of F#, and that made a huge difference in my productivity. But most of…

I'm also a long time C# developer and I would love to try out F#. what types of projects is F# really good for? Any cool open source projects that you'd recommend?

F# exceeds C#'s capabilities in essentially every way. The only time C# does much better is when you need the VS drag n drop GUI tools. Some folks also feel more comfortable doing certain types of very imperative code in C#.

Other than that, sometimes there are problems with libraries that specifically target the C# compiler's exact output. Examples are functions that take an object, then dynamically look at the property names instead of just using a dictionary (F# can do this, just isn't a major focus like in C#). Or poorly written expression tree code that only works with C#'s output. That said, the F# community can often find a fix.

Once you adjust to writing so much less code, it's very hard to enjoy writing C#.

Re: Community-led tooling for F# in Visual Studio

#22
I really, really like the F# language, but the tooling is so bad (compared to C#) that it's a real struggle to continue to justify using it. I admire the effort put in to F# Power Tools development (I've been using it for a long time and is currently on 2.0), but TBH it's like a slow, buggy implementation of a quarter of the C# tooling. Don't get me wrong, the effort is commendable and I know you're not supposed to criticize OS projects unless you're involved yourself, but from a practical day-to-day point of view, it's not working well.

The demos that Tomas Petricek and others in the community do are nice, but in real-world applications of even moderate complexity you almost invariably run into impedance mismatches and annoyances.

I'm currently working on a F# backend for a service with a WebAPI 2 front-end.

- We had to create a C# glue project to be able to publish it as a web app on Azure. This works, but dependency tracking across language barriers in .Net is flaky, so we have to remember to add all Nuget packages to the glue project manually, or we get run time errors in production (not during compilation or locally in test, but in production) as the assemblies are not published.

- Go to definition does not work across language barriers, even when the projects are in the same solution. So you're in F# code, place the cursor on a data tyope defined in a c# file and press F12 to navigate to the source and you get an F# view of the data structure, instead of going to the source.

- The async models are famously different between F# and C#, so you have to marshall back and forth between them, resulting in a lot of `|> Async.StartAsTask` and `Async.AwaitTask` in the F# code, and don't get me started on how to convert an f# async computation to a .Net Task in C#. Pretty, it aint.

- While you can easily create WepAPI controllers in F#, there are basic things that you just can not do. One that bit me recently: having optional query string parameters. Super easy in C#, impossible in F#. Ended up writing a C# controller just for the endpoints that require this, so now I have controllers in the same API surface written in two languages.

Neither of these things are the end of the world, but they do add up, so for me personally it is not a given that I will use F# for my next project.

Re: Community-led tooling for F# in Visual Studio

#23

Earlier quoted context omitted.

I'm also a long time C# developer and I would love to try out F#. what types of projects is F# really good for? Any cool open source projects that you'd recommend?

Been using C# for a while now for shrinkwrapped winforms database application and web site. We started intermixing F# in the last year. I've found F# to be better than C# in everything except a few fringe cases where libraries have done things specific to C#. For example, F# has a better ORM framework than anything in C# with Type Providers.... unless you need to support two databases in the same dll. Then when tryin…

Thanks for this :) A slightly tangential question: at what point does using ORM become painful? When would you recommend going back to sprocs?

Re: Community-led tooling for F# in Visual Studio

#24
post #22

I really, really like the F# language, but the tooling is so bad (compared to C#) that it's a real struggle to continue to justify using it. I admire the effort put in to F# Power Tools development (I've been using it for a long time and is currently on 2.0), but TBH it's like a slow, buggy implementation of a quarter of the C# tooling. Don't get me wrong, the effort is commendable and I know you're not supposed to c…

Yup, it's a bit unfortunate, but that's how it is most of the time.

I found myself using F# for core libraries with clearly defined boundaries between APIs and assemblies - IMO that's where the language shines right now. You can have your core logic contained in a library with a separate, C#-compatible API.

Using F# for WPF, ASP.NET MVC or ASP.NET WebAPI development wasn't quite as stellar experience, also because of the state of the tooling. I'm even wary about type providers, when they work - it's great, when they don't - you're pretty much screwed with no real recourse. In case of relational DB access, most .NET libraries (both full-ORMs and micro-ORMs) are C#-oriented.

Therefore, after including all the annoyances you listed, it's hard to justify anything more than 'handle core libraries in F# with C#-compatible API, do the rest in C# - it's good enough' to the business...

Re: Community-led tooling for F# in Visual Studio

#25
post #22

I really, really like the F# language, but the tooling is so bad (compared to C#) that it's a real struggle to continue to justify using it. I admire the effort put in to F# Power Tools development (I've been using it for a long time and is currently on 2.0), but TBH it's like a slow, buggy implementation of a quarter of the C# tooling. Don't get me wrong, the effort is commendable and I know you're not supposed to c…

> Go to definition does not work across language barriers, even when the projects are in the same solution

I haven't used F#, but I do have a bunch of visual studio experience. I noticed if you do add reference to a dll (even in the same solution), go to definition doesn't work. But if you instead add a reference to a project, it does. So you might be able to just delete and re add your references and get it to work.

Re: Community-led tooling for F# in Visual Studio

#26

Earlier quoted context omitted.

Been using C# for a while now for shrinkwrapped winforms database application and web site. We started intermixing F# in the last year. I've found F# to be better than C# in everything except a few fringe cases where libraries have done things specific to C#. For example, F# has a better ORM framework than anything in C# with Type Providers.... unless you need to support two databases in the same dll. Then when tryin…

Thanks for this :) A slightly tangential question: at what point does using ORM become painful? When would you recommend going back to sprocs?

Like when does it make sense to have a business representation of your data in a language like F#? I'd say as soon as you want the full expressive power and safety of records and discriminated unions. Our domain representation was substantially different from what would easily fit in a relational database, so we start with it from the beginning.

In C#, I think ORM classes have a lot going on, so I prefer to use them only for converting to a data structure.

Post reply on HN