Submit Search
Upload
OpeLa セルフホストなOSと言語処理系の自作
•
Download as PPTX, PDF
•
0 likes
•
403 views
uchan_nos
Follow
OpeLa is a project to make self-hosted OS and language processing system.
Read less
Read more
Software
Report
Share
Report
Share
1 of 15
Download now
Recommended
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
Hirotaka Kawata
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
Yuma Ohgami
xv6 + mist32 + mruby
xv6 + mist32 + mruby
Hirotaka Kawata
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
Hirotaka Kawata
x86_64向け自作OSの紹介
x86_64向け自作OSの紹介
Yuma Ohgami
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pm
Hirotaka Kawata
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
mametter
Recommended
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
Hirotaka Kawata
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
Yuma Ohgami
xv6 + mist32 + mruby
xv6 + mist32 + mruby
Hirotaka Kawata
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
Hirotaka Kawata
x86_64向け自作OSの紹介
x86_64向け自作OSの紹介
Yuma Ohgami
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pm
Hirotaka Kawata
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
mametter
OpenSolaris Printing Environment
OpenSolaris Printing Environment
Naruhiko Ogasawara
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書く
mametter
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよ
xztaityozx
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Yukio Saito
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
2bo 2bo
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
Kenichiro MATOHARA
ICSをビルドしてみた
ICSをビルドしてみた
kinneko
197x Timer with Your Messages
197x Timer with Your Messages
Kuniaki Igarashi
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
Yoshiaki Shibutani
Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?
Katsunori FUJIWARA
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
Ryuichi Ueda
TranslimitのChatOps事情と愉快なbotたち
TranslimitのChatOps事情と愉快なbotたち
Masakazu Matsushita
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
Fuminobu Takeyama
ロボットシステム学2015年第9回
ロボットシステム学2015年第9回
Ryuichi Ueda
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
Yoshifumi Kawai
20161106 osc-tokyo-command-line
20161106 osc-tokyo-command-line
Fuminobu Takeyama
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
YASUKAZU NAGATOMI
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
Fuminobu Takeyama
システムコール
システムコール
Masahiro Tomita
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
uchan_nos
Hiroshima.rb on github
Hiroshima.rb on github
Tomohiko Himura
More Related Content
What's hot
OpenSolaris Printing Environment
OpenSolaris Printing Environment
Naruhiko Ogasawara
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書く
mametter
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよ
xztaityozx
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Yukio Saito
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
2bo 2bo
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
Kenichiro MATOHARA
ICSをビルドしてみた
ICSをビルドしてみた
kinneko
197x Timer with Your Messages
197x Timer with Your Messages
Kuniaki Igarashi
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
Yoshiaki Shibutani
Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?
Katsunori FUJIWARA
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
Ryuichi Ueda
TranslimitのChatOps事情と愉快なbotたち
TranslimitのChatOps事情と愉快なbotたち
Masakazu Matsushita
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
Fuminobu Takeyama
ロボットシステム学2015年第9回
ロボットシステム学2015年第9回
Ryuichi Ueda
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
Yoshifumi Kawai
20161106 osc-tokyo-command-line
20161106 osc-tokyo-command-line
Fuminobu Takeyama
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
YASUKAZU NAGATOMI
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
Fuminobu Takeyama
システムコール
システムコール
Masahiro Tomita
What's hot
(20)
OpenSolaris Printing Environment
OpenSolaris Printing Environment
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書く
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよ
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
ICSをビルドしてみた
ICSをビルドしてみた
197x Timer with Your Messages
197x Timer with Your Messages
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
TranslimitのChatOps事情と愉快なbotたち
TranslimitのChatOps事情と愉快なbotたち
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
ロボットシステム学2015年第9回
ロボットシステム学2015年第9回
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
20161106 osc-tokyo-command-line
20161106 osc-tokyo-command-line
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
システムコール
システムコール
Similar to OpeLa セルフホストなOSと言語処理系の自作
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
uchan_nos
Hiroshima.rb on github
Hiroshima.rb on github
Tomohiko Himura
CodingTips+ 基礎編
CodingTips+ 基礎編
Yusuke Ito
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
uchan_nos
TOPPERSプロジェクトの紹介 OSC2017 Tokyo Fall
TOPPERSプロジェクトの紹介 OSC2017 Tokyo Fall
Center for Embedded Computing Systems, Nagoya Univ.
Ember コミュニティとわたし
Ember コミュニティとわたし
Ryunosuke SATO
Emacs softLayer
Emacs softLayer
Shuichi Yukimoto
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Masaki Muranaka
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Teppei Sato
Macで快適にプログラミング
Macで快適にプログラミング
Yusuke Sakurai
Net fringejp2016
Net fringejp2016
Yusuke Fujiwara
Tizen & Crosswalk
Tizen & Crosswalk
Naruto TAKAHASHI
PHP でも活用できる Makefile
PHP でも活用できる Makefile
Shohei Okada
Ocs2012 tokyo/spring plone
Ocs2012 tokyo/spring plone
Manabu Terada
LibreOffice for NPO 20121104
LibreOffice for NPO 20121104
hyogontech
Introduction to VSCode
Introduction to VSCode
Yuki Igarashi
PasteHub at kansai emacs 9th
PasteHub at kansai emacs 9th
Kiyoka Nishiyama
30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos
たまにはライセンスの話をしよう 20110211
たまにはライセンスの話をしよう 20110211
Yutaka Kachi
Swiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲーム
聡 中川
Similar to OpeLa セルフホストなOSと言語処理系の自作
(20)
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
Hiroshima.rb on github
Hiroshima.rb on github
CodingTips+ 基礎編
CodingTips+ 基礎編
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
TOPPERSプロジェクトの紹介 OSC2017 Tokyo Fall
TOPPERSプロジェクトの紹介 OSC2017 Tokyo Fall
Ember コミュニティとわたし
Ember コミュニティとわたし
Emacs softLayer
Emacs softLayer
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Macで快適にプログラミング
Macで快適にプログラミング
Net fringejp2016
Net fringejp2016
Tizen & Crosswalk
Tizen & Crosswalk
PHP でも活用できる Makefile
PHP でも活用できる Makefile
Ocs2012 tokyo/spring plone
Ocs2012 tokyo/spring plone
LibreOffice for NPO 20121104
LibreOffice for NPO 20121104
Introduction to VSCode
Introduction to VSCode
PasteHub at kansai emacs 9th
PasteHub at kansai emacs 9th
30分で分かる!OSの作り方
30分で分かる!OSの作り方
たまにはライセンスの話をしよう 20110211
たまにはライセンスの話をしよう 20110211
Swiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲーム
More from uchan_nos
MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
uchan_nos
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
uchan_nos
小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器
uchan_nos
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路
uchan_nos
自作言語でお絵描き
自作言語でお絵描き
uchan_nos
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
uchan_nos
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返る
uchan_nos
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
uchan_nos
Security Nextcamp remote mob programming
Security Nextcamp remote mob programming
uchan_nos
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
uchan_nos
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG
uchan_nos
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
uchan_nos
Building libc++ for toy OS
Building libc++ for toy OS
uchan_nos
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
uchan_nos
Introduction of security camp 2019
Introduction of security camp 2019
uchan_nos
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
uchan_nos
Timers
Timers
uchan_nos
USB3 host driver program structure
USB3 host driver program structure
uchan_nos
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
uchan_nos
1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術
uchan_nos
More from uchan_nos
(20)
MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路
自作言語でお絵描き
自作言語でお絵描き
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返る
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
Security Nextcamp remote mob programming
Security Nextcamp remote mob programming
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
Building libc++ for toy OS
Building libc++ for toy OS
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
Introduction of security camp 2019
Introduction of security camp 2019
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
Timers
Timers
USB3 host driver program structure
USB3 host driver program structure
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術
OpeLa セルフホストなOSと言語処理系の自作
1.
OpeLa:セルフホストな OSと言語処理系の自作 @uchan_nos 第22回自作OSもくもく会 2020/09/06
2.
自己紹介 • Twitter @uchan_nos •
サイボウズ・ラボ株式会社 • 東京工業大学 特任助教 • 自作OSもくもく会コアメンバー • 『30日でできる! OS自作入門』の校正担当 • 『自作エミュレータで学ぶ x86アーキテクチャ』の著者
3.
OpeLa • OpeLa: Operating
and Language processing system • OSと言語処理系を全部自作するプロジェクト • OS,アセンブラ,コンパイラ,リンカ,ライブラリ • 特徴:完全なセルフホスト
4.
セルフホストとは(コンパイラ編) • 自分自身をコンパイルすること • GCCやClangはそうなっている •
GCCをビルドするのに他のコンパイラの 助けは不要 • 自作言語およびOSでこれをやりたい! 自作コンパイラ ソースコード 第1世代 自作コンパイラ 入力 第2世代 自作コンパイラ コンパイル
5.
自作言語をセルフホストする道のり 第1世代 自作コンパイラ opelac.cpp clang++ 入力 第1世代 自作コンパイラ コンパイル 第2世代 自作コンパイラ opelac.opl 書き直し コンパイル 入力 第2世代 自作コンパイラ コンパイル 第3世代 自作コンパイラ 入力 ここまでくれば ぐるぐる回せる (はず)
6.
なぜ自作言語? • uchanは「既存言語でいいじゃん」派だった • なぜ「言語仕様」から自作しようとしたのか? •
答え:OSだけが独自仕様なのはバランスが悪いと思った • 加えて,あらゆるソースコードを自分で(自分たちで)書くこ とを保証したかった • 既存言語を使っちゃうと,コピペがあっても気づけない • 独自言語なら世界に存在しないのでズルは不可能
7.
OpeLaで目指す「完全セルフホスト」 自作OSの上で動く自作言語処理系で 自作OSと自作言語処理系をビルドすること 自作OS 自作言語処理系 自作OS ソースコード 自作言語処理系 ソースコード
8.
なぜ完全セルフホスト? • 目標地点がはっきりする • 言語の観点:OSが記述できる程度の機能 •
アドレス参照,in/out命令の発行,各種レジスタの読み書き • OSの観点:言語処理系が動く程度の機能 • プロセス,ファイル入出力 • 発展としては,テキスト編集
9.
余分な機能は足さない • 総時間が最小になるようにしたい • 機能Xを作る時間
< Xによって節約できる開発工数 が見込めるならXを作る • for文が無くてもOSは書けるが,あった方が効率的だろう • セルフホストにとって効果が薄い開発を防ぐため • 余分な言語機能の例:例外,動的型検査,GC,etc. • 余分なOS機能の例:高度なグラフィック,音楽再生,etc.
10.
【完全版】自作セルフホストの道のり 第1世代 opelac.cpp clang++ 第1世代 opelac 第2世代 opelac.opl 第2世代 opelac 第3世代 opelac 自作OS用 opelac.opl 自作OS向 けに修正 自作OS用 opelacこれらはLinux用opelac
11.
自作OSのセルフホストを目指して 1. 自作OSをLinux用opelacでク ロスコンパイル 2. 自作OS向けに調整した自作 言語処理系をLinux用opelac でクロスコンパイル 3.
自作OSを自作OS用opelacで コンパイル 4. 自作OS向けに調整した自作 言語処理系を自作OS用 opelacでコンパイル 自作OS my_os.opl Linux用 opelac Linux 自作OS 自作OS用 opelac.opl 自作OS用 opelac 1 2 3 4
12.
作成の順序(1/2) • セルフホスト可能なコンパイラを自作する • 独自言語のソースコード
→ x86-64 アセンブリコード • 自作言語でブートローダー と OS を簡易実装する • 自作言語で OS が実装できることの実証を早期に行うのが目的 • 自作言語でライブラリを自作する • 言語処理系や OS の開発に使える汎用的なライブラリとする • 自作言語でアセンブラを自作する • 自作言語でリンカを自作する • この時点で言語処理系と呼べるものがすべて自作に置き換わる
13.
作成の順序(2/2) • 自作言語処理系でビルドツール(≒make)を自作 • のちに自作
OS 上で自作言語処理系のビルドをするときに備え,自作 OS 上で動くビルドツールが欲しいのでこの時点で作る • 自作言語処理系で本格的な OS を自作 • 自作言語処理系に自作OS向けアプリ生成オプションを追加 • 自作言語処理系とビルドツールを自作 OS 上で動かす • 自作言語処理系とビルドツールを自作 OS 上でビルド • 完全なセルフホストが実現される
14.
Opelacのデモ 2020/09/06までの実装の進捗
15.
Opelac開発での気づき • セミコロンがある方がパースが楽 • セミコロンが無いと,行途中の改行がトリッキー •
foo := a + b + c + d // OK • foo := a + b + c + d // Error • 型推論が割と初期に必要になってしまった • foo := 42; の形式をサポートするため • 型の表現が再帰構造になって大変 • int, *int: 比較的単純な型 • func(func(int, int), int): 再帰してる型
Download now