Hello, World! 選手権
この記事は、大阪工業大学Advent Calendar 2023の25日目の記事です。
Hello, World!
Hello, World! 選手権へようこそ!
新しい言語に入門した際にまず書くプログラムはHello, World!
を出力するコードですよね?
Hello, World!
を出力するプログラムですが、その小さなコードには言語の思想、特徴が詰まっています。
そんなHello, World!
を比較して見ることで、各言語の特徴が知れて面白いんじゃないかと思い集めてみました!
クイズ形式で初級、中級、上級、超級の4つに別れていて、全20問あります~
初級、中級は普通のクイズですが、上級は癖が強めの精鋭揃い、超級はネタ枠です笑
それでは頑張ってください!
初級
問1
#include <stdio.h>
int main() {
printf("Hello, World!");
return 0;
}
問1の答え
Hello, World!といえばこの言語「C言語」でした!
生まれてから半世紀以上経ちますが、未だ現役バリバリに使われている言語です。
問2
print("Hello, World!")
問2の答え
Simple is Best. 「Python3」でした!
ちなみにPython2ではprintは関数ではなく文なので、以下のように書きます。
print "Hello, World!"
たまーに古い文献で見かけるので知っているといいかも?
問3
class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello, World!");
}
}
問3の答え
オブジェクト指向と言えばこの言語「Java」でした!
ちなみにJava 21では以下のようにも書けます。
void main() {
System.out.println("Hello, World!");
}
oh, 一気にJava感が無くなりましたね…
まだ辛うじてSystem.out.println
の部分がJava感を醸し出していますが、これもそのうち消えるかもとのことで、もし消えたらJavaと判定するのがかなり難しくなりそうですね。
問4
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
問4の答え
黒魔術言語こと「C++」でした!
最近見た黒魔術している以下の記事が面白かったです。
問5
console.log("Hello, World!")
問5の答え
ブラウザなら任せろ!「JavaScript」でした!
Webフロントエンドはもちろん、Node.jsでバックエンドもかけるし、Flutter[1]やReact Nativeでモバイルアプリも書けるし、ElectronやTauriでデスクトップアプリも書けるしでわりかし万能言語なんですよね。
なのでGitHubの調査では万年1位と…まあ納得ですね。
https://github.blog/2023-11-08-the-state-of-open-source-and-ai より
中級
問6
using System;
public class Hello{
public static void Main(){
Console.WriteLine("Hello, World!");
}
}
問6の答え
マイクロソフトが産んだ言語「C#」でした!
Cと名前が付いているのでC言語風なのかと思いきやどちらかというとJava風の言語です。
WindowsネイティブのアプリやUnityを開発する時によく使いますね。
あんまり注目されない言語ですが癖も少なく良い言語だと思います。
ちなみにC# 9.0からは以下のように書けます。
using System;
Console.WriteLine("Hello World!");
こちらもクラス宣言の部分とかがすっぱり消えてシンプルになりましたね。
流行っているんですかね?
問7
puts "Hello, World!"
問7の答え
日本生まれ、世界で活躍する言語「Ruby」でした!
最近は競合するPythonがAI等で人気を伸ばしてお株が奪われつつある言語ですが、世界で戦える稀有な国産言語なので頑張ってほしいなぁと思っています。
問8
(format t "Hello, World")
問8の答え
関数型言語といえばこの言語「Lisp」でした!
こちらは今まで紹介してきた言語とは少し思想が違う関数型言語という言語です。
詳しく知りたい方は以下の記事を読んでみてください!
問9
package main
import "fmt"
func main() {
fmt.Println("hello World")
}
問9の答え
Google生まれの言語「Go」でした!
開発したのはUnixやUTF-8、grepなど今日の情報技術を支える技術を作られた方です(すごすぎる)。
文法がシンプルであり、どんな人が書いてもほぼ同じコードになります。
主にサーバーサイドや低レイヤー開発に用いられています。
問10
fn main() {
println!("Hello World!");
}
問10の答え
最も開発者に愛されている言語「Rust」でした!
生まれてから10年もない若い言語ですが、安全性とパフォーマンスを両立した言語で、急速に発展している言語です。
従来C言語が担ってきたカーネル開発の分野でもAndroidやWindows、LinuxなどがRustを採用し始めており、今後益々重要な位置を占める言語になるではないでしょうか。
上級
問11
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
DISPLAY "Hello, World!".
STOP RUN.
問11の答え
銀行システムを支えるぜ!「COBOL」でした!
今まで見てきた言語とは全然違う様相ですね。
COBOLはディビジョンと呼ばれる4つの区分で構成されていてます。
上記のコードでは4の内必要なIDENTIFICATION DIVISIONとPROCEDURE DIVISIONのみ記述しています。
ちなみに私はテスト前に現実逃避して謎にCOBOL入門していました。
問12
Transcript show: 'Hello, World!'.
問12の答え
俺(アラン・ケイ)が考える最強のプログラミング言語「Smalltalk」でした!
オブジェクト指向というと継承、カプセル化、ポリモーフィズムの3銃士が思い浮かびますが、そちらではない(むしろこちらが最初に提唱された)メッセージのやりとりによるオブジェクト指向というものがあります。
それを体現した言語がSmalltalkです。
詳しくは以下の記事を読んでみてください!
めちゃくちゃ詳しく解説してくれています。
問13
.MODEL Small
.STACK 100h
.DATA
db msg 'Hello, world!$'
.CODE
start:
mov ah, 09h
lea dx, msg ; or mov dx, offset msg
int 21h
mov ax,4C00h
int 21h
end start
問13の答え
プログラミングをしている皆さんならもちろんスラスラ読めますよね?「x86アセンブリ」でした!
(x86 CPUで動く)あらゆるプログラミング言語の到達点であります。
実はx86アセンブリは方言がいくつかあって今回は一番純正?に近いMASM(Microsoft Macro Assembler)というものを書いています。
問14
PROGRAM HELLO
PRINT *, 'HELLO, WORLD!'
END PROGRAM HELLO
問14の答え
世界最初の高水準言語!「FORTRAN」でした!
1954年に誕生したこの言語は特に計算機科学の分野で用いられ、現在でも使われている言語です。
ところで、C言語などでforループする際にint i
とループ変数を宣言しますが、なぜi
なのでしょうか。
実は初期のFORTRANでは変数のI~Nが整数型でそれ以外は実数型という制約がありました。
その慣例が続いてきているんですね。
問15
main( ) {
extrn a, b, c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
問15の答え
C言語の祖先である「B言語」でした!
残念?ながらB言語はBCPLという言語から派生した言語なのでA言語というものはありません。
(ALGOL) → CPL → BCPL → B → Cのような流れです。
ちなみに上記のコードは世界で初めて示されたHello, World!のコードです!
超級
問16
「Hello World」と表示
問16の答え
これぞネイティブ言語!「なでしこ」でした!
少し前にお嬢様プログラミングが流行りましたが、こちらは正真正銘日本語で書ける言語です(お嬢様語ではないけど🙄)。
ガチればオセロだって実装できちゃいます。
問17
⎕←'Hello World'
問17の答え
現代のキーボードでは記述することすら叶わない言語「APL」でした!
以下の画像の通り現代のキーボードでは搭載されていない記号が盛りだくさん出てくる言語でこの記号達により普通に書くと複雑になる計算プログラムを簡潔に書くことが出来ます。
https://microapl.com/APL/introduction_chapter2.html より
ちなみに他の例だとこんな感じです。
宇宙人が話している言語にしか見えませんね笑
問18
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++
++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>
++++++++[<++++>-]<+.[-]++++++++++.
問18の答え
お前の脳を破壊するぜ!「BrainFuck」でした!
この言語はコンパイラがなるべく小さくなる言語として考案されたそうで、サイズはわずか123バイト(バイトですよ?)だそうです。
この体でもチューリング完全なのであらゆるプログラムが作れます。
私は絶対ムリですが笑
問19
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?,vNz]KZ%oG4UUS0/@-eMc(:'8
問19の答え
理解させないために生まれた言語「Malbolge」でした!
名前の由来が悪魔から取られていることからも分かる通り悪魔的言語です。
以下の記事が面白いので是非読んでみてください!
問20
問20の答え
読めましたか?私は読めませんでした。「Whitespace」でした!
ドラッグするとしっかり空白があることがわかると思います。
なんとこれでコードを記述しています。
人類最難関言語の一つですね笑
End, World!
何問正解できましたか?
楽しんでくれたなら幸いです😊
もっと詳しく各言語の思想や設計を知りたくなったらコーディングを支える技術に詳しく丁寧にかかれているので読んでみてください!
また、達人プログラマーでは毎年1つ以上のプログラミング言語を学ぶことが推奨されています。
これを期に何か言語を学んでみるのもいいんじゃないでしょうか?
参考文献
-
厳密にはJavaScriptから派生したDartという言語を使います。 ↩︎
Discussion