Skip to content

Latest commit

 

History

History
544 lines (491 loc) · 28.4 KB

langs_template.md

File metadata and controls

544 lines (491 loc) · 28.4 KB

新入生のための「結局俺は䜕のプログラミング蚀語を孊べばいいんだ」

この蚘事では、「これからプログラミングを孊習したいけど䜕をやったらいいかわからないっ」「新しくプログラミング蚀語を孊びたいのでおすすめを知りたいっ」ずいうひずたちのために、各蚀語の特城ず(題材が簡単すぎお各蚀語の味がしない)コヌドサンプルを掲茉しおいたす。改善修正の提案は https://github.com/boletales/which-lang-to-learn で垞に受け付けおいるので、掚し蚀語を垃教したいみなさんはぜひプルリクを投げ぀けおください

{index}

そもそもプログラミング蚀語っおどうやっお孊べばいいのさ

新しいプログラミング蚀語を孊びたいずきには基本的に以䞋のような流れで遞ぶこずになりたす。

  1. 習埗の目的を考える
  • なんでもよい
  • 極論「かっこよさそうだから」でもよい筆者はこれでHaskell䜿いになっおしたった
  • 本圓になにも思い぀かないなら朔くPythonやっずけ
  1. 蚀語を遞ぶ
  • 深く考えなくおよい。どうせ1幎も経たないうちにもう䞀蚀語習埗する矜目になるのだから
  • ずにかく「プログラミング」を孊習したい
    • プログラミングできる友人が䜿っおる蚀語。友人のふりがなは圓然「サポヌトデスク」である
    • Python 簡単だし、教逊の授業で䜿わされるこずがある、ずいう意味で有甚だし、ラむブラリも倚い
    • 「プログラミング教育甚」ず銘打たれおいる蚀語 (Scratch, SmallBasic, HSP, その他たくさん)。有甚かどうかはずもかくずしお孊習には向いおいる
  • シミュレヌションずかやりたい
    • Julia 文法が簡単で、配列や数匏の扱いが埗意で、それなりの速床で動く
    • Rust 速くお玠盎で安党で汎甚。コンパむラは口うるさい。マゞで良い蚀語だけど䞀蚀語目にはおすすめしない
    • Fortran スパコンずかでよく䜿われおいるらしい
  • Webサむトを䜜っお芋せびらかしたい
    • HTML, CSS, JavaScript それぞれ䜿えないずおはなしにならない。(なおHTMLずCSSはプログラミング蚀語ではない。)
    • Ruby なんかいろんなずころで぀かわれおたきがする
    • PHP 将来有望かず蚀われるず銖をかしげたくなるが、簡単
  • 自分甚の䟿利甚ツヌルを぀くっお生掻を豊かにしたい
    • スクリプト蚀語(スクリプトみの匷いや぀+JavaScript)のどれか。事前コンパむルが䞍芁(うれしい)で、曞き捚おに向いた文法をしおいがちなので
    • Haskell, 【心優しいコントリビュヌタヌがここにスクリプト扱いできる蚀語を曞いおくれる】 コンパむラ蚀語だけどスクリプトっぜい䜿い方もできる。曞き味も軜め
    • Rust 他の甚途に䜿い回せるので
    • (初孊者なら)VB.net, (Cっぜい文法の蚀語が既習なら)C# Win民限定だけどGUIを぀くるのが簡単
  • ふ぀うのプログラミングに飜きた
    • Haskell お望み通り副䜜甚すら犁止されおる蚀語を連れおきたぞ。「結局Haskellもふ぀うの実甚プログラミング蚀語なんだな」ずなる頃には飜きも治っおるだろ、たぶん
    • C++ 極めるず黒魔術垫になれる闇の蚀語。AtCoderで緑になるぐらいなら党く黒魔術には觊れないが
    • 難解プログラミング蚀語 お前は実甚もできないようなプログラミング蚀語を習埗しおいったい䜕がしたいんだ
  1. 孊習をする
  • プログラミング自䜓はじめおなら本があったほうが安心
  • そうでなければむンタヌネット䞊の資料だけでなんずかなる
  • 公匏のコミュニティずか公然性の高いコミュニティは有甚。たずえ英語であっおも。
  • 本文の説明欄に知っおるものは茉せずいたので、読め
  1. 1に戻る 逃れられない運呜。どうせこうなる

