7 ms·
As a .NET developer I don't see any reason to use F# professionally. C#/CPP are tools just like a hammer, F# is a different hammer, it doesn't seem to offer adv
by catmanjan 6y ago
As a .NET developer I don't see any reason to use F# professionally. C#/CPP are tools just like a hammer, F# is a different hammer, it doesn't seem to offer advantages in my field other than being different...
- xupybd 6y agoThe functional hammer can be a little easier to reason about. So you can understand your application a little more.
- dleslie 6y agoIt's possible to write functional C# code, as well.
- pharmakom 6y agoIt’s possible but it’s just not the same.
- xupybd 6y agoYeah you can. I find it a little more clunky. Many of the things I prefer are just syntactic sugar. But if I'm honest I really like syntactic sugar. On top of that I find functional first languages are great for forcing you to learn functional styles that you can later user in languages like C#. C# is a brilliant language and I wouldn't knock it. I'd use that as a first option at work but on a hobby project I'm going to play with F#.
- paavohtl 6y agoEhh, not really. It depends on how you define functional programming. C# supports first class functions, tuples, some form of pattern matching and LINQ extensions support basic FP collection operations like map (Select), filter (Where) and fold (Aggregate). But I think that's just scratching the surface compared to a "real" FP language: - F# has function composition operators - F# functions are curried and support automatic partial application - F# variables and data structures are immutable by default - F# has powerful global HM type inference - F# uses option & result monads over exceptions and null - F# has algebraic data types with exhaustiveness checking These capabilities make writing code in F# a very different experience from C#. Some of these can be added to C# as features, but many things are fundamental parts of language design that are hard to change afterwards.
- dleslie 6y agoThat stinks of microallocations from enormous stacks of closures, boxing and similar.
- freeone3000 6y agoIt allows you to envision your application as a series of data transforms, instead of a list of steps. This allows much more proximal abstractions for tasks involving data manipulation.
- dleslie 6y agoYou can treat your application as a series of data transforms with C#, as well.
- freeone3000 6y agoIt's.. not as nice. LINQ gets halfway, but, you end up getting back to procedural modeling soon. With sufficient discipline and structure, and liberal use of LINQ and lambdas, you can mostly get there, but it lacks the purity of pure functional.
- dleslie 6y agoAnd in the process you've incurred a devastating amount of micro-allocations. When using Unity with an older version that doesn't have incremental GC this is a serious problem. Does F# avoid that?
- freeone3000 6y agoOh, god no. Performance even on fairly trivial number crunching tasks is half of C#, nevermind anything where GC is important or you'd consider writing it native. It's not a performant language, that's not the point.
- moonchild 6y agoThat's not a fundamental limitation, though. Implementations of SML (f# is effectively an ML implementation), OCaml, and Haskell are all quite performant.
- sfg 6y agohttps://ericsink.com/entries/fsharp_chasm.html https://ericsink.com/entries/fsharp_chasm.html