SlideShare a Scribd company logo
1 of 33
Download to read offline
Metasepi team meeting #16: 
Safety on ATS language + MCU
Metasepi team meeting #16: 
Safety on ATS language + MCU
Metasepi team meeting #16: 
Safety on ATS language + MCU
Metasepi team meeting #16: 
Safety on ATS language + MCU
Metasepi team meeting #16:
Safety on ATS language + MCU
Kiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi Project
Who am I?Who am I?Who am I?Who am I?Who am I?
☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/
☆ Self employed software engineer☆ Self employed software engineer☆ Self employed software engineer☆ Self employed software engineer☆ Self employed software engineer
☆ Trade name := METASEPI DESIGN☆ Trade name := METASEPI DESIGN☆ Trade name := METASEPI DESIGN☆ Trade name := METASEPI DESIGN☆ Trade name := METASEPI DESIGN
☆ Founder of Metasepi Project☆ Founder of Metasepi Project☆ Founder of Metasepi Project☆ Founder of Metasepi Project☆ Founder of Metasepi Project
☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer
☆ 10 years' experience in developing
OS using NetBSD
☆ 10 years' experience in developing
OS using NetBSD
☆ 10 years' experience in developing
OS using NetBSD
☆ 10 years' experience in developing
OS using NetBSD
☆ 10 years' experience in developing
OS using NetBSD
AgendaAgendaAgendaAgendaAgenda
☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?
☆ [2] How to create Metasepi?☆ [2] How to create Metasepi?☆ [2] How to create Metasepi?☆ [2] How to create Metasepi?☆ [2] How to create Metasepi?
☆ [3] Demo using ATS language☆ [3] Demo using ATS language☆ [3] Demo using ATS language☆ [3] Demo using ATS language☆ [3] Demo using ATS language
☆ [4] What is ATS language?☆ [4] What is ATS language?☆ [4] What is ATS language?☆ [4] What is ATS language?☆ [4] What is ATS language?
☆ [5] Why ATS language is safe?☆ [5] Why ATS language is safe?☆ [5] Why ATS language is safe?☆ [5] Why ATS language is safe?☆ [5] Why ATS language is safe?
☆ [6] ATS programming on MCU☆ [6] ATS programming on MCU☆ [6] ATS programming on MCU☆ [6] ATS programming on MCU☆ [6] ATS programming on MCU
[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?
http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/
☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.
☆ Using ML's or more strong type.☆ Using ML's or more strong type.☆ Using ML's or more strong type.☆ Using ML's or more strong type.☆ Using ML's or more strong type.
Why need Metasepi?Why need Metasepi?Why need Metasepi?Why need Metasepi?Why need Metasepi?
☆ We have already Linux or Windows.☆ We have already Linux or Windows.☆ We have already Linux or Windows.☆ We have already Linux or Windows.☆ We have already Linux or Windows.
☆ But the developers are suffering.☆ But the developers are suffering.☆ But the developers are suffering.☆ But the developers are suffering.☆ But the developers are suffering.
☆ If use the kernel changed by you,☆ If use the kernel changed by you,☆ If use the kernel changed by you,☆ If use the kernel changed by you,☆ If use the kernel changed by you,
☆ you will get many runtime error.☆ you will get many runtime error.☆ you will get many runtime error.☆ you will get many runtime error.☆ you will get many runtime error.
☆ Difficult even to reproduce it.☆ Difficult even to reproduce it.☆ Difficult even to reproduce it.☆ Difficult even to reproduce it.☆ Difficult even to reproduce it.
Doesn't OSS have good quality?Doesn't OSS have good quality?Doesn't OSS have good quality?Doesn't OSS have good quality?Doesn't OSS have good quality?
☆ "The Cathedral and the Bazaar"☆ "The Cathedral and the Bazaar"☆ "The Cathedral and the Bazaar"☆ "The Cathedral and the Bazaar"☆ "The Cathedral and the Bazaar"
☆ "Given enough eyeballs, all bugs are
shallow."
☆ "Given enough eyeballs, all bugs are
shallow."
☆ "Given enough eyeballs, all bugs are
shallow."
☆ "Given enough eyeballs, all bugs are
shallow."
☆ "Given enough eyeballs, all bugs are
shallow."
http://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.html
☆ But if you develop your own product
re-using OSS...
☆ But if you develop your own product
re-using OSS...
☆ But if you develop your own product
re-using OSS...
☆ But if you develop your own product
re-using OSS...
☆ But if you develop your own product
re-using OSS...
Low quality out of OSS umbrellaLow quality out of OSS umbrellaLow quality out of OSS umbrellaLow quality out of OSS umbrellaLow quality out of OSS umbrella
Type safetyType safetyType safetyType safetyType safety
☆ Less runtime errors☆ Less runtime errors☆ Less runtime errors☆ Less runtime errors☆ Less runtime errors
☆ "数理科学的バグ撲滅方法論のすすめ"☆ "数理科学的バグ撲滅方法論のすすめ"☆ "数理科学的バグ撲滅方法論のすすめ"☆ "数理科学的バグ撲滅方法論のすすめ"☆ "数理科学的バグ撲滅方法論のすすめ"
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/
Kernel wants type desperatelyKernel wants type desperatelyKernel wants type desperatelyKernel wants type desperatelyKernel wants type desperately
☆ Kernels are developed with C.☆ Kernels are developed with C.☆ Kernels are developed with C.☆ Kernels are developed with C.☆ Kernels are developed with C.
☆ Error on user space => SEGV☆ Error on user space => SEGV☆ Error on user space => SEGV☆ Error on user space => SEGV☆ Error on user space => SEGV
☆ Error on kernel space => Halt!☆ Error on kernel space => Halt!☆ Error on kernel space => Halt!☆ Error on kernel space => Halt!☆ Error on kernel space => Halt!
☆ Should design kernel with the
greatest care.
☆ Should design kernel with the
greatest care.
☆ Should design kernel with the
greatest care.
☆ Should design kernel with the
greatest care.
☆ Should design kernel with the
greatest care.
☆ C language is safe?☆ C language is safe?☆ C language is safe?☆ C language is safe?☆ C language is safe?
Remember Heartbleed bug?Remember Heartbleed bug?Remember Heartbleed bug?Remember Heartbleed bug?Remember Heartbleed bug?
Should we use safer language than C?Should we use safer language than C?Should we use safer language than C?Should we use safer language than C?Should we use safer language than C?
== In English ==
"Preventing heartbleed bugs with safe programming languages"
http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-
with-safe-languages.html
== In Japanease ==
"安全なプログラミング言語を使って heartbleed を防ぐには"
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
== In English ==
"Preventing heartbleed bugs with safe programming languages"
http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-
with-safe-languages.html
== In Japanease ==
"安全なプログラミング言語を使って heartbleed を防ぐには"
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
== In English ==
"Preventing heartbleed bugs with safe programming languages"
http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-
with-safe-languages.html
== In Japanease ==
"安全なプログラミング言語を使って heartbleed を防ぐには"
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
== In English ==
"Preventing heartbleed bugs with safe programming languages"
http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-
with-safe-languages.html
== In Japanease ==
"安全なプログラミング言語を使って heartbleed を防ぐには"
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
== In English ==
"Preventing heartbleed bugs with safe programming languages"
http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-
with-safe-languages.html
== In Japanease ==
"安全なプログラミング言語を使って heartbleed を防ぐには"
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
"A safer systems programming language
could have prevented the bug."
"A safer systems programming language
could have prevented the bug."
"A safer systems programming language
could have prevented the bug."
"A safer systems programming language
could have prevented the bug."
"A safer systems programming language
could have prevented the bug."
[2] How to create Metasepi?[2] How to create Metasepi?[2] How to create Metasepi?[2] How to create Metasepi?[2] How to create Metasepi?
☆ Language: Strongly typed language☆ Language: Strongly typed language☆ Language: Strongly typed language☆ Language: Strongly typed language☆ Language: Strongly typed language
☆ Base code: NetBSD kernel☆ Base code: NetBSD kernel☆ Base code: NetBSD kernel☆ Base code: NetBSD kernel☆ Base code: NetBSD kernel
☆ Design: Snatch-driven development☆ Design: Snatch-driven development☆ Design: Snatch-driven development☆ Design: Snatch-driven development☆ Design: Snatch-driven development
Snatch-driven development #1Snatch-driven development #1Snatch-driven development #1Snatch-driven development #1Snatch-driven development #1
http://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcher
Snatch-driven development #2Snatch-driven development #2Snatch-driven development #2Snatch-driven development #2Snatch-driven development #2
Iterative developmentIterative developmentIterative developmentIterative developmentIterative development
[3] Demo: ATS on raw Arduino[3] Demo: ATS on raw Arduino[3] Demo: ATS on raw Arduino[3] Demo: ATS on raw Arduino[3] Demo: ATS on raw Arduino
https://github.com/fpiot/arduino-mega2560-atshttps://github.com/fpiot/arduino-mega2560-atshttps://github.com/fpiot/arduino-mega2560-atshttps://github.com/fpiot/arduino-mega2560-atshttps://github.com/fpiot/arduino-mega2560-ats
Demo: ATS on mbed platformDemo: ATS on mbed platformDemo: ATS on mbed platformDemo: ATS on mbed platformDemo: ATS on mbed platform
https://github.com/fpiot/mbed-atshttps://github.com/fpiot/mbed-atshttps://github.com/fpiot/mbed-atshttps://github.com/fpiot/mbed-atshttps://github.com/fpiot/mbed-ats
[4] What is ATS language?[4] What is ATS language?[4] What is ATS language?[4] What is ATS language?[4] What is ATS language?
http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/
☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML
☆ Dependent types☆ Dependent types☆ Dependent types☆ Dependent types☆ Dependent types
☆ Linear types☆ Linear types☆ Linear types☆ Linear types☆ Linear types
☆ Without any runtime☆ Without any runtime☆ Without any runtime☆ Without any runtime☆ Without any runtime
☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC
ATS compile flowATS compile flowATS compile flowATS compile flowATS compile flow
[5] Why ATS language is safe?[5] Why ATS language is safe?[5] Why ATS language is safe?[5] Why ATS language is safe?[5] Why ATS language is safe?
☆ Line is at between caller and callee☆ Line is at between caller and callee☆ Line is at between caller and callee☆ Line is at between caller and callee☆ Line is at between caller and callee
☆ ATS applies type to the line☆ ATS applies type to the line☆ ATS applies type to the line☆ ATS applies type to the line☆ ATS applies type to the line
☆ Type can enforce invariant in them☆ Type can enforce invariant in them☆ Type can enforce invariant in them☆ Type can enforce invariant in them☆ Type can enforce invariant in them
Usage of Linear ListUsage of Linear ListUsage of Linear ListUsage of Linear ListUsage of Linear List
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
val () = free l4
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
$ ./sample_list
l1 := [1, 2] / l2 := [3, 4]
l4 := [4, 3, 2, 1]
length(l4) := 4
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
val () = free l4
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
$ ./sample_list
l1 := [1, 2] / l2 := [3, 4]
l4 := [4, 3, 2, 1]
length(l4) := 4
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
val () = free l4
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
$ ./sample_list
l1 := [1, 2] / l2 := [3, 4]
l4 := [4, 3, 2, 1]
length(l4) := 4
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
val () = free l4
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
$ ./sample_list
l1 := [1, 2] / l2 := [3, 4]
l4 := [4, 3, 2, 1]
length(l4) := 4
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
val () = free l4
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
$ ./sample_list
l1 := [1, 2] / l2 := [3, 4]
l4 := [4, 3, 2, 1]
length(l4) := 4
Compile error: without freeCompile error: without freeCompile error: without freeCompile error: without freeCompile error: without free
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
// val () = free l4 // <= Changed
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
--snip--
The 2nd translation (binding) of [sample_list.dats] is
successfully completed!
/home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396
(line=12, offs=2): error(3): the linear dynamic variable [l4$3440
(-1)] needs to be consumed but it is preserved with the type
[S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar
(4102)), S2EVar(4103))] instead.
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
// val () = free l4 // <= Changed
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
--snip--
The 2nd translation (binding) of [sample_list.dats] is
successfully completed!
/home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396
(line=12, offs=2): error(3): the linear dynamic variable [l4$3440
(-1)] needs to be consumed but it is preserved with the type
[S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar
(4102)), S2EVar(4103))] instead.
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
// val () = free l4 // <= Changed
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
--snip--
The 2nd translation (binding) of [sample_list.dats] is
successfully completed!
/home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396
(line=12, offs=2): error(3): the linear dynamic variable [l4$3440
(-1)] needs to be consumed but it is preserved with the type
[S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar
(4102)), S2EVar(4103))] instead.
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
// val () = free l4 // <= Changed
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
--snip--
The 2nd translation (binding) of [sample_list.dats] is
successfully completed!
/home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396
(line=12, offs=2): error(3): the linear dynamic variable [l4$3440
(-1)] needs to be consumed but it is preserved with the type
[S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar
(4102)), S2EVar(4103))] instead.
$ vi sample_list.dats
#include "share/atspre_staload.hats"
implement main0 () = {
val l1 = list_vt_make_pair<int> (1, 2)
val l2 = list_vt_make_pair<int> (3, 4)
val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]")
val l3 = list_vt_append (l1, l2)
val l4 = list_vt_reverse l3
val () = println! ("l4 := [", l4, "]")
val () = println! ("length(l4) := ", length l4)
// val () = free l4 // <= Changed
}
$ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats
--snip--
The 2nd translation (binding) of [sample_list.dats] is
successfully completed!
/home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396
(line=12, offs=2): error(3): the linear dynamic variable [l4$3440
(-1)] needs to be consumed but it is preserved with the type
[S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar
(4102)), S2EVar(4103))] instead.
Type of Linear ListType of Linear ListType of Linear ListType of Linear ListType of Linear List
(* File: prelude/basics_dyn.sats *)
datavtype
list_vt0ype_int_vtype (a:vt@ype+, int) =
| {n:int | n >= 0}
list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n))
| list_vt_nil (a, 0) of ()
stadef list_vt = list_vt0ype_int_vtype
(* File: prelude/basics_dyn.sats *)
datavtype
list_vt0ype_int_vtype (a:vt@ype+, int) =
| {n:int | n >= 0}
list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n))
| list_vt_nil (a, 0) of ()
stadef list_vt = list_vt0ype_int_vtype
(* File: prelude/basics_dyn.sats *)
datavtype
list_vt0ype_int_vtype (a:vt@ype+, int) =
| {n:int | n >= 0}
list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n))
| list_vt_nil (a, 0) of ()
stadef list_vt = list_vt0ype_int_vtype
(* File: prelude/basics_dyn.sats *)
datavtype
list_vt0ype_int_vtype (a:vt@ype+, int) =
| {n:int | n >= 0}
list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n))
| list_vt_nil (a, 0) of ()
stadef list_vt = list_vt0ype_int_vtype
(* File: prelude/basics_dyn.sats *)
datavtype
list_vt0ype_int_vtype (a:vt@ype+, int) =
| {n:int | n >= 0}
list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n))
| list_vt_nil (a, 0) of ()
stadef list_vt = list_vt0ype_int_vtype
make_pairmake_pairmake_pairmake_pairmake_pair
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2)
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2)
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2)
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2)
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2)
lengthlengthlengthlengthlength
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n
appendappendappendappendappend
(* File: prelude/SATS/list_vt.sats *)
fun{
a:vt0p
} list_vt_append
{n1,n2:int} (
xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2)
) :<!wrt> list_vt (a, n1+n2)
(* File: prelude/SATS/list_vt.sats *)
fun{
a:vt0p
} list_vt_append
{n1,n2:int} (
xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2)
) :<!wrt> list_vt (a, n1+n2)
(* File: prelude/SATS/list_vt.sats *)
fun{
a:vt0p
} list_vt_append
{n1,n2:int} (
xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2)
) :<!wrt> list_vt (a, n1+n2)
(* File: prelude/SATS/list_vt.sats *)
fun{
a:vt0p
} list_vt_append
{n1,n2:int} (
xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2)
) :<!wrt> list_vt (a, n1+n2)
(* File: prelude/SATS/list_vt.sats *)
fun{
a:vt0p
} list_vt_append
{n1,n2:int} (
xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2)
) :<!wrt> list_vt (a, n1+n2)
reversereversereversereversereverse
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_reverse{n:int}
(xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_reverse{n:int}
(xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_reverse{n:int}
(xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_reverse{n:int}
(xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:vt0p}
list_vt_reverse{n:int}
(xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n)
freefreefreefreefree
(* File: prelude/basics_dyn.sats *)
vtypedef
List_vt (a:vt0p) = [n:int] list_vt (a, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:t0p}
list_vt_free (xs: List_vt (INV(x))):<!wrt> void
overload free with list_vt_free
(* File: prelude/basics_dyn.sats *)
vtypedef
List_vt (a:vt0p) = [n:int] list_vt (a, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:t0p}
list_vt_free (xs: List_vt (INV(x))):<!wrt> void
overload free with list_vt_free
(* File: prelude/basics_dyn.sats *)
vtypedef
List_vt (a:vt0p) = [n:int] list_vt (a, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:t0p}
list_vt_free (xs: List_vt (INV(x))):<!wrt> void
overload free with list_vt_free
(* File: prelude/basics_dyn.sats *)
vtypedef
List_vt (a:vt0p) = [n:int] list_vt (a, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:t0p}
list_vt_free (xs: List_vt (INV(x))):<!wrt> void
overload free with list_vt_free
(* File: prelude/basics_dyn.sats *)
vtypedef
List_vt (a:vt0p) = [n:int] list_vt (a, n)
(* File: prelude/SATS/list_vt.sats *)
fun{x:t0p}
list_vt_free (xs: List_vt (INV(x))):<!wrt> void
overload free with list_vt_free
[6] ATS programming on MCU[6] ATS programming on MCU[6] ATS programming on MCU[6] ATS programming on MCU[6] ATS programming on MCU
You can choose the following 2-way.You can choose the following 2-way.You can choose the following 2-way.You can choose the following 2-way.You can choose the following 2-way.
On BareMetal hardwareOn BareMetal hardwareOn BareMetal hardwareOn BareMetal hardwareOn BareMetal hardware
☆ Arduino (8-bit AVR)☆ Arduino (8-bit AVR)☆ Arduino (8-bit AVR)☆ Arduino (8-bit AVR)☆ Arduino (8-bit AVR)
☆ Cortex-M (32-bit ARM)☆ Cortex-M (32-bit ARM)☆ Cortex-M (32-bit ARM)☆ Cortex-M (32-bit ARM)☆ Cortex-M (32-bit ARM)
On RTOSOn RTOSOn RTOSOn RTOSOn RTOS
☆ mbed☆ mbed☆ mbed☆ mbed☆ mbed
☆ ChibiOS/RT☆ ChibiOS/RT☆ ChibiOS/RT☆ ChibiOS/RT☆ ChibiOS/RT
ATS on BareMetal hardwareATS on BareMetal hardwareATS on BareMetal hardwareATS on BareMetal hardwareATS on BareMetal hardware
Read/write memory using pointer.Read/write memory using pointer.Read/write memory using pointer.Read/write memory using pointer.Read/write memory using pointer.
ATS on RTOSATS on RTOSATS on RTOSATS on RTOSATS on RTOS
Interaction with C.Interaction with C.Interaction with C.Interaction with C.Interaction with C.
Japan ATS User GroupJapan ATS User GroupJapan ATS User GroupJapan ATS User GroupJapan ATS User Group
http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/
☆ In a parody of http://jaws-ug.jp/☆ In a parody of http://jaws-ug.jp/☆ In a parody of http://jaws-ug.jp/☆ In a parody of http://jaws-ug.jp/☆ In a parody of http://jaws-ug.jp/
☆ Translate ATS docs into Japanese☆ Translate ATS docs into Japanese☆ Translate ATS docs into Japanese☆ Translate ATS docs into Japanese☆ Translate ATS docs into Japanese
☆ Push the Facebook like button, now!☆ Push the Facebook like button, now!☆ Push the Facebook like button, now!☆ Push the Facebook like button, now!☆ Push the Facebook like button, now!
Many translated documentsMany translated documentsMany translated documentsMany translated documentsMany translated documents
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* MLプログラマ向けATS言語ガイド
https://github.com/jats-ug/translate/blob/master/Web/
cs.likai.org/ats/ml-programmers-guide-to-ats.md
* 安全なプログラミング言語を使って heartbleed を防ぐには
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
* 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング
https://github.com/jats-ug/translate/blob/master/Paper/SPPSV-
padl05/SPPSV-padl05.md
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* MLプログラマ向けATS言語ガイド
https://github.com/jats-ug/translate/blob/master/Web/
cs.likai.org/ats/ml-programmers-guide-to-ats.md
* 安全なプログラミング言語を使って heartbleed を防ぐには
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
* 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング
https://github.com/jats-ug/translate/blob/master/Paper/SPPSV-
padl05/SPPSV-padl05.md
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* MLプログラマ向けATS言語ガイド
https://github.com/jats-ug/translate/blob/master/Web/
cs.likai.org/ats/ml-programmers-guide-to-ats.md
* 安全なプログラミング言語を使って heartbleed を防ぐには
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
* 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング
https://github.com/jats-ug/translate/blob/master/Paper/SPPSV-
padl05/SPPSV-padl05.md
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* MLプログラマ向けATS言語ガイド
https://github.com/jats-ug/translate/blob/master/Web/
cs.likai.org/ats/ml-programmers-guide-to-ats.md
* 安全なプログラミング言語を使って heartbleed を防ぐには
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
* 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング
https://github.com/jats-ug/translate/blob/master/Paper/SPPSV-
padl05/SPPSV-padl05.md
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* MLプログラマ向けATS言語ガイド
https://github.com/jats-ug/translate/blob/master/Web/
cs.likai.org/ats/ml-programmers-guide-to-ats.md
* 安全なプログラミング言語を使って heartbleed を防ぐには
https://github.com/jats-ug/translate/blob/master/Web/
bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe-
languages.md
* 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング
https://github.com/jats-ug/translate/blob/master/Paper/SPPSV-
padl05/SPPSV-padl05.md
Follow me!Follow me!Follow me!Follow me!Follow me!
https://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ug

More Related Content

What's hot

Real-time OS system state captured by ATS language
Real-time OS system state captured by ATS languageReal-time OS system state captured by ATS language
Real-time OS system state captured by ATS languageKiwamu Okabe
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq usersKiwamu Okabe
 
Functional IoT: Introduction
Functional IoT: IntroductionFunctional IoT: Introduction
Functional IoT: IntroductionKiwamu Okabe
 
Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerKiwamu Okabe
 
ATS programming on ESP8266
ATS programming on ESP8266ATS programming on ESP8266
ATS programming on ESP8266Kiwamu Okabe
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS languageKiwamu Okabe
 
Metasepi team meeting #19: ATS application on Arduino
Metasepi team meeting #19: ATS application on ArduinoMetasepi team meeting #19: ATS application on Arduino
Metasepi team meeting #19: ATS application on ArduinoKiwamu Okabe
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi projectKiwamu Okabe
 
Emacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, againEmacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, againKiwamu Okabe
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCKiwamu Okabe
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Chang W. Doh
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsParadigma Digital
 
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...François-Guillaume Ribreau
 
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLONGareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLONOutlyer
 
Managing a R&D Lab with Foreman
Managing a R&D Lab with ForemanManaging a R&D Lab with Foreman
Managing a R&D Lab with ForemanJulien Pivotto
 
Massive applications in node.js
Massive applications in node.jsMassive applications in node.js
Massive applications in node.jsJan Jongboom
 
Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Elizaveta Shashkova
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pryCreditas
 

What's hot (20)

Real-time OS system state captured by ATS language
Real-time OS system state captured by ATS languageReal-time OS system state captured by ATS language
Real-time OS system state captured by ATS language
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq users
 
Functional IoT: Introduction
Functional IoT: IntroductionFunctional IoT: Introduction
Functional IoT: Introduction
 
Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontroller
 
ATS programming on ESP8266
ATS programming on ESP8266ATS programming on ESP8266
ATS programming on ESP8266
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS language
 
Metasepi team meeting #19: ATS application on Arduino
Metasepi team meeting #19: ATS application on ArduinoMetasepi team meeting #19: ATS application on Arduino
Metasepi team meeting #19: ATS application on Arduino
 
ATS2 updates 2017
ATS2 updates 2017ATS2 updates 2017
ATS2 updates 2017
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi project
 
Emacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, againEmacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, again
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
 
Ruby - The Hard Bits
Ruby - The Hard BitsRuby - The Hard Bits
Ruby - The Hard Bits
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projects
 
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...
 
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLONGareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
 
Managing a R&D Lab with Foreman
Managing a R&D Lab with ForemanManaging a R&D Lab with Foreman
Managing a R&D Lab with Foreman
 
Massive applications in node.js
Massive applications in node.jsMassive applications in node.js
Massive applications in node.js
 
Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pry
 

Similar to Metasepi team meeting #16: Safety on ATS language + MCU

Amazon Elastic Container Service for Kubernetes (Amazon EKS)
Amazon Elastic Container Service for Kubernetes (Amazon EKS)Amazon Elastic Container Service for Kubernetes (Amazon EKS)
Amazon Elastic Container Service for Kubernetes (Amazon EKS)Amazon Web Services
 
【IVS CTO Night & Day】Amazon Container Services
【IVS CTO Night & Day】Amazon Container Services【IVS CTO Night & Day】Amazon Container Services
【IVS CTO Night & Day】Amazon Container ServicesAmazon Web Services Japan
 
Metasepi team meeting: Ajhc Project Overview
Metasepi team meeting: Ajhc Project OverviewMetasepi team meeting: Ajhc Project Overview
Metasepi team meeting: Ajhc Project OverviewKiwamu Okabe
 
Dear compiler please don't be my nanny v2
Dear compiler  please don't be my nanny v2Dear compiler  please don't be my nanny v2
Dear compiler please don't be my nanny v2Dino Dini
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainKen Collins
 
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진VMware Tanzu Korea
 
Migrating Web SDK from JS to TS
Migrating Web SDK from JS to TSMigrating Web SDK from JS to TS
Migrating Web SDK from JS to TSGrigory Petrov
 
Introduction to EKS (AWS User Group Slovakia)
Introduction to EKS (AWS User Group Slovakia)Introduction to EKS (AWS User Group Slovakia)
Introduction to EKS (AWS User Group Slovakia)Vladimir Simek
 
OOScss Architecture For Rails Apps
OOScss Architecture For Rails AppsOOScss Architecture For Rails Apps
OOScss Architecture For Rails AppsNetguru
 
Dev secops opsec, devsec, devops ?
Dev secops opsec, devsec, devops ?Dev secops opsec, devsec, devops ?
Dev secops opsec, devsec, devops ?Kris Buytaert
 
CPU vulnerabilities - where are we now?
CPU vulnerabilities - where are we now?CPU vulnerabilities - where are we now?
CPU vulnerabilities - where are we now?DefCamp
 
Updates on Offline: “My AppCache won’t come back” and “ServiceWorker Tricks ...
Updates on Offline: “My AppCache won’t come back” and  “ServiceWorker Tricks ...Updates on Offline: “My AppCache won’t come back” and  “ServiceWorker Tricks ...
Updates on Offline: “My AppCache won’t come back” and “ServiceWorker Tricks ...Natasha Rooney
 
TDC2016POA | Trilha JavaScript - O Rei dos Plugins - Tornando-se produtível e...
TDC2016POA | Trilha JavaScript - O Rei dos Plugins - Tornando-se produtível e...TDC2016POA | Trilha JavaScript - O Rei dos Plugins - Tornando-se produtível e...
TDC2016POA | Trilha JavaScript - O Rei dos Plugins - Tornando-se produtível e...tdc-globalcode
 
Abusing the Cloud for Fun and Profit
Abusing the Cloud for Fun and ProfitAbusing the Cloud for Fun and Profit
Abusing the Cloud for Fun and ProfitAlan Pinstein
 
TDC 2020 - Implementing a Mini-Language
TDC 2020 - Implementing a Mini-LanguageTDC 2020 - Implementing a Mini-Language
TDC 2020 - Implementing a Mini-LanguageLuciano Sabença
 
Building serverless-applications
Building serverless-applicationsBuilding serverless-applications
Building serverless-applicationsAndrii Soldatenko
 
Spring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good partsSpring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good partsJarek Ratajski
 

Similar to Metasepi team meeting #16: Safety on ATS language + MCU (20)

Prototyping: Helping to take away the suck
Prototyping: Helping to take away the suckPrototyping: Helping to take away the suck
Prototyping: Helping to take away the suck
 
Amazon Elastic Container Service for Kubernetes (Amazon EKS)
Amazon Elastic Container Service for Kubernetes (Amazon EKS)Amazon Elastic Container Service for Kubernetes (Amazon EKS)
Amazon Elastic Container Service for Kubernetes (Amazon EKS)
 
Kubernetes on AWS
Kubernetes on AWSKubernetes on AWS
Kubernetes on AWS
 
Containers - Amazon EKS
Containers - Amazon EKSContainers - Amazon EKS
Containers - Amazon EKS
 
【IVS CTO Night & Day】Amazon Container Services
【IVS CTO Night & Day】Amazon Container Services【IVS CTO Night & Day】Amazon Container Services
【IVS CTO Night & Day】Amazon Container Services
 
Metasepi team meeting: Ajhc Project Overview
Metasepi team meeting: Ajhc Project OverviewMetasepi team meeting: Ajhc Project Overview
Metasepi team meeting: Ajhc Project Overview
 
Dear compiler please don't be my nanny v2
Dear compiler  please don't be my nanny v2Dear compiler  please don't be my nanny v2
Dear compiler please don't be my nanny v2
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진
 
Migrating Web SDK from JS to TS
Migrating Web SDK from JS to TSMigrating Web SDK from JS to TS
Migrating Web SDK from JS to TS
 
Introduction to EKS (AWS User Group Slovakia)
Introduction to EKS (AWS User Group Slovakia)Introduction to EKS (AWS User Group Slovakia)
Introduction to EKS (AWS User Group Slovakia)
 
OOScss Architecture For Rails Apps
OOScss Architecture For Rails AppsOOScss Architecture For Rails Apps
OOScss Architecture For Rails Apps
 
Dev secops opsec, devsec, devops ?
Dev secops opsec, devsec, devops ?Dev secops opsec, devsec, devops ?
Dev secops opsec, devsec, devops ?
 
CPU vulnerabilities - where are we now?
CPU vulnerabilities - where are we now?CPU vulnerabilities - where are we now?
CPU vulnerabilities - where are we now?
 
Updates on Offline: “My AppCache won’t come back” and “ServiceWorker Tricks ...
Updates on Offline: “My AppCache won’t come back” and  “ServiceWorker Tricks ...Updates on Offline: “My AppCache won’t come back” and  “ServiceWorker Tricks ...
Updates on Offline: “My AppCache won’t come back” and “ServiceWorker Tricks ...
 
TDC2016POA | Trilha JavaScript - O Rei dos Plugins - Tornando-se produtível e...
TDC2016POA | Trilha JavaScript - O Rei dos Plugins - Tornando-se produtível e...TDC2016POA | Trilha JavaScript - O Rei dos Plugins - Tornando-se produtível e...
TDC2016POA | Trilha JavaScript - O Rei dos Plugins - Tornando-se produtível e...
 
Abusing the Cloud for Fun and Profit
Abusing the Cloud for Fun and ProfitAbusing the Cloud for Fun and Profit
Abusing the Cloud for Fun and Profit
 
TDC 2020 - Implementing a Mini-Language
TDC 2020 - Implementing a Mini-LanguageTDC 2020 - Implementing a Mini-Language
TDC 2020 - Implementing a Mini-Language
 
Building serverless-applications
Building serverless-applicationsBuilding serverless-applications
Building serverless-applications
 
Spring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good partsSpring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good parts
 

Recently uploaded

Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 

Recently uploaded (20)

Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

Metasepi team meeting #16: Safety on ATS language + MCU

  • 1. Metasepi team meeting #16:  Safety on ATS language + MCU Metasepi team meeting #16:  Safety on ATS language + MCU Metasepi team meeting #16:  Safety on ATS language + MCU Metasepi team meeting #16:  Safety on ATS language + MCU Metasepi team meeting #16: Safety on ATS language + MCU Kiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi Project
  • 2. Who am I?Who am I?Who am I?Who am I?Who am I? ☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/ ☆ Self employed software engineer☆ Self employed software engineer☆ Self employed software engineer☆ Self employed software engineer☆ Self employed software engineer ☆ Trade name := METASEPI DESIGN☆ Trade name := METASEPI DESIGN☆ Trade name := METASEPI DESIGN☆ Trade name := METASEPI DESIGN☆ Trade name := METASEPI DESIGN ☆ Founder of Metasepi Project☆ Founder of Metasepi Project☆ Founder of Metasepi Project☆ Founder of Metasepi Project☆ Founder of Metasepi Project ☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer ☆ 10 years' experience in developing OS using NetBSD ☆ 10 years' experience in developing OS using NetBSD ☆ 10 years' experience in developing OS using NetBSD ☆ 10 years' experience in developing OS using NetBSD ☆ 10 years' experience in developing OS using NetBSD
  • 3. AgendaAgendaAgendaAgendaAgenda ☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi? ☆ [2] How to create Metasepi?☆ [2] How to create Metasepi?☆ [2] How to create Metasepi?☆ [2] How to create Metasepi?☆ [2] How to create Metasepi? ☆ [3] Demo using ATS language☆ [3] Demo using ATS language☆ [3] Demo using ATS language☆ [3] Demo using ATS language☆ [3] Demo using ATS language ☆ [4] What is ATS language?☆ [4] What is ATS language?☆ [4] What is ATS language?☆ [4] What is ATS language?☆ [4] What is ATS language? ☆ [5] Why ATS language is safe?☆ [5] Why ATS language is safe?☆ [5] Why ATS language is safe?☆ [5] Why ATS language is safe?☆ [5] Why ATS language is safe? ☆ [6] ATS programming on MCU☆ [6] ATS programming on MCU☆ [6] ATS programming on MCU☆ [6] ATS programming on MCU☆ [6] ATS programming on MCU
  • 4. [1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi? http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/ ☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type. ☆ Using ML's or more strong type.☆ Using ML's or more strong type.☆ Using ML's or more strong type.☆ Using ML's or more strong type.☆ Using ML's or more strong type.
  • 5. Why need Metasepi?Why need Metasepi?Why need Metasepi?Why need Metasepi?Why need Metasepi? ☆ We have already Linux or Windows.☆ We have already Linux or Windows.☆ We have already Linux or Windows.☆ We have already Linux or Windows.☆ We have already Linux or Windows. ☆ But the developers are suffering.☆ But the developers are suffering.☆ But the developers are suffering.☆ But the developers are suffering.☆ But the developers are suffering. ☆ If use the kernel changed by you,☆ If use the kernel changed by you,☆ If use the kernel changed by you,☆ If use the kernel changed by you,☆ If use the kernel changed by you, ☆ you will get many runtime error.☆ you will get many runtime error.☆ you will get many runtime error.☆ you will get many runtime error.☆ you will get many runtime error. ☆ Difficult even to reproduce it.☆ Difficult even to reproduce it.☆ Difficult even to reproduce it.☆ Difficult even to reproduce it.☆ Difficult even to reproduce it.
  • 6. Doesn't OSS have good quality?Doesn't OSS have good quality?Doesn't OSS have good quality?Doesn't OSS have good quality?Doesn't OSS have good quality? ☆ "The Cathedral and the Bazaar"☆ "The Cathedral and the Bazaar"☆ "The Cathedral and the Bazaar"☆ "The Cathedral and the Bazaar"☆ "The Cathedral and the Bazaar" ☆ "Given enough eyeballs, all bugs are shallow." ☆ "Given enough eyeballs, all bugs are shallow." ☆ "Given enough eyeballs, all bugs are shallow." ☆ "Given enough eyeballs, all bugs are shallow." ☆ "Given enough eyeballs, all bugs are shallow." http://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.html ☆ But if you develop your own product re-using OSS... ☆ But if you develop your own product re-using OSS... ☆ But if you develop your own product re-using OSS... ☆ But if you develop your own product re-using OSS... ☆ But if you develop your own product re-using OSS...
  • 7. Low quality out of OSS umbrellaLow quality out of OSS umbrellaLow quality out of OSS umbrellaLow quality out of OSS umbrellaLow quality out of OSS umbrella
  • 8. Type safetyType safetyType safetyType safetyType safety ☆ Less runtime errors☆ Less runtime errors☆ Less runtime errors☆ Less runtime errors☆ Less runtime errors ☆ "数理科学的バグ撲滅方法論のすすめ"☆ "数理科学的バグ撲滅方法論のすすめ"☆ "数理科学的バグ撲滅方法論のすすめ"☆ "数理科学的バグ撲滅方法論のすすめ"☆ "数理科学的バグ撲滅方法論のすすめ" http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/
  • 9. Kernel wants type desperatelyKernel wants type desperatelyKernel wants type desperatelyKernel wants type desperatelyKernel wants type desperately ☆ Kernels are developed with C.☆ Kernels are developed with C.☆ Kernels are developed with C.☆ Kernels are developed with C.☆ Kernels are developed with C. ☆ Error on user space => SEGV☆ Error on user space => SEGV☆ Error on user space => SEGV☆ Error on user space => SEGV☆ Error on user space => SEGV ☆ Error on kernel space => Halt!☆ Error on kernel space => Halt!☆ Error on kernel space => Halt!☆ Error on kernel space => Halt!☆ Error on kernel space => Halt! ☆ Should design kernel with the greatest care. ☆ Should design kernel with the greatest care. ☆ Should design kernel with the greatest care. ☆ Should design kernel with the greatest care. ☆ Should design kernel with the greatest care. ☆ C language is safe?☆ C language is safe?☆ C language is safe?☆ C language is safe?☆ C language is safe?
  • 10. Remember Heartbleed bug?Remember Heartbleed bug?Remember Heartbleed bug?Remember Heartbleed bug?Remember Heartbleed bug? Should we use safer language than C?Should we use safer language than C?Should we use safer language than C?Should we use safer language than C?Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages" http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs- with-safe-languages.html == In Japanease == "安全なプログラミング言語を使って heartbleed を防ぐには" https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md == In English == "Preventing heartbleed bugs with safe programming languages" http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs- with-safe-languages.html == In Japanease == "安全なプログラミング言語を使って heartbleed を防ぐには" https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md == In English == "Preventing heartbleed bugs with safe programming languages" http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs- with-safe-languages.html == In Japanease == "安全なプログラミング言語を使って heartbleed を防ぐには" https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md == In English == "Preventing heartbleed bugs with safe programming languages" http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs- with-safe-languages.html == In Japanease == "安全なプログラミング言語を使って heartbleed を防ぐには" https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md == In English == "Preventing heartbleed bugs with safe programming languages" http://bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs- with-safe-languages.html == In Japanease == "安全なプログラミング言語を使って heartbleed を防ぐには" https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md "A safer systems programming language could have prevented the bug." "A safer systems programming language could have prevented the bug." "A safer systems programming language could have prevented the bug." "A safer systems programming language could have prevented the bug." "A safer systems programming language could have prevented the bug."
  • 11. [2] How to create Metasepi?[2] How to create Metasepi?[2] How to create Metasepi?[2] How to create Metasepi?[2] How to create Metasepi? ☆ Language: Strongly typed language☆ Language: Strongly typed language☆ Language: Strongly typed language☆ Language: Strongly typed language☆ Language: Strongly typed language ☆ Base code: NetBSD kernel☆ Base code: NetBSD kernel☆ Base code: NetBSD kernel☆ Base code: NetBSD kernel☆ Base code: NetBSD kernel ☆ Design: Snatch-driven development☆ Design: Snatch-driven development☆ Design: Snatch-driven development☆ Design: Snatch-driven development☆ Design: Snatch-driven development
  • 12. Snatch-driven development #1Snatch-driven development #1Snatch-driven development #1Snatch-driven development #1Snatch-driven development #1 http://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcher
  • 13. Snatch-driven development #2Snatch-driven development #2Snatch-driven development #2Snatch-driven development #2Snatch-driven development #2
  • 14. Iterative developmentIterative developmentIterative developmentIterative developmentIterative development
  • 15. [3] Demo: ATS on raw Arduino[3] Demo: ATS on raw Arduino[3] Demo: ATS on raw Arduino[3] Demo: ATS on raw Arduino[3] Demo: ATS on raw Arduino https://github.com/fpiot/arduino-mega2560-atshttps://github.com/fpiot/arduino-mega2560-atshttps://github.com/fpiot/arduino-mega2560-atshttps://github.com/fpiot/arduino-mega2560-atshttps://github.com/fpiot/arduino-mega2560-ats
  • 16. Demo: ATS on mbed platformDemo: ATS on mbed platformDemo: ATS on mbed platformDemo: ATS on mbed platformDemo: ATS on mbed platform https://github.com/fpiot/mbed-atshttps://github.com/fpiot/mbed-atshttps://github.com/fpiot/mbed-atshttps://github.com/fpiot/mbed-atshttps://github.com/fpiot/mbed-ats
  • 17. [4] What is ATS language?[4] What is ATS language?[4] What is ATS language?[4] What is ATS language?[4] What is ATS language? http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/ ☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML ☆ Dependent types☆ Dependent types☆ Dependent types☆ Dependent types☆ Dependent types ☆ Linear types☆ Linear types☆ Linear types☆ Linear types☆ Linear types ☆ Without any runtime☆ Without any runtime☆ Without any runtime☆ Without any runtime☆ Without any runtime ☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC
  • 18. ATS compile flowATS compile flowATS compile flowATS compile flowATS compile flow
  • 19. [5] Why ATS language is safe?[5] Why ATS language is safe?[5] Why ATS language is safe?[5] Why ATS language is safe?[5] Why ATS language is safe? ☆ Line is at between caller and callee☆ Line is at between caller and callee☆ Line is at between caller and callee☆ Line is at between caller and callee☆ Line is at between caller and callee ☆ ATS applies type to the line☆ ATS applies type to the line☆ ATS applies type to the line☆ ATS applies type to the line☆ ATS applies type to the line ☆ Type can enforce invariant in them☆ Type can enforce invariant in them☆ Type can enforce invariant in them☆ Type can enforce invariant in them☆ Type can enforce invariant in them
  • 20. Usage of Linear ListUsage of Linear ListUsage of Linear ListUsage of Linear ListUsage of Linear List $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) val () = free l4 } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats $ ./sample_list l1 := [1, 2] / l2 := [3, 4] l4 := [4, 3, 2, 1] length(l4) := 4 $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) val () = free l4 } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats $ ./sample_list l1 := [1, 2] / l2 := [3, 4] l4 := [4, 3, 2, 1] length(l4) := 4 $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) val () = free l4 } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats $ ./sample_list l1 := [1, 2] / l2 := [3, 4] l4 := [4, 3, 2, 1] length(l4) := 4 $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) val () = free l4 } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats $ ./sample_list l1 := [1, 2] / l2 := [3, 4] l4 := [4, 3, 2, 1] length(l4) := 4 $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) val () = free l4 } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats $ ./sample_list l1 := [1, 2] / l2 := [3, 4] l4 := [4, 3, 2, 1] length(l4) := 4
  • 21. Compile error: without freeCompile error: without freeCompile error: without freeCompile error: without freeCompile error: without free $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) // val () = free l4 // <= Changed } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats --snip-- The 2nd translation (binding) of [sample_list.dats] is successfully completed! /home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396 (line=12, offs=2): error(3): the linear dynamic variable [l4$3440 (-1)] needs to be consumed but it is preserved with the type [S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar (4102)), S2EVar(4103))] instead. $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) // val () = free l4 // <= Changed } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats --snip-- The 2nd translation (binding) of [sample_list.dats] is successfully completed! /home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396 (line=12, offs=2): error(3): the linear dynamic variable [l4$3440 (-1)] needs to be consumed but it is preserved with the type [S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar (4102)), S2EVar(4103))] instead. $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) // val () = free l4 // <= Changed } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats --snip-- The 2nd translation (binding) of [sample_list.dats] is successfully completed! /home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396 (line=12, offs=2): error(3): the linear dynamic variable [l4$3440 (-1)] needs to be consumed but it is preserved with the type [S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar (4102)), S2EVar(4103))] instead. $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) // val () = free l4 // <= Changed } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats --snip-- The 2nd translation (binding) of [sample_list.dats] is successfully completed! /home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396 (line=12, offs=2): error(3): the linear dynamic variable [l4$3440 (-1)] needs to be consumed but it is preserved with the type [S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar (4102)), S2EVar(4103))] instead. $ vi sample_list.dats #include "share/atspre_staload.hats" implement main0 () = { val l1 = list_vt_make_pair<int> (1, 2) val l2 = list_vt_make_pair<int> (3, 4) val () = println! ("l1 := [", l1, "] / l2 := [", l2, "]") val l3 = list_vt_append (l1, l2) val l4 = list_vt_reverse l3 val () = println! ("l4 := [", l4, "]") val () = println! ("length(l4) := ", length l4) // val () = free l4 // <= Changed } $ patscc -DATS_MEMALLOC_LIBC -o sample_list sample_list.dats --snip-- The 2nd translation (binding) of [sample_list.dats] is successfully completed! /home/kiwamu/tmp/sample_list.dats: 59(line=2, offs=22) -- 396 (line=12, offs=2): error(3): the linear dynamic variable [l4$3440 (-1)] needs to be consumed but it is preserved with the type [S2Eapp(S2Ecst(list_vt0ype_int_vtype); S2Eapp(S2Ecst(INV); S2EVar (4102)), S2EVar(4103))] instead.
  • 22. Type of Linear ListType of Linear ListType of Linear ListType of Linear ListType of Linear List (* File: prelude/basics_dyn.sats *) datavtype list_vt0ype_int_vtype (a:vt@ype+, int) = | {n:int | n >= 0} list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n)) | list_vt_nil (a, 0) of () stadef list_vt = list_vt0ype_int_vtype (* File: prelude/basics_dyn.sats *) datavtype list_vt0ype_int_vtype (a:vt@ype+, int) = | {n:int | n >= 0} list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n)) | list_vt_nil (a, 0) of () stadef list_vt = list_vt0ype_int_vtype (* File: prelude/basics_dyn.sats *) datavtype list_vt0ype_int_vtype (a:vt@ype+, int) = | {n:int | n >= 0} list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n)) | list_vt_nil (a, 0) of () stadef list_vt = list_vt0ype_int_vtype (* File: prelude/basics_dyn.sats *) datavtype list_vt0ype_int_vtype (a:vt@ype+, int) = | {n:int | n >= 0} list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n)) | list_vt_nil (a, 0) of () stadef list_vt = list_vt0ype_int_vtype (* File: prelude/basics_dyn.sats *) datavtype list_vt0ype_int_vtype (a:vt@ype+, int) = | {n:int | n >= 0} list_vt_cons (a, n+1) of (a, list_vt0ype_int_vtype (a, n)) | list_vt_nil (a, 0) of () stadef list_vt = list_vt0ype_int_vtype
  • 23. make_pairmake_pairmake_pairmake_pairmake_pair (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2) (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2) (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2) (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2) (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_make_pair (x1: x, x2: x):<!wrt> list_vt (x, 2)
  • 24. lengthlengthlengthlengthlength (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_length{n:int} (xs: !list_vt (INV(x), n)):<> int n
  • 25. appendappendappendappendappend (* File: prelude/SATS/list_vt.sats *) fun{ a:vt0p } list_vt_append {n1,n2:int} ( xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2) ) :<!wrt> list_vt (a, n1+n2) (* File: prelude/SATS/list_vt.sats *) fun{ a:vt0p } list_vt_append {n1,n2:int} ( xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2) ) :<!wrt> list_vt (a, n1+n2) (* File: prelude/SATS/list_vt.sats *) fun{ a:vt0p } list_vt_append {n1,n2:int} ( xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2) ) :<!wrt> list_vt (a, n1+n2) (* File: prelude/SATS/list_vt.sats *) fun{ a:vt0p } list_vt_append {n1,n2:int} ( xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2) ) :<!wrt> list_vt (a, n1+n2) (* File: prelude/SATS/list_vt.sats *) fun{ a:vt0p } list_vt_append {n1,n2:int} ( xs1: list_vt (INV(a), n1), xs2: list_vt (a, n2) ) :<!wrt> list_vt (a, n1+n2)
  • 26. reversereversereversereversereverse (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_reverse{n:int} (xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n) (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_reverse{n:int} (xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n) (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_reverse{n:int} (xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n) (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_reverse{n:int} (xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n) (* File: prelude/SATS/list_vt.sats *) fun{x:vt0p} list_vt_reverse{n:int} (xs: list_vt (INV(x), n)):<!wrt> list_vt (x, n)
  • 27. freefreefreefreefree (* File: prelude/basics_dyn.sats *) vtypedef List_vt (a:vt0p) = [n:int] list_vt (a, n) (* File: prelude/SATS/list_vt.sats *) fun{x:t0p} list_vt_free (xs: List_vt (INV(x))):<!wrt> void overload free with list_vt_free (* File: prelude/basics_dyn.sats *) vtypedef List_vt (a:vt0p) = [n:int] list_vt (a, n) (* File: prelude/SATS/list_vt.sats *) fun{x:t0p} list_vt_free (xs: List_vt (INV(x))):<!wrt> void overload free with list_vt_free (* File: prelude/basics_dyn.sats *) vtypedef List_vt (a:vt0p) = [n:int] list_vt (a, n) (* File: prelude/SATS/list_vt.sats *) fun{x:t0p} list_vt_free (xs: List_vt (INV(x))):<!wrt> void overload free with list_vt_free (* File: prelude/basics_dyn.sats *) vtypedef List_vt (a:vt0p) = [n:int] list_vt (a, n) (* File: prelude/SATS/list_vt.sats *) fun{x:t0p} list_vt_free (xs: List_vt (INV(x))):<!wrt> void overload free with list_vt_free (* File: prelude/basics_dyn.sats *) vtypedef List_vt (a:vt0p) = [n:int] list_vt (a, n) (* File: prelude/SATS/list_vt.sats *) fun{x:t0p} list_vt_free (xs: List_vt (INV(x))):<!wrt> void overload free with list_vt_free
  • 28. [6] ATS programming on MCU[6] ATS programming on MCU[6] ATS programming on MCU[6] ATS programming on MCU[6] ATS programming on MCU You can choose the following 2-way.You can choose the following 2-way.You can choose the following 2-way.You can choose the following 2-way.You can choose the following 2-way. On BareMetal hardwareOn BareMetal hardwareOn BareMetal hardwareOn BareMetal hardwareOn BareMetal hardware ☆ Arduino (8-bit AVR)☆ Arduino (8-bit AVR)☆ Arduino (8-bit AVR)☆ Arduino (8-bit AVR)☆ Arduino (8-bit AVR) ☆ Cortex-M (32-bit ARM)☆ Cortex-M (32-bit ARM)☆ Cortex-M (32-bit ARM)☆ Cortex-M (32-bit ARM)☆ Cortex-M (32-bit ARM) On RTOSOn RTOSOn RTOSOn RTOSOn RTOS ☆ mbed☆ mbed☆ mbed☆ mbed☆ mbed ☆ ChibiOS/RT☆ ChibiOS/RT☆ ChibiOS/RT☆ ChibiOS/RT☆ ChibiOS/RT
  • 29. ATS on BareMetal hardwareATS on BareMetal hardwareATS on BareMetal hardwareATS on BareMetal hardwareATS on BareMetal hardware Read/write memory using pointer.Read/write memory using pointer.Read/write memory using pointer.Read/write memory using pointer.Read/write memory using pointer.
  • 30. ATS on RTOSATS on RTOSATS on RTOSATS on RTOSATS on RTOS Interaction with C.Interaction with C.Interaction with C.Interaction with C.Interaction with C.
  • 31. Japan ATS User GroupJapan ATS User GroupJapan ATS User GroupJapan ATS User GroupJapan ATS User Group http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/ ☆ In a parody of http://jaws-ug.jp/☆ In a parody of http://jaws-ug.jp/☆ In a parody of http://jaws-ug.jp/☆ In a parody of http://jaws-ug.jp/☆ In a parody of http://jaws-ug.jp/ ☆ Translate ATS docs into Japanese☆ Translate ATS docs into Japanese☆ Translate ATS docs into Japanese☆ Translate ATS docs into Japanese☆ Translate ATS docs into Japanese ☆ Push the Facebook like button, now!☆ Push the Facebook like button, now!☆ Push the Facebook like button, now!☆ Push the Facebook like button, now!☆ Push the Facebook like button, now!
  • 32. Many translated documentsMany translated documentsMany translated documentsMany translated documentsMany translated documents * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * MLプログラマ向けATS言語ガイド https://github.com/jats-ug/translate/blob/master/Web/ cs.likai.org/ats/ml-programmers-guide-to-ats.md * 安全なプログラミング言語を使って heartbleed を防ぐには https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md * 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング https://github.com/jats-ug/translate/blob/master/Paper/SPPSV- padl05/SPPSV-padl05.md * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * MLプログラマ向けATS言語ガイド https://github.com/jats-ug/translate/blob/master/Web/ cs.likai.org/ats/ml-programmers-guide-to-ats.md * 安全なプログラミング言語を使って heartbleed を防ぐには https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md * 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング https://github.com/jats-ug/translate/blob/master/Paper/SPPSV- padl05/SPPSV-padl05.md * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * MLプログラマ向けATS言語ガイド https://github.com/jats-ug/translate/blob/master/Web/ cs.likai.org/ats/ml-programmers-guide-to-ats.md * 安全なプログラミング言語を使って heartbleed を防ぐには https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md * 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング https://github.com/jats-ug/translate/blob/master/Paper/SPPSV- padl05/SPPSV-padl05.md * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * MLプログラマ向けATS言語ガイド https://github.com/jats-ug/translate/blob/master/Web/ cs.likai.org/ats/ml-programmers-guide-to-ats.md * 安全なプログラミング言語を使って heartbleed を防ぐには https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md * 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング https://github.com/jats-ug/translate/blob/master/Paper/SPPSV- padl05/SPPSV-padl05.md * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/index.html * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/index.html * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * MLプログラマ向けATS言語ガイド https://github.com/jats-ug/translate/blob/master/Web/ cs.likai.org/ats/ml-programmers-guide-to-ats.md * 安全なプログラミング言語を使って heartbleed を防ぐには https://github.com/jats-ug/translate/blob/master/Web/ bluishcoder.co.nz/2014/04/11/preventing-heartbleed-bugs-with-safe- languages.md * 状態を持つ観 (view) を通じてポインタを扱う安全なプログラミング https://github.com/jats-ug/translate/blob/master/Paper/SPPSV- padl05/SPPSV-padl05.md
  • 33. Follow me!Follow me!Follow me!Follow me!Follow me! https://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ug