甚語解説

  • コンパむル
    • プログラムをコンピュヌタで実行できる圢匏に倉換するこず
    • これが遅い蚀語はちょっずむラッずする(Rust, Haskell, おたえらのこずだぞ)
  • コンパむル蚀語・スクリプト蚀語
    • コンパむルが必芁な蚀語・䞍芁な蚀語
    • いたではあたりあおにならない分類
    • 䞀般的にコンパむル蚀語のほうが速いが、実行䞭にコンパむル(JIT)を行うスクリプト蚀語は比范的速い(JuliaずかJSずか)
    • コンパむル蚀語のほうが実行前に゚ラヌを出しおくれるこずが倚くお芪切
  • (デヌタ)型
    • プログラム䞭の倀に䞎えられたタグで、それが䜕なのかを衚すもの
    • 敎数、真停倀の配列、32ビット浮動小数点数の3぀組、文字列をずっお文字列を返す関数、敎数をずっお「文字をずっお文字列を返す関数」を返す関数、など、たあ、いろいろある
    • 型の衚珟力が匷いず「関数を取る関数」「無効な倀を返すかもしれない」「これらのうちいずれかになる」みたいなのが衚せお嬉しい
  • 静的型付け・動的型付け
    • 実行される前に倀や倉数の型が決たっおいる蚀語・そうでない蚀語
    • 動的型付け蚀語は実行するたでわからない゚ラヌがあったり遅かったりしおやや぀らい
    • 型掚論のない静的型付け蚀語は自分で型を明瀺しないずいけないので面倒
    • 逆に、型掚論の匷いや぀はほが自分で型を曞かなくおも動いたりするけどコヌド読むずきに拡匵機胜぀かわないず型わからないの぀らいので曞いおくれ
    • 静的型付けの蚀語は最䜎䞀぀習埗するべき
  • オブゞェクト指向
    • プログラムの曞き方蚭蚈の方針の䞀皮
      • 物事を、固有のデヌタ「フィヌルド」ず固有の機胜「メ゜ッド」を持぀「オブゞェクト」に切り分ける
      • プログラム党䜓を「オブゞェクト」の盞互䜜甚ずしお蚘述する
    • いく぀か流掟がある
      • クラスベヌスかっちりしたオブゞェクトの雛型「クラス」や元になるクラスに新たな機胜を持たせる「継承」、耇数のクラスが共通しお持぀デヌタ機胜を衚す「むンタヌフェヌス」を甚いる
      • プロトタむプベヌスクラスより緩いひな圢「プロトタむプ」や継承に䌌た「プロトタむプチェヌン」を甚いる
    • 䞀時期めっちゃ流行った
  • 手続き型プログラミング
    • プログラムの曞き方の䞀皮
    • プログラムを逐次的な凊理の流れずしお衚すもの
    • 手続きが瞊に䌞びおいくむメヌゞ
    • 埌述の「関数型プログラミング」ずは察になりがち
    • だいたいどんなプログラミング蚀語でもできる
  • 関数型プログラミング
    • プログラムの曞き方の䞀皮
    • プログラムを倧きな関数の適甚ずしお衚すもの
    • 匏が暪に䌞びおいくむメヌゞ実際には行を分割しお曞くけど
    • 関数型プログラミングに察するサポヌトが手薄な蚀語でやろうずするず蟛い
    • 最䜎でも蚀語に以䞋の特城がほしい
      • 関数が第䞀玚オブゞェクト関数の匕数ずしお枡したり倉数に代入したりできるであるこず
      • 匿名の関数を簡単に宣蚀できるこず
      • (静的型付けなら)関数を衚す型が存圚するこず
    • 可胜なら次のような特城もほしい
      • 暙準ラむブラリに「関数を匕数に取る関数」高階関数が倚く含たれおいるこず
      • (静的型付けなら)型システムが匷力であるこず。高階関数の型は埀々にしお耇雑になるので
      • (静的型付けなら)型掚論が匷いこず。耇雑な型を手曞きしたくはないので
      • 「名前付き定数を束瞛しお匏䞭で䜿う」みたいな文が甚意されおいるこず。ロヌカルconstでもいいけどスコヌプが広がっお面倒なので
    • ↑のような特城を倚く持぀、関数型プログラミングでコヌドを曞くこずを目的に蚭蚈されたプログラミング蚀語は「関数型プログラミング蚀語」ず呌ばれる

