日本社会にテクノロジーが根付かない原因は信頼か? 独自開発のIoTとZen言語による解決を目指すコネクトフリーCEO、帝都久利寿さん。 マイクロソフトと任天堂があるシアトル出身、5才からプログラミングし、10代で会社を売却し、単独来日、再び創業。 日本&技術好きの同志。

プログラムが使うメモリ、使ったまま忘れたり、使ってはいけないところを触るとソフトウェアは停止する。 このいわゆるバグは、アプリを使う人をイライラさせ、車や社会インフラなどで起きると多大な影響を引き起こす。

現在主力となっているプログラミング言語の解決方法に、自動的にメモリを回収する仕組みを使う方法(GoやTypeScriptなど)、所有権という概念を入れて管理する(Rust)という方法がある。 Zen言語はそのどちらでもなく、後片付け構文とメモリ確保の明確化で安全にするというアプローチ。

IchigoJam BASICでは、そもそも使うメモリ量を固定化しているため問題が起きない。 Zen言語はこの古典定期かつ堅牢なメモリ使用方法を、一段上位で管理するイメージ。

GCを使う言語はランタイム(作ったプログラムを動かすために必要なベースプログラム)で容量が大きくなってしまうが、ZenはRust同様、ゼロランタイム。 IchigoJamなど、小さな組み込み用途にも使える。


zen4ij - Zen language for IcihgoJam
早速実験「かわくだり」のZen言語版が動いた。コンパイル済みバイナリ124byteと小さい。
(参考、Rust版 132byte、C版 116byte、Ruby版 325byte + runtime 2,376byte)

const ij = @import("std15.zen"); export fn main() i32 { ij.cls(); var x: i32 = 15; var score: i32 = 0; while (true) { ij.locate(x, 5); ij.putc(236); ij.locate(ij.rnd(32), 23); ij.putc('*'); ij.putc(10); ij.wait(3); const c = ij.inkey(); if (c == 28) { x -= 1; } if (c == 29) { x += 1; } if (ij.scr(x, 5) != 0) { break; } score += 1; } return score; }

IchigoJam BASICのかわくだり 150byteとの比較

10 CLS:X=15:S=0 20 LC X,5:?CHR$(236) 30 LC RND(32),23:?"*" 40 WAIT 3 50 C=INKEY() 60 X=X-(C=28)+(C=29) 70 IF SCR(X,5) ?S:END 80 S=S+1 90 GOTO 20

@マークで始まるものはZenの組み込み関数、std15.zenにてIchigoJamのAPIを定義している。 例えば、1文字表示するij.putcは、下記のように定義し、IchigoJam APIと接続している。

pub fn putc(x: u8) void { const addr = @intToPtr(*u16, 0xC4); const f = @intToPtr(fn(u8) void, addr.*); f(x); }

u8は、符号なし(unsigned)8bitの意味。Rustに似ているが、関数の返り値型に"->"が不要でよりコンパクト。 @intToPtrを使うことで、物理メモリにもアクセスできるので、OSづくりにも対応できる。(Rustではunsafeを使用する)


Zen言語のドキュメントだけでなく,コンパイラのエラーも日本語対応!優しい! (コンソールで export LANG=ja と設定してみよう)
ごきげんよう、Zenへようこそ | Zen Language Documentation


IchigoDyhookがあれば、亀蔵でもサクっと取り出し、 IchigoJam BASIC プログラミング!
久利寿氏、超久々のBASICでPRINT/GOTOループを決めているところ。

社会のあちこちで活躍するソフトウェアだが、本領発揮はまだまだこれから!
日本のソフトウェア技術力、どんどん上げていこう!


@yrm__ (IchigoLatte MINIScript)、 @kristopher (Zen language)、 @taisukef (IchigoJam BASIC)
国産言語プチサミット in 鯖江!

links
- C言語よりコンパクトに! Zen言語開発者からのプルリクとマシン語の気持ち

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS