You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<pclass="lead">F# is a mature, open source, cross-platform, functional-first programming language. It empowers users and organizations to tackle complex computing problems with simple, maintainable and robust code.</p>
<pclass="featured">F# runs on Linux, Mac OS X, Android, iOS, Windows, GPUs, and browsers. It is free to use and is open source under an OSI-approved license. </p>
262
+
<pclass="featured">Free to use, cross-platform and open source.</p>
269
263
</div>
270
264
<divclass="col-md-4">
271
-
<pclass="featured">F# is used in a wide range of application areas and is supported by both an active open community and industry-leading companies providing professional tools.</p>
265
+
<pclass="featured">The <b>succinctness</b> of Python with the <b>performance</b>>and <b>robustness</b> of C# and Java.</p>
272
266
</div>
273
267
<divclass="col-md-4">
274
-
<pclass="featured">The mission of the F# Software Foundation is to promote and advance the F# programming language, including a diverse and international community of F# programmers.</p>
268
+
<pclass="featured">Professional tooling from major companies.</p>
<div class="tab-pane fade in active" id="concise">
298
-
<div class="row">
299
-
<div class="col-md-6">
300
-
<p>F# is not cluttered up with coding "noise" such as curly brackets, semicolons and so on.</p>
301
-
</div>
302
-
<div class="col-md-6">
303
-
<pre><code class="fsharp">// one-liners
304
-
[1..100] |> List.sum |> printfn "sum=%d"
305
-
306
-
// no curly braces, semicolons or parentheses
307
-
let square x = x * x
308
-
let sq = square 42
309
-
310
-
// simple types in one line
311
-
type Person = {First:string; Last:string}
312
-
313
-
// complex types in a few lines
314
-
type Employee =
315
-
| Worker of Person
316
-
| Manager of Employee list
317
-
318
-
// type inference
319
-
let jdoe = {First="John";Last="Doe"}
320
-
let worker = Worker jdoe</code></pre>
321
-
</div>
322
-
</div>
323
-
</div>
324
-
<div class="tab-pane fade" id="correct">
325
-
<div class="row">
326
-
<div class="col-md-6">
327
-
<p>F# has a powerful type system which prevents many common errors such as null reference exceptions.</p>
328
-
</div>
329
-
<div class="col-md-6">
330
-
<pre><code class="fsharp">// strict type checking
331
-
printfn "print string %s" 123 //compile error
332
-
333
-
// all values immutable by default
334
-
person1.First <- "new name" //assignment error
335
-
336
-
// never have to check for nulls
337
-
let makeNewString str =
338
-
//str can be concatted safely
339
-
let newString = str + " new!"
340
-
newString
341
-
342
-
// embed business logic into types
343
-
emptyShoppingCart.remove // compile error!
344
-
345
-
// units of measure
346
-
let distance = 10<m> + 10<ft> // error!</code></pre>
347
-
</div>
348
-
</div>
349
-
</div>
350
-
<div class="tab-pane fade" id="concurrent">
351
-
<div class="row">
352
-
<div class="col-md-6">
353
-
<p>F# has a number of built-in libraries to help when more than one thing at a time is happening. Asynchronous programming is very easy, as is parallelism. F# also has a built-in actor model, and excellent support for event handling and functional reactive programming.</p>
354
-
</div>
355
-
<div class="col-md-6">
356
-
<pre><code class="fsharp">// easy async logic with "async" keyword
0 commit comments