スクリプトみの匷いや぀

Python

  • 理系倧孊生のリンガフランカ
  • いいずころ
    • ラむブラリが豊富機械孊習ずかスクレむピングずか
    • 䜿っおる人が倚い
    • 文法が簡単
    • PyPy(高速な実装)ずかCython(䞀郚コヌドをCに倉換するツヌル)を䜿えば人道的な実行時間で枈む
  • わるいずころ
    • 環境構築がややこしい
    • ずおもおそい(最速組比20倍以䞊)
    • デバッグがしづらい
    • オフサむドルヌルはク゜
  • 有甚なリ゜ヌス

高速なラむブラリ(numpyずか)を䜿えばPythonらしからぬ速床を出せる {sample:py} 普通のPythonのfor文は遅いが、PyPyで実行するずだいぶマシになる(ただしnumpyは䜿えない) {result:pypy} Cythonで重い郚分をCに倉換しおも速くなる {file:cymain} {sample:cy}

Perl

  • 叀参スクリプト蚀語
  • いいずころ
    • 文字列凊理が埗意
  • わるいずころ
    • おそい {sample:pl}

Ruby

  • 束江圚䜏のプログラマが䜜った蚀語
  • C蚀語的なfor文が存圚しないので、文字列や配列や連想配列などの操䜜はmapやselectなどの各皮メ゜ッドで行う文化
    • gets.split.map(&:to_i).sort.first(3).reduce(&:+)みたいにメ゜ッドを぀なげお曞いおいくの、慣れるず爜快
  • いいずころ
    • 曞きやすい(個人の感想)
    • 暙準ラむブラリが充実しおいる
    • サヌドパヌティヌのラむブラリも豊富
    • CLIツヌルやWebサヌビスのサヌバサむド(バック゚ンド)を曞くのに向いおる
    • Ruby on RailsずいうWebアプリ甚の超有名フレヌムワヌクがある(いろいろ悪く蚀われがちだが、なんだかんだ匷力)
    • パッケヌゞ管理ツヌル(Bundler)がたずも
    • 環境構築は特に難しくない
  • わるいずころ
    • ずおもおそい(スクリプト蚀語の䞭では普通くらいだが、それでも)
    • 正盎、デヌタサむ゚ンスや機械孊習呚りは匱い(おずなしくPythonずか䜿った方がいい)
    • 型アノテヌションや静的な型チェックは存圚するが、いろいろ未成熟
  • どうしおも速床が欲しい人、あるいは静的型付けの安心感が欲しいRuby曞きはCrystalを怜蚎しおみよう

䞀応、Pythonにおけるnumpyに察応するnumoずいうラむブラリが存圚するため、numpyで高速化できる凊理ならたあ、なんずかなる(numoはAtCoderでも䜿える)。ナヌザが少なすぎおググっおも情報出ないし、開発も掻発ずはずおも蚀えない状況だが  。 {sample:rb} Rubyの高速化テクはいろいろあるが、ずりあえず各皮メ゜ッドによるルヌプをwhileに倉換するずかなり速くなる(ブロックはオヌバヌヘッドが倧きい)。もっずも、while文を䜿うず「これRubyでやる意味ある?」ずいう感じになるし、それなら他の蚀語を䜿った方がいい(ネむティブ拡匵を曞くずいう遞択肢は䞀応ある)。䜕床も蚀うがRubyistのサブ蚀語ずしおCrystalマゞでオススメ。

Lua

  • 高速なスクリプト蚀語
  • いいずころ
    • ↑3぀ず比べるずめっちゃ速い
    • LuaJITを䜿うずもっず速い、コンパむル蚀語䞋䜍勢ず同等レベル
    • いく぀かのゲヌムでプレむダヌがプログラミングに䜿える蚀語ずしお採甚されおいるらしい {sample:lua} {result:luajit}

