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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hidemi KAWAI
November 08, 2016
Programming
1.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OSASK計画が考える新しいプログラミング言語の構想
OSC2016東京秋での発表資料
Hidemi KAWAI
November 08, 2016
More Decks by Hidemi KAWAI
See All by Hidemi KAWAI
C言語でメモリ管理を考えた話
hkawai
0
770
超軽量型プログラミング言語 ES-BASIC
hkawai
0
1.8k
OSECPU-VMの資料
hkawai
0
770
赤間仁志さんのプラレールによる半加算器
hkawai
0
900
20130806a
hkawai
0
360
20120823a
hkawai
0
1k
20120326a
hkawai
1
1.1k
Other Decks in Programming
See All in Programming
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
520
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
500
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.3k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
170
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
630
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
140
AIが無かった頃の素敵な出会いの話
codmoninc
1
200
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
1.7k
act1-costs.pdf
sumedhbala
0
240
What's New in Android 2026
veronikapj
0
130
フィードバックで育てるAI開発
kotaminato
1
120
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
530
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
290
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
230
Making Projects Easy
brettharned
120
6.7k
Being A Developer After 40
akosma
91
590k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Documentation Writing (for coders)
carmenintech
77
5.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building Applications with DynamoDB
mza
96
7.1k
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さん – 小津さん