Open4

どマイナープログラミング言語

karamawanukaramawanu

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

OCaml - Wikipedia

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

今の所、ほとんど情報がない、非常にマイナーな言語。 go を元にしてる。

作者としては、voltというSNSアプリを作ろうとしていて、その過程でVを開発してるようだ。

https://volt-app.com/

fn main() {
  areas := ['game', 'web', 'tools', 'science', 'systems',
            'embedded', 'drivers', 'GUI', 'mobile']
  for area in areas {
    println('Hello, $area developers!')
  }

メモリ管理についてはほとんど隠蔽をしておらず、考え方は rust に近いと思われる。

ホットリロード機能がちょっとおもしろい。関数に [live] プラグマをつけると動的コンパイル対象となる。

Zen

なんとなく 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

私見

小生もある程度使い込んでは見たが、今ひとつ 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

Category:Nim - Rosetta Code

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 としては最古参の部類だが、非常にマイナー。

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 年で更新停止。

The Opa Language

サーバサイド&クライアントサイドをワンソースにねじ込める言語。

小生、使ってみようかと思ったのだが、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.

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.

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

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.

karamawanukaramawanu

Mirah

Main
GitHub - mirah/mirah: The Mirah Programming Language

zkl home page

gruon

Gluon

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

REBOL Language

Converge

旧姓 oz
Oz (プログラミング言語) - Wikipedia

Mozart Programming System

Icon - Wikipedia

The Icon Programming Language

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
)

karamawanukaramawanu

http://mozart2.org/

4 Failure Model

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

http://www.zenkinetic.com/zklExamples.html

  // 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;
}

https://opendylan.org/

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;

https://ioke.org/