Julia

  • FortranずmatlabずPythonの埌釜をいっぺんに狙おうずしおいる蚀語
  • いいずころ
    • スクリプト蚀語の䞭では圧倒的に速い、コンパむル蚀語䞊䜍勢䞊に速い
    • 文法がシンプル
    • PyCallでpythonのラむブラリが䜿える
    • 数匏・行列が扱いやすい
    • numpyやmatplotlibがpythonよりだいぶ䜿いやすい
    • PythonずCずMATLABの良いずころどり的存圚 by あなばす
    • Jupyter notebookで䜿える
    • 䞊列化に匷い
  • わるいずころ
    • いたのずころ入門向けの良曞はあたりない
  • 特城
    • 1-indexed、瞊行列基本など癖がある数匏をそのたた䜿えるから数孊屋ずかシミュレヌション屋には䟿利
    • クラスはないPythonのサンプルコヌドを脳死で移怍はできない構造䜓で䌌たようなものは䜜れる
    • ちゃんず考えおコヌディングしないずいたいち速床が出ない
  • 有甚なリ゜ヌス
    • 公匏wiki

コヌド党䜓を関数で包たないず死ぬほど遅くなるので泚意䞀敗 {sample:jl}

コンパむルしお䜿うや぀

C

  • 組み蟌みやさんの必携、恐怖の自己責任系プログラミング蚀語
  • いいずころ
    • 最速組。ずにかく速い
    • メモリを盎接扱える
    • マむコンみたいな制限された環境䞋でも動く
    • 勉匷にはなる
  • わるいずころ
    • メモリを盎接扱わされる
    • 初孊者には難しい
    • 䜕もかも自己責任 {sample:c}

C++

  • 自分のこずを最新鋭だず思っおいる叀参蚀語
  • いいずころ
    • 最速組。ずにかく速い2
    • メモリを盎接扱える2
    • 珟代的な機胜がたくさん远加されおいる
  • わるいずころ
    • 䜕もかも自己責任
    • 初孊者には難しい
  • Cにない型がいっぱいある

コンパむル時に最適化フラグを枡さないず10倍以䞊遅くなっおしたった(䞀敗) {sample:cpp}

Rust

  • マルチパラダむム蚀語界の新星 新時代の勝者  
  • いいずころ
    • 最速組。ずにかく速い3
    • メモリを盎接扱えるが、盎接扱わずに枈むココ重芁
    • メモリ安党
    • 型の力でより安党なコヌドが曞ける
    • 暙準ラむブラリに文句がない
    • ゚ラヌハンドリングする人にやさしい型レベルでハンドルする
    • 他の蚀語から倧量に有甚な機胜を茞入しおいる
    • コンパむラが䞖話を焌いおくれる
    • マクロが別蚀語を実装できるレベルで自由床高い
    • パッケヌゞマネヌゞャが優秀
    • 䞊列化に匷い
    • コミュニティの民床が高い
  • わるいずころ
    • 難易床が、高い。さすがに䞀蚀語目にはおすすめできない
    • コンパむラが口うるさい
    • ゚ラヌハンドリングしない人に厳しい
    • ビルドが遅い特に初回
  • 有甚なリ゜ヌス

sieveにbit挔算を甚いたら非垞に高速になった {sample:rs-b}

Crystal

  • いいずころ
    • 最速組。ずにかく速い4
    • Rubyの曞きやすさずCの速床が合わさり完璧に芋える
    • 静的型付け、型掚論が匷い(ずいうか明瀺的に型を曞く必芁がほがない)
    • Rubyのいいずころはだいたい受け継いでいる
  • わるいずころ
    • ビルドが遅い
    • ラむブラリがただただ少ない
  • Ruby颚の蚀語ではあるが、文法は倚少違うし、暙準ラむブラリにもそれなりに差異があるので泚意 {sample:cr}

Assembly

  • これどうやっお曞くんですか
  • いいずころ
    • 最速組曞く人間が、コンパむラのオプティマむザより賢ければ
    • CPU の気持ちになれる
  • わるいずころ
    • 生で曞くのは苊行
    • デバッグはアホほど倧倉
    • 生で曞くのは苊行
  • アドバむス
    • gcc -S main.c をすればアセンブリが芋れるので、そこから修正するのがおすすめ。
    • Compiler Explorerを䜿うのも良い。
    • (C/C++などの) コンパむラはたたにいい感じのコヌドを吐いおくれないので、コンパむルされたものを芋お、適宜手動でアセンブリ最適化するのが良い。 {sample:asm}

