LoginSignup
6
4

More than 3 years have passed since last update.

F#とは「無血」で「人民の人民による人民のためのプログラム」の書ける「希少」で「高速」な言語です。

Last updated at Posted at 2020-01-16

F#を知ってますか?

F#は.net系言語です。.netで有名なのはC#ですが、それを知るためには、C,C++,Java,VB,Pythonを知る必要があります。そのうち、手続き型(構造化プログラム)としてはC,VBが有名でオブジェクト指向はJavaやC++やPythonが有名です。また型付けの面ではC,C++,VBは比較的弱い型付け(明示的なキャストが不要)で,JavaやPythonは比較的強い型付けです(明示的なキャストが必要)。C#はオブジェクト指向で比較的強い型付けです。C#はC++という直接OSやハードウェアを操作できるという特性を捨て見やすいコードを作ったことによりC++の生ポインタによる血生臭さを捨てることができましたが、ポインタによる副作用の排除を捨てた(変更できる生の値を副作用という)ことにより生の値を操作することが多くなりました。C++はCよりも副作用の原因となる部分は少ないのでCより大規模開発が向いている(Cよりモジュールが小さいので副作用のない関数を定義しやすい/副作用の温床である#defineを使わなくていいtemplateやinline等,コンストラクタがあるので初期値の不定値という副作用ができづらい)ため最近では組み込み系でも多く使われています。

ex.cpp
#include<iostream>
using namespace std;

void sum (int* eroge,int* eroge2)
{
    (*eroge) +=  (*eroge2);
}

int main(void)
{
    int eroge = 5;
    int eroge2 = 3;
    sum(&eroge, &eroge2);
    cout << eroge; //8
    return NULL;
}

以上のsum関数には副作用はありません。少し回りくどい表現に見えますが(メリットは大きいです)...

さてF#です。

F#は関数型でとても強い型付けです。F#はそのような血生臭さや変数による副作用の最小化、C#の互換性.net固有の機能(LINQ等)が使える非常に魅力的な言語です。なおF#はとても型付けが強いですが型推論も強いという魅力があり、変数、関数の型は変わることが無い安心感と最適化のしやすさもまた魅力的です。コンパイラで実行するとC#(Javaと同じくらい高速)と同速とも言われるので、高速です。オフサイドルールや関数型の特性から、見やすくコーディングできます。以上の特性から、C++と比べて非常に大規模開発に向き(物にもよるが2000人以上/100万行以上だとF#以外難しいと思う)、今後の主流になると思うので取得して損はないです。あと身近な所ではVtuberの開発にF#が使われること多いといわれています(沢山のメディアを使うので.netを使って色々な所からコードを持ってこれるため/並列処理等複雑な処理がしやすいため)。なおオブジェクト指向もサポートされているのでそちらに慣れている人も入りやすいというメリットもあります。なおOCaml/Haskell/C#から影響を受けている言語なのでそれらの知識があるとなお良いです。

よく比較されるF#とScala

どちらもVM(仮想機械)言語(scalaはJVM,F#はdotnetのVM)ですができることが違います。
Web開発やCuiアプリ、業務系アプリケーション開発、国の情報インフラや構文解析等をする場合はscalaが向いています。
なおWindowsアプリ、画像解析、Ai、Vtuberやゲーム(2D、3D、4D全てできる。scalaでは2Dさえほとんど不可能な場合も多い)、大規模開発、VR、AR、MR、音楽を使ったアプリケーションを作る場合はF#が向いています。
GPUをあまり使わない処理はscalaが向いていてGPUをぶん回す処理はF#が向いている模様
なお組み込み/制御系に関いてはCとC++くらいしか選択肢がないので省略します。

6
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4