SlideShare a Scribd company logo
1 of 11
Download to read offline
 @miyakawa_taku
 JJUG幹事
 SI屋で賃労働
 オレオレJVM言語Kinkを作っています
https://bitbucket.org/kink/kink
 尾上部屋の里山関のファンです
自己紹介
1
2
Kinkとは!
こんなの↓
 プロトタイプベースのオブジェクト指向
言語
 JVM上で動く言語処理系だ!
 仕様策定者: 宮川 拓
 実装者: 宮川 拓
 ユーザ: 宮川 拓
言語設計者が意味論を書く時に
考えていた事
2015-04-18 渋谷JVM LT
宮川 拓
4
はいけい
去年の7月から12月ごろに掛けて、
Kinkの意味論を一通り書き直しました
例示によるゆるふわ意味論では無理が出
てきた
 何が正しいか分からない……
5
Kinkの意味論
http://doc.kink-lang.org/kink/manual-
ja/language/semantics.html
言語の意味論の分類
 表示的意味論
 プログラムの項の集合を他のなにかの
集合にマッピングする意味論
 操作的意味論
 あるプログラムがどんな風に動くか、を
記述する意味論
 公理的意味論
 なんか難しくてよく分からん
6
7
Kinkのプログラム意味論(にゅー)
二段階に分けてます
1. 表示的意味論
2. 操作的意味論
表示的意味論の部分
8
:Var = 42
¥env::Var.op_set(42)
env; varref Var; dup;emptylist; num 42;
add; flip; deref op_set; call
正規化
仮想的なスタックマシン (KSM)
の命令列に変換
env 環境をpush
varref Var
popした値の変数参照を作って
push
dup popした値をpush, push
emptylist 新しい空のリストをpush
num 42 数値をpush
add
値をpop, リストをpopして末尾
に値を追加したリストをpush
操作的意味論の部分
9
10
意味論書いてみて分かったこと
 Kinkのことがよく理解できた!
 「ブロックから関数を生成」は、よりプ
リミティブなふたつの命令に分解できる
 処理系のバグが見つけられた!
 最適化前と最適化後で、関数呼び出しの
処理順序が変わってしまっていた
11
教訓
みんなもプログラム意味論を書こう!

More Related Content

What's hot

KotlinでWebアプリ開発
KotlinでWebアプリ開発KotlinでWebアプリ開発
KotlinでWebアプリ開発Ryo Nakagawa
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたいyy yank
 
Humble Object Patternな話
Humble Object Patternな話Humble Object Patternな話
Humble Object Patternな話Hiroto Imoto
 
Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターorekyuu
 
なるべくコードを書かないAndroid開発
なるべくコードを書かないAndroid開発なるべくコードを書かないAndroid開発
なるべくコードを書かないAndroid開発Hiroshi Kikuchi
 
Middleman Guides & How to Learn
Middleman Guides & How to LearnMiddleman Guides & How to Learn
Middleman Guides & How to LearnYuya Matsushima
 
「やっぱり怖かったPerl」In Kichijoji.pm #2
「やっぱり怖かったPerl」In Kichijoji.pm #2「やっぱり怖かったPerl」In Kichijoji.pm #2
「やっぱり怖かったPerl」In Kichijoji.pm #2民人 青山
 
KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話shinnosuke kugimiya
 
IM飲み会2010 Sekka開発秘話
IM飲み会2010 Sekka開発秘話IM飲み会2010 Sekka開発秘話
IM飲み会2010 Sekka開発秘話Kiyoka Nishiyama
 
Androidの世界を離れて異文化留学してみた
Androidの世界を離れて異文化留学してみたAndroidの世界を離れて異文化留学してみた
Androidの世界を離れて異文化留学してみたHiroshi Kikuchi
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlinRyota Murohoshi
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜宏治 高尾
 
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
 CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 BotのプチレシピKazumi IWANAGA
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyazuma satoshi
 

What's hot (14)

KotlinでWebアプリ開発
KotlinでWebアプリ開発KotlinでWebアプリ開発
KotlinでWebアプリ開発
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたい
 
Humble Object Patternな話
Humble Object Patternな話Humble Object Patternな話
Humble Object Patternな話
 
Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフター
 
なるべくコードを書かないAndroid開発
なるべくコードを書かないAndroid開発なるべくコードを書かないAndroid開発
なるべくコードを書かないAndroid開発
 
Middleman Guides & How to Learn
Middleman Guides & How to LearnMiddleman Guides & How to Learn
Middleman Guides & How to Learn
 
「やっぱり怖かったPerl」In Kichijoji.pm #2
「やっぱり怖かったPerl」In Kichijoji.pm #2「やっぱり怖かったPerl」In Kichijoji.pm #2
「やっぱり怖かったPerl」In Kichijoji.pm #2
 
KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話
 
IM飲み会2010 Sekka開発秘話
IM飲み会2010 Sekka開発秘話IM飲み会2010 Sekka開発秘話
IM飲み会2010 Sekka開発秘話
 
Androidの世界を離れて異文化留学してみた
Androidの世界を離れて異文化留学してみたAndroidの世界を離れて異文化留学してみた
Androidの世界を離れて異文化留学してみた
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
 
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
 CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
 

Viewers also liked

Graph Algorithms Part 1
Graph Algorithms Part 1Graph Algorithms Part 1
Graph Algorithms Part 1Taku Miyakawa
 
入門core.async
入門core.async入門core.async
入門core.asyncsohta
 
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjugYuji Kubota
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 
やっとわかったタイピングスピード向上のコツ
やっとわかったタイピングスピード向上のコツやっとわかったタイピングスピード向上のコツ
やっとわかったタイピングスピード向上のコツRyosuke Yamazaki
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力Yoshitaka Kawashima
 
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことYoshitaka Kawashima
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Taku Miyakawa
 
Matrix Multiplication in Strassen Algorithm
Matrix Multiplication in Strassen AlgorithmMatrix Multiplication in Strassen Algorithm
Matrix Multiplication in Strassen AlgorithmTaku Miyakawa
 
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Taku Miyakawa
 
擬似乱数生成器の評価
擬似乱数生成器の評価擬似乱数生成器の評価
擬似乱数生成器の評価Taku Miyakawa
 
JVM言語を使ってみようの歌
JVM言語を使ってみようの歌JVM言語を使ってみようの歌
JVM言語を使ってみようの歌YujiSoftware
 
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugJDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugYuji Kubota
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧 Ryosuke Yamazaki
 

Viewers also liked (20)

Graph Algorithms Part 1
Graph Algorithms Part 1Graph Algorithms Part 1
Graph Algorithms Part 1
 
入門core.async
入門core.async入門core.async
入門core.async
 
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
エスイーのしごと
エスイーのしごとエスイーのしごと
エスイーのしごと
 
やっとわかったタイピングスピード向上のコツ
やっとわかったタイピングスピード向上のコツやっとわかったタイピングスピード向上のコツ
やっとわかったタイピングスピード向上のコツ
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
 
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのこと
 
Hadoop jobbuilder
Hadoop jobbuilderHadoop jobbuilder
Hadoop jobbuilder
 
Kink の宣伝
Kink の宣伝Kink の宣伝
Kink の宣伝
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
 
Matrix Multiplication in Strassen Algorithm
Matrix Multiplication in Strassen AlgorithmMatrix Multiplication in Strassen Algorithm
Matrix Multiplication in Strassen Algorithm
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
 
擬似乱数生成器の評価
擬似乱数生成器の評価擬似乱数生成器の評価
擬似乱数生成器の評価
 
JVM言語を使ってみようの歌
JVM言語を使ってみようの歌JVM言語を使ってみようの歌
JVM言語を使ってみようの歌
 
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugJDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjug
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 

More from Taku Miyakawa

Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency APITaku Miyakawa
 
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on JavaQuasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on JavaTaku Miyakawa
 
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月Taku Miyakawa
 
Processing LTSV by Apache Pig
Processing LTSV by Apache PigProcessing LTSV by Apache Pig
Processing LTSV by Apache PigTaku Miyakawa
 
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要Java 7 invokedynamic の概要
Java 7 invokedynamic の概要Taku Miyakawa
 
Java オブジェクトの内部構造
Java オブジェクトの内部構造Java オブジェクトの内部構造
Java オブジェクトの内部構造Taku Miyakawa
 
Kink: developing a programming language on the JVM
Kink: developing a programming language on the JVMKink: developing a programming language on the JVM
Kink: developing a programming language on the JVMTaku Miyakawa
 

More from Taku Miyakawa (9)

Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
 
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on JavaQuasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
 
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
 
Java Quine Golf
Java Quine GolfJava Quine Golf
Java Quine Golf
 
Processing LTSV by Apache Pig
Processing LTSV by Apache PigProcessing LTSV by Apache Pig
Processing LTSV by Apache Pig
 
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
 
Java オブジェクトの内部構造
Java オブジェクトの内部構造Java オブジェクトの内部構造
Java オブジェクトの内部構造
 
Kink: developing a programming language on the JVM
Kink: developing a programming language on the JVMKink: developing a programming language on the JVM
Kink: developing a programming language on the JVM
 

Recently uploaded

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Recently uploaded (7)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

言語設計者が意味論を書くときに考えていたこと