go

  • 曞きやすい高速コンパむル蚀語
  • いいずころ
    • コンパむルが高速
    • 耇雑な䞊列凊理・非同期凊理を蚘述しやすい。(ブロックチェヌンの通信ノヌドの実装にも䜿われおいる。)
    • (コンパむル蚀語の割には)文法が比范的単玔で習埗しやすい。
  • わるいずころ
    • 高床な機胜が少ない。(䟋:継承、try catchのような䟋倖凊理、Genericsは最近やっず導入)
    • ガベヌゞコレクションに䟝存しおいる。(これがデメリットかは諞説あり)
    • wasmに倉換するこずはできるが、rustなどに比べサむズが倧きくなる。 {sample:go}

クラスベヌスオブゞェクト指向䞀味

Java

  • 30億のデバむスで動いおいるらしい
  • いいずころ
    • コヌドの芏暡が倧きくなるこずに倧しお耐性が匷い
  • わるいずころ
    • コヌドが冗長
  • 特城
    • 業務で䜿われがち
    • ザ・クラスベヌスオブゞェクト指向 {sample:java}

C#

  • MS補のJavaのようななにか
  • いいずころ
    • コヌドの芏暡が倧きくなるこずに倧しお耐性が匷い2
    • Win向けのGUIアプリを曞くのが簡単
    • Unityで䜿うらしい
  • わるいずころ
    • コヌドが冗長2(Javaよりややマシかも)
  • 有甚なリ゜ヌス

VB.net

  • C#(VisualBasic颚味)
  • いいずころ
    • 文法が初孊者にもわかりやすい(Basicの血を匕いおいるだけある)
    • C#ずの盞互運甚が容易。めっちゃ容易。
    • Win向けのGUIアプリを曞くのが簡単2
    • コヌドの芏暡が倧きくなるこずに倧しお耐性が匷い3
    • C#
  • わるいずころ
    • Windows以倖での䜿いみちがあたりない
    • 構文が冗長なので補完がないず぀らい(Visual Studioで曞く分には補完がはちゃめちゃに匷いので気にならない)
    • 侍遇
    • C#
  • 有甚なリ゜ヌス

関数型プログラミングに察するサポヌトが匷いや぀

OCaml

  • 実甚非玔粋関数型蚀語
  • いいずころ
    • 速い(ず聞いおいるのでだれか最適化しおくれ)
    • 倉数の再代入が犁止されおいる同名倉数の再宣蚀で芋た目再代入っぜいこずはできる
    • 型の力が匷い、型掚論がめっちゃ匷い

速いはずの蚀語でもコヌドがよろしくないず速床もよろしくなくなるのはよくある話である {sample:ocaml}

F#

  • MS補のF#のようななにか
  • いいずころ
    • .NET䞀族唯䞀の関数型枠
    • ほかの.NET族ずの連携ができる
  • 有甚なリ゜ヌス

改善求む2 {sample:fs}

Scala

  • Java族の関数型蚀語
  • いいずころ
    • Javaずの連携ができる

改善求む3 {sample:scala}

Haskell

  • 䞭二病患者向けぞそ曲がり実甚†玔粋†関数型蚀語
  • いいずころ
    • 副䜜甚が垞に明瀺され、现かい制埡ができる
    • パッケヌゞマネヌゞャが優秀
    • 機械語から遠そうなわりに非最速組ず同皋床の速床で動く
    • 型の力が匷い、型掚論がめっちゃ匷い2
    • 自己拡匵性が高い
    • 孊べば孊ぶほど生産性が䞊がる
    • すくなくずも䞖間の噂より実甚性は高い
    • 蚀語もツヌルも進化が速い
    • 䞊列化に匷い
  • わるいずころ
    • 他の蚀語ず蚭蚈思想がだいぶ違うので、ハヌドルは高い
    • 蚀語もツヌルも進化が速すぎる
    • 名前だけ物々しい抂念が倚すぎる
    • 生産性を䞊げようずするず底なしの勉匷を匷いられる
    • オフサむドルヌルはク゜
    • パフォヌマンスのチュヌニングには知識ず努力が必芁
    • 過去のしがらみが倚いツヌルずラむブラリず蚀語拡匵の力で殎っおなんずかする
    • ビルドが遅い特に初回
  • 有甚なリ゜ヌス
    • 日本Haskellナヌザヌグルヌプ: https://haskell.jp/ ず、そこのslack初心者にやさしい
    • GHCup: https://www.haskell.org/ghcup/ バヌゞョン管理ツヌル。開発に必芁な゜フト䞀匏を簡単に導入できたす
    • Hoogle: https://hoogle.haskell.org/ 型を入力するずそれに圓おはたる関数を怜玢できたす。死ぬほど䟿利。

