どマイナープログラミング言語
Dart
Dart programming language | Dart
2011年からあるわりにイマイチ流行らなかったが、flutter の専用言語として一躍復活。
better-JSとしての生い立ちであるが、言語の質は Java に近い。
Chromium Blog: Dart: A language for structured web programming
Dash, Google's Alternative to JavaScript
Vala
GNOMEプロジェクトの一貫で、GObject利用/GTK アプリの制作に特化している。
Projects/Vala/Tutorial - GNOME Wiki!
OCaml
let rec quicksort = function
| [] -> []
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less rest in
quicksort left @ [pivot] @ quicksort right
V
- The V Programming Language
- v - Qiita タグに記事が 20
今の所、ほとんど情報がない、非常にマイナーな言語。 go を元にしてる。
作者としては、voltというSNSアプリを作ろうとしていて、その過程でVを開発してるようだ。
fn main() {
areas := ['game', 'web', 'tools', 'science', 'systems',
'embedded', 'drivers', 'GUI', 'mobile']
for area in areas {
println('Hello, $area developers!')
}
メモリ管理についてはほとんど隠蔽をしておらず、考え方は rust に近いと思われる。
- V プログラミング言語 - Qiita
- V 言語と Rust - JSP_Blog
- V 言語: Go のようにシンプルで、Rust のように小さいバイナリ| TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜| BPS 株式会社
- 開発者から見た V 言語とその(誇大)広告について - Qiita
ホットリロード機能がちょっとおもしろい。関数に [live] プラグマをつけると動的コンパイル対象となる。
Zen
- 言語づくりという解決手段、高速安全コンパクトな Zen 言語で簡単組み込み開発 on IchigoJam with zen4ij #rust #zen #c #IchigoJam / 福野泰介の一日一創 / Create every day by Taisuke Fukuno
- ごきげんよう、Zen へようこそ | Reduce your stress with the C language
-
The Zen Language
zenlang - Qiita タグに記事が 7
なんとなく rust に似てるきがする。
const std = @import("std");
pub fn main() anyerror!void {
std.debug.warn("Zen の道へようこそ。\n道案内はこちらからどうぞ:\nhttps://www.zen-lang.org/ja-JP/docs/\n", .{});
}
Nim
- Nim Programming Language
- nim-lang
- Nim - Qiita タグに記事が 303
私見
小生もある程度使い込んでは見たが、今ひとつ C 言語の呪縛を抜けきれず、かなり実装にコツがいる。
言語エンジンというよりは、C 言語へのトランスレータとして観たほうが面白い言語。
バックエンドに LLVM 等を使ってないことも特徴的。
やや高度なことをやろうとすると、C 言語の出力を想定しなければならない面もあり、その点ではやや高度。
変数名等に比較的強い制限がある。どうも識別子にある 1 文字のアンダースコアを削って使うらしい。Python や PHP に慣れてるとそこが辛い......
import macros, strutils
macro toLookupTable(data: static[string]): untyped =
result = newTree(nnkBracket)
for w in data.split(';'):
result.add newLit(w)
const
data = "mov;btc;cli;xor"
opcodes = toLookupTable(data)
for o in opcodes:
echo o
D 言語
D is a general-purpose programming language with static typing, systems-level access, and C-like syntax. With the D Programming Language, write fast, read fast, and run fast.
better-C としては最古参の部類だが、非常にマイナー。
- Home - D Programming Language
- [dlang - Qiita] (https://qiita.com/tags/dlang) 304 記事
- D 言語を始めよう - D 言語ツアー
D 言語については、32 ビットの時代から根強いプログラマがいる。
-
ABA Games - Windows
SDL ライブラリを用いた、シュールでスタイリッシュな画作りが特徴的なゲームの数々。
すべてソースが参照できるようなので、実装の参考にもとてもよいだろう。
Ballerina
パット見、RPC を表現することに特化しようとした。ように観える。
syntax = "proto3";
service helloWorld {
rpc hello(HelloRequest) returns (HelloResponse);
rpc bye(ByeRequest) returns (ByeResponse);
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
message ByeRequest {
string greet = 1;
}
message ByeResponse {
string say = 1;
}
import ballerina/http;
service hello on new http:Listener(9090) {
resource function sayHello(http:Caller caller,
http:Request req) returns error? {
check caller->respond("Hello, World!");
}
}
言語そのものが DSL 的側面が強い。IDE にはダイアグラムプレビューの機能があるらしい。
もうちょっと活用したい気がするのだが、どうにも実装がピンと来ない....
Ballerina とお付き合いをはじめたので軽く紹介してみる - Qiita
終息
rosettastone を端から観ていくと、観たこともないような言語が散見される。が、残念ならが概ね 2016 辺りで更新が止まってる。
Opa
2011 年発祥。2013 年で更新停止。
サーバサイド&クライアントサイドをワンソースにねじ込める言語。
小生、使ってみようかと思ったのだが、db 周りの記述が非常に独特で、まるで理解できずに挫折した。例えば次のとおりである。
Opa はオブジェクトをどのように MongoDB に格納するのか? - Qiita
type x =
{
int foo,
string bar,
float baz,
bool hoge,
void fuga
}
database dbtest {
x /xs[{foo}]
/xs[_]/hoge = { false }
}
/dbtest/xs[{foo: 1}] <- {bar: "hello", baz: 3.14, hoge: true, fuga: {}}
Gosu
java の代替を目指した感じ。kotlin に取って代わられた印象
kitten
Kitten is a statically typed, stack-based functional programming language designed for simplicity, speed, and safety. This is an in-progress implementation of that language, including
Nu
Nu is an alternative scripting language used to program OS X through Apple’s native API, Cocoa.
- Nu Programming Language for slot sites and apps - Learn programming in Nu
- programming-nu/nu: Nu is an interpreted Lisp that builds on the Objective-C runtime and Foundation framework. 3 years ago
Boo
Unity3D のスクリプト言語として発祥したが、C#環境の安定によりその場を奪われた。
公式 WEB サイトは存在したが、どうにもパワーが欠けるように見える archive.org BOO-LANG
Ioke
Ioke is a folding language. It allows you to write highly expressive code that writes code. Ioke allows you to create abstractions at any level, and expressiveness is the ultimate goal of the language.
Ioke is a dynamic language targeted at virtual machines, currently the Java Virtual Machine and the Common Language Runtime. It's been designed from scratch to be a highly flexible general purpose language. It is a prototype-based programming language that is inspired by Io, Smalltalk, Lisp and Ruby.
nendo
Nendo is a dialect of Lisp written in Ruby.
- nendo | RubyGems.org | コミュニティの Gem ホスティングサービス
- kiyoka/nendo: Nendo is a dialect of Lisp written in Ruby. It is designed to be a macro language of Ruby. 2017
Ceylon
Static types that just work.
shared void run() => newServer {
Endpoint {
path = startsWith("/");
acceptMethod = { get };
(request, response) =>
response.writeString("Say more, more clearly");
}
}.start();
Eclipse Ceylon's powerful flow-sensitive static type system catches many bugs while letting you express more, more easily: union and intersection types, tuples, function types, mixin inheritance, enumerated types, and reified generics.
Pike
発祥はかなり古く 1994。
リリースは、2020 年現在では 2017 で更新が止まってる。
構文はほぼ C なので、C/PHP からの移行が楽だと思われ、個人的には非常に期待していた。
しかし、実績はほとんどなく、Roxen という WEB サーバのサーバサイドスクリプティングにとどまる。
Pike is the 'native' language of Roxen, and is directly supported by the web server. This also makes it the most powerful language in Roxen, since it allows direct interfacing with the server's native API.
It is possible that the Roxen administrator will prefer not to allow ordinary users to take advantage of this functionality, since it can compromise web server security; but even if this is the case for your site, Pike can still be available through CGI, if the Pike interpreter has been installed in a publicly available place in your system.
- Home - Pike Programming Language
- Download - Pike Programming Language 8.0.610 (release 12) 2017
Mirah
Main
GitHub - mirah/mirah: The Mirah Programming Language
zkl home page
gruon
GitHub - gluon-lang/gluon: A static, type inferred and embeddable language written in Rust.
rustにて実装した、rustに似た言語。組み込み用らしい。
let de @ { Deserialize, ? } = import! std.json.de
let ser @ { Serialize, ? } = import! std.json.ser
let { Result, ? } = import! std.result
#[derive(Serialize, Deserialize)]
type Vec = { x : Float, y : Float, name : Option String }
let result =
let input = r#"{ "x": 123, "y": 456.78, "name": null }"#
do v = de.deserialize input
let v : Vec = v
let updated = { x = v.x, y = v.y, name = Some "Vector" }
ser.to_string_pretty updated
match result with
| Ok s -> s
| Err err -> err
旧姓 oz
Oz (プログラミング言語) - Wikipedia
https://ja.wikipedia.org/wiki/Squirrel | Squirrel - Wikipedia
https://github.com/emjun/tea-lang-vis | emjun/tea-lang-vis: DSL for experimental design and statistical analysis
http://www.fancy-lang.org/ | The Fancy Programming Language
https://ja.wikipedia.org/wiki/Oz_(プログラミング言語) | Oz (プログラミング言語) - Wikipedia
https://www.publickey1.jp/blog/10/sawzall.html | グーグル、分散処理のためにデザインされた言語「Sawzall」をオープンソースで公開 - Publickey
https://ruche-home.net/program/embed/major | プログラミング/組み込み言語/主な言語まとめ - ルーチェ's Homepage
ミシガン大学ISDOS Projectによって開発された要求仕様記述言語PSL[1]| 要求仕様記述言語 PSL
https://kmaebashi.hatenablog.com/entry/20070525/p1 | Xtal - K.Maebashi's はてなブログ
http://mercury-memo.hatenablog.com/entry/2013/07/06/012345 | Mercury 入門 (1) Hello, World! - Mercury 勉強メモ
https://zenn.dev/arcage/articles/crystal_introduce | 【Crystalと○○】 Crystalとは
https://d-cube.connpass.com/event/70758/ | Idrisによる超型安全プログラミング入門 - connpass
http://www2s.biglobe.ne.jp/~randy12/soopy/index.html | Soopy: Simple Object Oriented Programing sYstem
https://github.com/dylan-lang | Dylan Language
https://www.ps.uni-saarland.de/alice/ | Alice
)
local Trigger in
for E in Es do
thread
%% bind Trigger once E has permanently failed
if {Member permFail {DP.getFaultStream E}} then
Trigger=unit
end
end
end
thread
{Wait Trigger}
%% attempt to make all elements of Es fail
for E in Es do {DP.kill E} end
end
end
// parallel in-place quick sort, ~25% faster with 2 cores (500K random ints)
fcn qipSort(list,cmp='<) {
sp := self.fcn.stranded(Void); // --> T(N,Void|exception)
fcn(list,left,right,cmp,sp) { // sometimes a Strand
if (left < right) {
// first, partition the list around a pivot, in place
pivotIndex := (left+right)/2; // or median of first,middle,last
pivot := list[pivotIndex];
list.swap(pivotIndex,right); // move pivot to end
pivotIndex := left;
i := left; do(right-left) { // foreach i in ([left..right-1])
if (cmp(list[i],pivot)) {
list.swap(i,pivotIndex);
pivotIndex += 1;
}
i += 1;
}
list.swap(pivotIndex,right); // move pivot to final place
// sort the two partitions
if (sp[0] < 10) { // too many strands == too much overhead
ls := (3000 < pivotIndex - left);
rs := (3000 < right - pivotIndex);
if (ls) self.fcn.stranded(sp,list,left,pivotIndex-1,cmp,sp);
else self.fcn(list,left,pivotIndex-1,cmp,sp);
if (rs) self.fcn.stranded(sp,list,pivotIndex+1,right,cmp,sp);
else self.fcn(list,pivotIndex+1,right,cmp,sp);
}
else {
self.fcn(list,left,pivotIndex-1,cmp,sp);
self.fcn(list,pivotIndex+1,right,cmp,sp);
}
}
}(list,0,list.len()-1,cmp,sp);
sp[0].waitFor(0); // when all strands are done, list is sorted
list;
}
define class <vehicle> (<object>)
slot owner :: <string>,
init-keyword: owner:,
init-value: "Northern Motors";
end;
define class <car> (<vehicle>)
end;
define class <truck> (<vehicle>)
slot capacity,
required-init-keyword: tons:;
end;