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
570
超軽量型プログラミング言語 ES-BASIC
hkawai
0
1.4k
OSECPU-VMの資料
hkawai
0
590
赤間仁志さんのプラレールによる半加算器
hkawai
0
700
20130806a
hkawai
0
290
20120823a
hkawai
0
860
20120326a
hkawai
1
980
Other Decks in Programming
See All in Programming
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
220
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
290
みんなでプロポーザルを書いてみた
yuriko1211
0
260
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.1k
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
250
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
520
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
4
640
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
110
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
520
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
170
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
31
6.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
A Philosophy of Restraint
colly
203
16k
Code Review Best Practice
trishagee
64
17k
Teambox: Starting and Learning
jrom
133
8.8k
How GitHub (no longer) Works
holman
310
140k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Practical Orchestrator
shlominoach
186
10k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
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さん – 小津さん