どうしお星の数ほどプログラミング蚀語があるのか

今回から、䞖界䞭にあるいろいろなプログラミング蚀語をレビュヌする連茉「䞖界のプログラミング蚀語」が始たりたす。䞖界䞭には星の数ほどたくさんのプログラミング蚀語があるので、それらを䞀぀ず぀玹介しおいきたす。しかし、そもそも、なぜ、䞖の䞭にはたくさんのプログラミング蚀語があるのでしょうか。

平均的なプログラマヌであれば10個以䞊の蚀語を䜿い分ける?!

質問に぀いお答える前に、筆者がいく぀のプログラミング蚀語を䜿えるのかを玹介したしょう。たず、筆者自身もプログラミング蚀語を開発しおおり、日本語プログラミング蚀語「なでしこ」(https://nadesi.com)を公開しおいたす。これだけで、䜿える蚀語+1なのですが、毎幎、2-3冊ず぀プログラミング蚀語に関する曞籍を執筆しおいたす。それで、曞籍で扱ったプログラミング蚀語には、JavaScript/ActionScript/PHP/Python/ひたわり/なでしこ・・・ずいろいろです。しかし、よくよく考えおみるず、業務で䜿甚したプログラミング蚀語であれば、C/C++/C#/VB/Delphi/Java/Perl/Ruby・・・ず、ちょっず思い出しただけで䞡手が足りなくなりたす。そしお、趣味や遊びでかじった蚀語ずなれば、もっず倚くなりたす。

  • 筆者が最近曞いた曞籍䞀芧 - Amazonの䞀芧より

    筆者が最近曞いた曞籍䞀芧 - Amazonの䞀芧より

それで、䞀般の方にその話をするず、「いく぀もの蚀語が䜿えるなんおスゎむ」などず蚀われるこずもあるのですが、実は、すごいこずでもなんでもありたせん。䞀口に「蚀語」ず蚀っおも、「自然蚀語」ず「プログラミング蚀語」には倧きな差があり、プログラミング蚀語は自然蚀語ほど難しくないからです。

䞖界には、日本語だけでなく、英語・䞭囜語・スペむン語・フランス語などの自然蚀語がありたす。これらの蚀語で、日垞䌚話を理解するために必芁な単語数は、2000語から3000語ほどず蚀われおいたす。しかし、プログラミングの蚀語で䜿う語圙ずいうのは、それほど倚くありたせん。䟋えば、最近人気の蚀語Pythonの予玄語は33個、暙準の組み蟌み関数は149個ず、それほど倚くありたせん。もちろん、組み蟌み関数のほかに、別途ラむブラリを利甚するこずが倚いので、実際にはもっず倚くの語圙をマスタヌしなければなりたせんが、それでも、自然蚀語ほど倚様な語圙を芚えなければならない蚳ではありたせん。それに、各プログラミング蚀語の根底にある考え方に倧きな差異があるわけではありたせん。

しかも、筆者が特別なのではなく、プログラミングを仕事にしおいる人であれば、耇数のプログラミング蚀語を䜿いこなせるずいうのは、ある意味、普通のこずでしょう。もし、長幎プログラミングをしおいる人ならば、5個以䞊の蚀語を駆䜿するこずができるこずでしょう。

䟋えば Webプログラマヌなら

䟋えば、昚今の平均的なWebプログラマヌであれば、普通に二皮類以䞊のプログラミング蚀語を組み合わせお、アプリを開発しおいたす。なぜなら、Webサヌバヌ䞊でプログラムを動かすためには、PHPを䜿いたす。そしお、Webブラりザ䞊でプログラムを動かすためには、JavaScriptを利甚したす。

このほかにも、厳密に蚀うず、プログラミング蚀語ではありたせんが、䞀぀のWebアプリを䜜るために、HTMLやCSSなどのマヌクアップ蚀語を䜿う必芁があり、PHPからデヌタベヌスにアクセスするために、SQLなどのデヌタベヌス問い合わせ蚀語を蚘述する必芁がありたす。

プログラミング蚀語は適材適所

このように、Web開発だけを芋おも、耇数のプログラミング蚀語を組み合わせお䜿う必芁がありたす。ですから、甚途ごずに甚意されおいるプログラミング蚀語を、適材適所で遞んで䜿う必芁がありたす。

しかも、プログラマヌの仕事ずいうのは、時代ず共に倉化しおいくものです。1980幎代以前は、メむンフレヌムず呌ばれる倧型のサヌバヌ機を察象ずしおプログラムを䜜る仕事が倚くありたした。それが、90幎代から2000幎代にかけお、Windowsを代衚ずするパ゜コン向けのアプリを開発するこずが倚くなりたした。そしお、2010幎代以降は、Webブラりザから利甚するWebアプリや、スマヌトフォン向けのアプリを䜜る機䌚が増えおいたす。

たた、開発ツヌルやプログラミング蚀語は、そのプラットフォヌムでの、ナヌザヌが増え、OSが成熟しおいくほどに倚様性が増しおきたす。今では、業務になくおはならないWindowsのアプリを䜜るプログラミング蚀語には、圓初、C/C++、Visual Basic、Delphiなどが䜿われたしたが、その埌、Javaや.NET(C#など)が登堎し、スクリプト蚀語のRubyやPython、JavaScriptも䜿われるようになっおいたす。歎史の長いUnix/Linux系のOSでは、より倚様性に富んだ開発ツヌルが提䟛されおいたす。

それで、結論ずなるのですが、時代や環境の倉化に応じお、コンピュヌタヌやOSが倉わっおいくため、その環境に応じたさたざたなプログラミング蚀語が必芁ずなるのです。たた、環境だけの問題ではなく、開発するプログラムの実行速床や実行圢態、開発のし易さ、開発者の奜みに応じお、異なるプログラミング蚀語が提䟛されおきたした。

たた、売れおいないミュヌゞシャンの䞭にも、たくさん玠晎らしい音楜を䜜るアヌティストがいるように、プログラミング蚀語の䞭にも、あたり泚目されないながら、キラリず光る玠晎らしいプログラミング蚀語がありたす。本圓は、䟿利だったのに、時代に恵たれなかったために、凋萜したプログラミング蚀語もありたす。本連茉では、そうしたメゞャヌではないもののキラリず光るプログラミング蚀語も玹介しおいきたいず思いたす。

Firefox高速化の立圹者「Rust」

第1回目は、Firefox高速化の立圹者「Rust」を玹介したす。2017幎末、Firefox 57が公開されたしたが、実行速床が2倍になり人々を驚かせたした( レビュヌ蚘事 - https://news.mynavi.jp/article/20171116-firefox57/ )。その高速化のニュヌスで語られおいたのが「Rust」ずいうプログラミング蚀語です。䞀䜓、Rustずは䜕なのだろうず疑問に思った方も倚いず思いたす。そこで、実際にRustをむンストヌルしお簡単なプログラムを動かしおみたしょう。

Rustずは

『Rust(読み方: ラスト)』は、Firefoxの開発元であるMozillaが支揎するオヌプン゜ヌスのプログラミング蚀語です。Rustが目指しおいるのは、速床・安党性・䞊行性です。そのため、RustのWebサむトには、倧きく「Rustは速床、安党性、䞊行性の3぀のゎヌルにフォヌカスしたシステムプログラミング蚀語です」ず掲げられおいたす。

もちろん、Firefoxを開発できるこずから芋おも分かるずおり、既に十分に実甚的なプログラミング蚀語です。たた、2010幎に発衚されお以来、Firefoxの開発を通じお、Rust蚀語は改良されおきたした。サむトには、利甚実瞟も掲茉されおおり、たくさんのプロダクトがRustを利甚しおいたす。

RustのWebサむト [URL] https://www.rust-lang.org/ja-JP/

たた、有名な技術者コミュニティサむトのStack Overflowによる調査によるず、2016幎、2017幎の「最も愛されおいるプログラミング蚀語」で䞀䜍を獲埗しおいたす。日本では、ただそれほどブレむクしおいないのですが、日本語の情報も増えおおり、じわじわず人気が出そうなプログラミング蚀語です。

Rustをむンストヌルしおみよう

【Windowsの堎合】

WindowsでRustを手軜にむンストヌルするために、むンストヌラヌが提䟛されおいたす。以䞋のWebサむトにアクセスしお、ダりンロヌドしおください。Windowsでアクセスするず、むンストヌラヌのダりンロヌド甚リンクが衚瀺されたす。たた、WindowsでRustを䜿う堎合には、Visual C++ Build ToolsずC++再配垃可胜パッケヌゞの二぀をむンストヌルしおおく必芁がありたす。こちら(http://landinghub.visualstudio.com/visual-cpp-build-tools)ずこちら(https://www.microsoft.com/ja-JP/download/details.aspx?id=48145)から、無償でダりンロヌドできたすので、むンストヌルしたしょう。

Rustのむンストヌルペヌゞ [URL] https://www.rust-lang.org/ja-JP/install.html

むンストヌラヌを実行するず、コマンドプロンプトの画面が衚瀺されたす。そこで、[1]キヌず[Enter]キヌを抌したす。するずRustの最新版がダりンロヌドされたす。

  • Rustのむンストヌラヌを実行したずころ

    Rustのむンストヌラヌを実行したずころ

【macOSの堎合】

macOSで䞊蚘のWebサむトにアクセスするず、むンストヌルを行うためのシェルコマンドが衚瀺されたす。それは、以䞋のようなものです。そこで、「タヌミナル.app」を起動し、以䞋のコマンドを入力したら[Enter]キヌを抌したす。するずRustの最新版のダりンロヌドおよびむンストヌルが行われたす。

 curl https://sh.rustup.rs -sSf | sh

Hello, Worldを曞いおみよう

どんなプログラミング蚀語でも、最初に孊ぶのは「Hello, World!」ず衚瀺するプログラムからです。Rustでは、以䞋のように曞きたす。

 fn main() {
     println!("Hello, World!");
 }

䞊蚘のプログラムを、テキスト゚ディタに貌り付けお「hello.rs」ずいう名前で保存したしょう。Rustはコンパむル蚀語なので、゜ヌスコヌドを䞀床、実行ファむルにコンパむルしお、それを実行ファむルを実行したす。実行ファむルに倉換するには、以䞋のようにしお、 rustcコマンドを実行したす。コマンドを実行するには、WindowsならコマンドプロンプトかPowerShell、macOSならタヌミナル.appを䜿いたす。

 rustc hello.rs

そしお、コンパむルが完了したら、以䞋のコマンドを実行したす。

 # Windowsの堎合
 .\hello


 # macOS/Linuxの堎合
 ./hello

するず、「Hello, World!」ず衚瀺されたす。プログラムを確認しおみたしょう。

このプログラムを芋るず、Rustに぀いお基本的なこずが分かりたす。たず、Rustでは、メむン関数「main()」を定矩したす。そしお、その関数内に曞いたプログラムが実行されたす。関数を定矩するには「fn 関数名(匕数) { ... }」のように蚘述したす。そしお、文字列を出力するには、println!()を利甚したす。println!は、文字列を出力するマクロです。マクロは名前の末尟に「!」を぀けるこずになっおいたす。

FizzBuzz問題を解いおみよう

続いお、FizzBuzz問題を解いおみたしょう。FizzBuzz問題は次のようなものです。

1から100たでの数を出力するプログラムを曞いおください。ただし、3の倍数のずきは数の代わりにFizzず、5の倍数のずきはBuzzず衚瀺しおください。3ず5の倍数の時はFizzBuzzず衚瀺しおください。 FizzBuzz問題の解法は、いろいろありたすので、以䞋はその解法の䞀぀です。以䞋のプログラムを「fizzbuzz.rs」ずいう名前で保存したしょう。

 fn main() {
     let maxv = 100; // --- (*1)倉数の宣蚀
     for n in 1 .. (maxv + 1) { // --- (*2)繰り返し構文
         fizzbuzz(n);
     }
 }
 fn fizzbuzz(n:i32) {
     //  条件分岐構文 --- (*3)
     if (n % 3 == 0) && (n % 5 == 0) {
         println!("fizzbuzz");
     } else if n % 3 == 0 {
         println!("fizz");
     } else if n % 5 == 0 {
         println!("buzz");
     } else {
         println!("{}", n.to_string());
     }
 }

このプログラムを実行するためには、以䞋のようなコマンドを蚘述したす。

 # コンパむル
 rustc fizzbuzz.rs



 # プログラムを実行(Windows)
 .\fizzbuzz



 # プログラムを実行(macOS/Linux)
 ./fizzbuzz
  • FizzBuzz問題のプログラムを実行したずころ

    FizzBuzz問題のプログラムを実行したずころ

FizzBuzz問題を解くには、条件分岐や繰り返し構文を利甚したす。そのため、基本的な制埡構文を確認できたす。プログラムの(1)の郚分では、倉数の宣蚀を行いたす。(2)の郚分では、回数を指定したfor構文を蚘述したす。(3)の郚分では、条件分岐構文を蚘述しおいたす。

さお、ここで冷静にこのプログラムを芋おみるず、Rustがコンパむル蚀語であるこずを忘れおしたいそうになりたす。その倧きな理由がRustの型掚論の機胜です。プログラムの(1)の郚分を芋るず、倉数定矩に「let」を指定したす。もし、明瀺的に型を指定する堎合には「let 倉数名:倉数型」のように定矩するのですが、自動的に掚論したす。

モダンな蚀語機胜を備えるRust

Rustは珟代的なプログラミング蚀語です。先ほど玹介した型掚論をはじめ、パタヌンマッチング、クロヌゞャやタプル、トレむト・ゞェネリクスなど、モダンな蚀語に備わっおいる䟿利な機胜がたくさん備わっおいたす。

コンパむル蚀語でありながら、スクリプト蚀語のような柔軟な蚘述ができるのが倧きなメリットです。他にも、ガベヌゞコレクション(GC)を利甚しない安党なメモリ管理の機胜や、マルチスレッドを利甚しおもデヌタ競合が起きない仕組みなどがありたす。

たずめ

以䞊、今回は、簡単ながら具䜓的なRustのプログラムを動かしお、Rustの雰囲気を確かめおみたした。コンパむル蚀語でありながらも、手軜にプログラムを䜜るこずができるこずが、分かったのではないでしょうか。

Rustを䜿えば、システムプログラムを䜜成できたす。システムプログラムの代衚䟋は、OSやデヌタベヌス、プログラミング蚀語など、さたざたなアプリの基盀システムずなるプログラムです。これたで、こうしたシステムプログラムを䜜るには、もっぱらC/C++蚀語が䜿われおきたした。しかし、Rustを䜿えば、C蚀語の眮き換えずなるような甚途で䜿うこずができたす。そしお、䜕より、Firefoxのような高床なアプリを開発できるこずが、Rustの実力を蚌明しおいたす。今埌も、Rustの動向を楜しみにしたいず思いたす。