個人的にはいいと思ったんだけど訳あって消えた天才を偲ぶ的な、
若しくは実力はあるんだけど今の所あんまり流行ってない言語を推していく的な記事です。
どれがどっちとははっきり言いません。
D
ポストC++として2001年にWalter Brightによって設計された。
関数型プログラミングをサポートしていたり、UFCS(Unified Function Call Syntax)を採用していたり、
某Go言語然りなんか違うマスコットキャラがいたりと十分に人気爆発しそうな雰囲気を漂わせていたが
、ver1.0までモタモタしているうちにライバルのC++などに機能を次々と模倣され、優位性を失ってしまった。
foo(bar(a))
// が
a.bar().foo()
/* として呼び出せる。割と最近の言語で見かけるが多分Dがオリジナル。
メソッドチェーン的なのがしやすくて気持ちがいいが、
クラスにメソッド(っぽいの)が後付けできてしまう。
クラスを採用していない最近の言語と相性がいい。*/
Dart
いわゆるAltJS。2011年に公開。Googleに梯子を外されたとかひどい言われようであるが
決して悪い言語ではない。TypeScriptに駆逐されたかに見えたが、Flutterがあるのでネイティブアプリ分野で生き残るかもしれない。
Pike
超マイナー。AltJSでもないくせに静的なスクリプト言語。1994年製。
importしなくても多数のメソッドが使えたり
変数を宣言しただけで使うと0(stringでも)になったりbool型がなかったり
色々よく分からないコンセプトだったせいか流行らなかった。
目の付け所は良かったんですが。
/* スクリプト言語のくせに構文が基本的にC/C++なのもいただけない。
シンタックスハイライトも対応してないのでC++だし。
(ただ流石にこの例はC++に寄せすぎた感じもある。) */
class animal
{
string name;
float weight;
void create(string n, float w)
{
name = n;
weight = w;
}
void eat(string food)
{
write(name + " eats some " + food + ".\n");
weight += 0.5;
}
}
// mixed型を利用すると動的型付け言語っぽくなる。
mixed a;
a = 1;
a = 1.0;
a = "1";
Crystal
もしかしたら来ているのかもしれないRuby似のコンパイラ言語(らしい)。2014年製。
速いらしいので使ってみたいが、使う機会がない。
F#
Microsoftが開発した永遠の次世代言語。2005年製。
関数型対応、.NET言語、C#を呼べるなど三拍子揃った素晴らしい言語だったが、
ポテンシャルの割に主要言語の地位に食い込めていない気がする。
Microsoftは言語を作りすぎたのかもしれない。
Hack
Facebook謹製の改良型PHP。2014年製。
Null安全だったり型アノーテーションが付いていたりする。
PHP界のTypeScriptを目指そうとしたのかも分からないが少なくとも日本ではあまり流行っているという噂は聞かない。
そもそも何故FBはPHPにこだわった感がある。
私はPHPそんなに嫌いではないですけどね。
Nim
Python風味のD言語といった雰囲気だが、機能はこちらの方が豊富でモダンなイメージがある(実際そうかはDあんまり使ってないので分かりません。すいません)。2008年製。マクロが非常に強力であり、メタプログラミングが楽しい。
RustやGoに押されて埋もれている感があるが、どこぞの有名IT企業がこいつを開発して発表していたらいい勝負をしていたかもしれない。設計思想的にないと思うけど。
stdout.writeLine("aaa")
# は
stdout.write_line("aaa")
stdout.write_line "aaa"
stdout.write_line"aaa"
s_t_d_o_u_t.w_r_i_t_e_l_i_n_e "aaa"
writeLine(stdout, "aaa")
# と同じになる。なかなか融通が効くけど混乱の元では?
Zig
アンドリュー・ケリーによって設計されたシステムプログラミング言語。2015年製。
importやtypeofが関数で表される、無名構造体が作れる、型を値として操作できるなど、Go, Rustよりも強い式志向の香りがする。
const std = @import("std");
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
try stdout.print("Hello, {s}!\n", .{"world"});
var a: i8 = 12;
var b: i16 = 34;
var c = a + b;
try expect(c == 46);
try expect(@TypeOf(c) == i16);
}
興味深い点として、ジェネリクスがコンパイル時引数を持つ関数(LinkedList
は単項カインド に相当?)で表現される。
fn LinkedList(comptime T: type) type {
return struct {
pub const Node = struct {
prev: ?*Node,
next: ?*Node,
data: T,
};
first: ?*Node,
last: ?*Node,
len: usize,
};
}
Ceylon
Red Hatが開発したいわゆるJVM言語。2011年製。ScalaよりもJavaに近く簡潔な言語仕様でJavaを抹殺しにかかろうとしたようだが、実態としては薄味のJavaみたいな感じであり、まあわざわざJavaから乗り換えようとした人は少なかったのであろう、あまり流行らなかった。