最適化するず十分速いが、知識ず詊行錯誀が必芁 {sample:hs}

Haskellらしく玔粋なデヌタ構造だけで曞いおも動きはするが、遅かった {file:hs-naive}

Lisp

  • 叀代の関数型蚀語
  • アヌティファクト
  • 方蚀が倚い
  • きもいモンスタヌ
  • かっこかっこかっこかっこ

Web屋さん向け

javascript

  • もうぜんぶこれでいいや
  • いいずころ
    • GUI䜜りたくなったらHTML+CSS+JSでやるのが䞀番かんたんかもしれない
    • ブラりザで䜿える非垞に重芁ずいうより、これを陀くずWebAssembry以倖の遞択肢が存圚しない
    • サヌバヌサむドでもロヌカルでも䜿える
    • "スクリプト蚀語にしおは"異垞に速い(非最速組ず同栌)
    • パッケヌゞマネヌゞャが優秀
  • わるいずころ
    • 型がない。型アノテヌションすらない
    • 過去のしがらみが倚いマシになり぀぀ある
    • コミュニティの民床がカス
    • 愛すべきカス
  • 有甚なリ゜ヌス

TypedArray䜿ったら最速組ず匵り合える速さが出た 普通の配列を䜿ったらメモリ確保ができなくなっお萜ちた {sample:js}

PHP

  • Web屋さん専甚のかんたんサヌバヌサむド蚀語
  • perl䌌
  • いいずころ
    • 動的サむトを䜜りたいなら䞀番かんたん
    • HTMLを埋め蟌むだけなのでクラむアントサむドの知識しかなくおもずっ぀きやすい
    • ホスティングしおくれるサヌビスが倚い(スタヌサヌバヌずか゚ックスサヌバヌずか)
  • わるいずころ
    • カオス {sample:php}

WebAssembly

  • 盎接は曞かない
  • 他の蚀語(RustずかC++ずか)からWASMにコンパむルしおブラりザで䜿える
  • 䞀応盎接曞けるが、その名の通りAssembly玚にわけわからない

Typescript

  • AltJS(JSにコンパむルされる代替蚀語)のデファクトスタンダヌド、型のあるJS
  • 特城
    • 構造的郚分型
      • クラスの継承ベヌスではなく珟にプロパティの型があっおいるかで代入可胜性を刀断する
    • リテラル型'world'だけが代入できる型のようながある
    • 非垞に耇雑な型定矩が可胜
  • いいずころ
    • 型があるしかも匷いずおも重芁
    • 型掚論匷め型を手曞きするのは基本的に関数の匕数だけ
    • Microsoft補でサポヌト手厚い
    • コミュニティの民床がJavaScriptより幟分良い
  • わるいずころ
    • 型はあくたで「食り」でしかないランタむムでは無芖される
    • けしからんや぀が䜿うず型の恩恵を党く受けられないany滅ぶべし慈悲はない
  • 豆知識・備考
    • 型システムだけでチュヌリング完党であるbrainfxxkを実装できる
    • いたどきのJavaScriptパッケヌゞは必ずず蚀っおいいほどTypeScriptで曞かれおいる
      • 型がないずパッケヌゞずしお䜿いにくいため
    • 実はVSCodeでJavaScriptを曞くずきはコヌド補完の恩恵をTypeScriptから受けおいる
    • 型掚論のおかげでコヌドがJavaScriptずほが倉わらないのでサンプルなし
    • 曞いおる最䞭の型チェック・コヌド補完が死ぬほど速い蚀語党䜓がその意図のもず蚭蚈されおいる

coffeescript

  • AltJSその2
  • Rubyのようななにか

purescript

  • AltJSその3
  • AltJSの異端児、Haskellの生き写し

scala.js

  • AltJSその4
  • scalaがjsにコンパむルされる

GHCjs

  • AltJSその5
  • Haskellがjsにコンパむルされる

js_of_ocaml

  • AltJSその6
  • OCamlがjsにコンパむルされる

統蚈ずかシミュレヌションに䜿うや぀

R

  • いいずころ
    • 統蚈にめっちゃ匷い。デファクトスタンダヌド。どうせやらされる文系含む
    • 怜定がコマンド䞀発でできる
    • 図が綺麗で现かく指定できる
    • デヌタフレヌムが䜿いやすい
    • 機械孊習のラむブラリが倚い
    • パッケヌゞマネヌゞャが優秀
  • わるいずころ
    • 耇雑なこずをするず遅い
    • メ゜ッドの呌び出し方がmethod(target)
    • 1-indexed, 瞊基本行列
    • カオス
  • 有甚なリ゜ヌス

MATLAB

  • いいずころ
    • 数匏ずかシミュレヌションが匷い
    • グラフィクスが匷い
  • わるいずころ
    • 有料(東倧生は倧孊がアカりントくれるので䜿える)
    • そんなに速くはない

Fortran

  • いいずころ
    • 数倀蚈算に匷い。めっちゃ匷い。
    • 速い
    • 䞊列化がすごく簡単プログラムに2行付け足しおコンパむラに枡すフラグを䞀個増やすだけ
    • スパコンでよく䜿われおいる
  • わるいずころ
    • 文法が独特
    • さすがに぀くりが叀くお぀らい

なにを間違えたのか倧しお速くならなかった {sample:f95}

実行環境に぀いお

サンプルコヌドの実行時間は以䞋の環境で蚈枬したした

  • CPU: Ryzen 7 PRO 4750G
  • メモリ: 32GB
  • OS: Manjaro Linux

速床ランキングあんたり参考にならない

おこずわり今回題材ずした「玠数の蚈算」は比范的単玔なコヌドなので、䞀郚蚀語を陀いお実際以䞊に䌌たりよったりな結果になっおいたす。どちらかずいえば「どの蚀語が速いか」より「どのサンプルがうたく曞けおいるか」のほうがだいぶ圱響が倧きそうです。それぞれの蚀語に぀いお、速床を倧きく改善するようなラむブラリや機胜を甚いたものはカッコ曞きで付蚘したした。

{ranking}

貢献者䞀芧

  • メタリックはんぺん
    • 説明: C, C++, Rust, Python, Haskell, Fortran, JS, PHP, VB.net, C#, Java, OCaml, Scala, perl, php, lua, go
    • サンプル: C, C++, Rust, Python, Haskell, Fortran, JS, R, VB.net, C#, F#, OCaml, Java, Julia, Scala, perl, php, lua, go
    • 䞀蚀: Haskellはいい蚀語ですよ、やれお前も蓮沌に萜ちろ
  • あなばす
    • 説明: Julia, Lisp, R, MATLAB, Fortran
    • サンプル: Julia
    • 䞀蚀: Julia最高Juliaしか勝たん
  • 綿谷 雫
    • サンプル: Fortran
    • 䞀蚀: 叀兞を孊ぶこずは物事の根幹に觊れるこずでありそこから掟生しおできたものの理解が深たりたす叀兞語をやりたしょう
  • TumoiYorozu
    • サンプル: Assembly, C(bit)
    • 䞀蚀: 生のアセンブリ、もう曞かない
  • ふぁがん
    • 説明: Ruby, Crystal
    • サンプル: Ruby, Crystal
    • 䞀蚀: なんだかんだRubyはいい蚀語だず思う。コヌドゎルフにも向いおるし。
  • 🌱🌿☘🍀
    • 説明: Rust, TypeScript(, R)
    • サンプル: Rust (bit operation)
    • 䞀蚀: Rustの真䟡はWebサヌバヌなどのシビアな甚途で初めお発揮される
  • femshima(Nanigashi)
    • サンプル: C
    • 䞀蚀: い぀か組み蟌みのasmを曞けるようになりたい(願望)
  • そらすえ
    • 説明: Go