Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OSASK計画が考える新しいプログラミング言語の構想
Search
Hidemi KAWAI
November 08, 2016
Programming
1
1.2k
OSASK計画が考える新しいプログラミング言語の構想
OSC2016東京秋での発表資料
Hidemi KAWAI
November 08, 2016
Tweet
Share
More Decks by Hidemi KAWAI
See All by Hidemi KAWAI
C言語でメモリ管理を考えた話
hkawai
0
590
超軽量型プログラミング言語 ES-BASIC
hkawai
0
1.5k
OSECPU-VMの資料
hkawai
0
610
赤間仁志さんのプラレールによる半加算器
hkawai
0
720
20130806a
hkawai
0
300
20120823a
hkawai
0
890
20120326a
hkawai
1
1k
Other Decks in Programming
See All in Programming
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
280
DevinとCursorから学ぶAIエージェントメモリーの設計とMoatの考え方
itarutomy
0
160
Fibonacci Function Gallery - Part 2
philipschwarz
PRO
0
210
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
600
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
770
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
560
カスタムエフェクトプラグインで Atom Craft をいい感じにする@ADX / ADX LE勉強会 vol.1
cox2
0
110
2025.01.17_Sansan × DMM.swift
riofujimon
2
580
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
950
asdf-ecspresso作って 友達が増えた話 / Fujiwara Tech Conference 2025
koluku
0
1.4k
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
情報漏洩させないための設計
kubotak
5
1.3k
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
Making the Leap to Tech Lead
cromwellryan
133
9k
KATA
mclloyd
29
14k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Code Review Best Practice
trishagee
65
17k
Visualization
eitanlees
146
15k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
39
1.9k
Gamification - CAS2011
davidbonilla
80
5.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Designing for humans not robots
tammielis
250
25k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
960
Transcript
OSASK計画が考える 新しいプログラミング言語の構想 OSASK計画代表 川合 秀実
もくじ • [1] ねえ、OSASKって終わったの? • [2] プログラミング言語Essen • [3] 競争型の開発スタイル
[1] ねえ、OSASKって終わったの? そんなことはないです 今までの流れをお知らせします
OSASKは「まだ」生きていた! • 簡単な歴史(リリースできた期間のみ) ・①第一世代OSASK 2000年05月~2005年01月 ・②「30日でできる! OS自作入門」 2006年02月 ・③第二世代OSASK 2008年04月~2009年10月
・④OSASK公開停止 2009年11月 ・⑤blikeライブラリ(描画ライブラリ) 2010年10月~2011年03月 ・⑥川合が就職 2011年09月 ・⑦第三世代OSASK(OSECPU-VM) 2013年03月~2014年08月 ・⑧プログラミング言語Essen 2016年11月~(予定) ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 今日 2000年
第一世代OSASK 4MBのメモリでOK (BIOSによるメモリチェックの 時間を除けば)1秒で起動 33MHzのCPUで快適 100KBのインストールサイズ (シェルやドライバや標準ライ ブラリも含む) 3Dキューブ: 1,393バイト
爆弾さがし: 3,213バイト ダンジョン: 32.4キロバイト
第二世代OSASK • この時はグラフィックをサポートしなかったの で、派手さはない – アプリがWindowsやLinux上でも動く – Windows向けのローダはたったの14.5KB – hello,
worldが16バイト – hexdumpが168バイト – アセンブラ処理系(nask)が22.2KB
第三世代OSASK • WindowsやLinuxでもアプリが動く – Win版のシステムは29.0KB (Javaみたいなバイトコード方式) インベーダ: 430バイト フラクタル: 111バイト
charsだけが小さいわけではない(ズルじゃないから) アプリサイズは第一世代の半分以下! しかもx86もARMもOK
[2] プログラミング言語Essen 関数や型だけではなく 演算子や制御構文を自由に作れる プログラミング言語(予定)
なぜプログラミング言語? • OSを作っているとシェルも作りたくなってくる • シェルを作っているとプログラミング言語みた いになってくる • そしてやっぱりコンパクトに作りたい – たくさん書いてすごいものができるのは当たり前
– 短い処理系なのにいろいろできたらかっこいい
特徴(1) • インタプリタ言語 • 速度は追及しない – どうせCやアセンブラには勝てない – シンプルな実装を心がける •
プログラム内に既存言語を混ぜられる(関数単位) – インライン機械語 – インラインアセンブラ – インラインC++ – インラインRuby – などなど
特徴(2) • Cは関数を自由に定義できる • C++は型を自由に定義できる • これに対して、Essenは演算子と制御構文も自 由に定義できる! • 変数は電源を切っても消えない(保存される)
– 変数をファイル代わりに使える – 変数の削除とか変数名の変更などもできる • ファイルの代わりなので
内部アルゴリズム a = 1 + 2 * 3 a =
1 + 2 * 3 // この掛け算が選ばれる a = 1 + 6 // 6に置換される a = 1 + 6 // この足し算が選ばれる a = 7 // 7 に置換される a = 7 // この代入命令が選ばれる 構文木とかは作らずに、優先順位と結合方向を意 識して式をたどって、演算して結果に置換 これを置換できなくなるまで繰り返す・・・シンプル!
Essenにおける関数と演算子の違い • 関数: – f(a) とか g(x, y) とか h()
のように必ず()で呼び出される – 引数はかっこでくくられているので明白 – 優先順位とか結合方向とかそういう面倒なものはない • 演算子: – 2 + 3 とか i++ のように()がなくても呼び出される – 引数は演算子の前後からもぎ取る – 優先順位や結合方向がある
作ってみたい演算子 • y = sin x // sin(x) と同じように機能する •
a = b mod c // %よりはmodが好き • z = e ** x // powよりは**が好き • 複素数を扱う文脈では、iという演算子があると 便利そう (これはカッコがなくても発動してほしい ので演算子にするしかない) – z = 1+2i – でも普段は i は for のカウンタなどで使うので、この 定義が常にほしいわけじゃない • 時間があると、どんどんアイデアが出てくる!
作ってみたい制御構文 • 1~9の数字が書かれたカードが、それぞれ1枚ずつある。 ここから3枚を選ぶ。 • 3枚の数字の合計が10になるのは何パターンあるか? – Essenでは、セミコロンは省略できる。引数区切りのカンマも省略できる。 – 文が1文しかなくても、中カッコは省略できない。
– 型宣言は不要。 – combiFor(f 9 3)は9個の中から3つを選ぶ組わせをすべて列挙するforループ。変数 fに(1 1 1 0 0 0 0 0 0)などが格納される。 – sum(k 1 9) { ... } は、k=1~9に対して、{ } の中を計算してその和を取る。 – Essenは制御構文を自由に作れるので、combiForやsumのような構文も思いつきで すぐに作れる。 c = 0 combiFor(f 9 3) { if (sum(k 1 9) { f[k - 1] * k } == 10) { c++ } } print(c)
[3] 競争型の開発スタイル 協力して作るのとは少し違います
ライバルとの競争の例 • オープンソースはみんなで仲良く作るから すばらしい・・・だけじゃない! 競争だ!! • OSASKの川合 vs MEG-OSのsakky氏 •
charsという簡単なプログラムを小さくしたい • もしOS側も改造してよいとしたらどこまで行け るのか? • 双方にテクニックを盗みあう
競争の成果 2008年 Kが31バイトを達成 2008年 Sは13バイトを達成 2008年 Kは14バイトを達成 2008年 Sは12バイトを達成 2008年
Kは12バイトを達成 2008年 Kは11バイトを達成 2013年 Sはなんと8バイトを達成 2013年 Kは7バイトを達成 2014年 Sは6バイトを達成 2014年 Kは5バイトを達成 第二世代 OSASK 第三世代 OSASK CLE COM64+ 競い合ったおかげで、世界一位&世界二位の実力に到達。
そういえば第一世代OSASKも競争してた • 2000年05月01日 OSASKの最初のリリース • 2002年06月18日 MonaOSの開発開始 • 2002年07月13日 NWSOSの最初のリリース
• 2002年07月28日 MEG-OSの最初のリリース • これらは「2ちゃんねる4大和製OS」と呼ばれ、 よく比較された(互いに意識もした) • OSASKとMonaOSはオープンソース
競争型の開発 • ということで、協力者よりもライバルがほしい – 共に切磋琢磨して、お互いの努力を理解しあえる 強敵(とも)がほしい! • 会社の業務で、現在、学生2名の指導を担当し ているが、あれこれ教えるのではなく、私と競 争してもらっている
– 我ながら斬新な指導方法 – 私も堂々と好きな開発ができる! 一石二鳥!! – もし差が付いたら「敵に塩を贈る」気持ちで教える
まとめ • [1] ねえ、OSASKって終わったの? • [2] プログラミング言語Essen • [3] 競争型の開発スタイル
• ホームページ http://osask.jp/ • 次は学生の発表です(ライバル) – hikaliumさん – 小津さん