SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
ATS language overviewATS language overviewATS language overviewATS language overviewATS language overview
Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
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."
What is ATS?What is ATS?What is ATS?What is ATS?What is ATS?
☆ 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
☆ DML-style dependent types☆ DML-style dependent types☆ DML-style dependent types☆ DML-style dependent types☆ DML-style dependent types
☆ Linear types☆ Linear types☆ Linear types☆ Linear types☆ Linear types
☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC
☆ Optional malloc/free☆ Optional malloc/free☆ Optional malloc/free☆ Optional malloc/free☆ Optional malloc/free
☆ Optional run-time☆ Optional run-time☆ Optional run-time☆ Optional run-time☆ Optional run-time
Author: Hongwei XiAuthor: Hongwei XiAuthor: Hongwei XiAuthor: Hongwei XiAuthor: Hongwei Xi
Fizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard ML
(* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *)
local
fun fbstr i =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => Int.toString i
fun fizzbuzz' (n, j) =
if n = j then ()
else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1))
in
fun fizzbuzz n = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
(* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *)
local
fun fbstr i =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => Int.toString i
fun fizzbuzz' (n, j) =
if n = j then ()
else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1))
in
fun fizzbuzz n = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
(* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *)
local
fun fbstr i =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => Int.toString i
fun fizzbuzz' (n, j) =
if n = j then ()
else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1))
in
fun fizzbuzz n = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
(* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *)
local
fun fbstr i =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => Int.toString i
fun fizzbuzz' (n, j) =
if n = j then ()
else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1))
in
fun fizzbuzz n = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
(* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *)
local
fun fbstr i =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => Int.toString i
fun fizzbuzz' (n, j) =
if n = j then ()
else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1))
in
fun fizzbuzz n = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
Fizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATS
#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"
local
fun fbstr (i:int): string =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => tostring_int i
fun fizzbuzz' (n:int, j:int): void =
if n = j then ()
else (println! (fbstr j); fizzbuzz' (n, j+1))
in
fun fizzbuzz (n:int): void = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
implement main0 () = ()
#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"
local
fun fbstr (i:int): string =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => tostring_int i
fun fizzbuzz' (n:int, j:int): void =
if n = j then ()
else (println! (fbstr j); fizzbuzz' (n, j+1))
in
fun fizzbuzz (n:int): void = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
implement main0 () = ()
#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"
local
fun fbstr (i:int): string =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => tostring_int i
fun fizzbuzz' (n:int, j:int): void =
if n = j then ()
else (println! (fbstr j); fizzbuzz' (n, j+1))
in
fun fizzbuzz (n:int): void = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
implement main0 () = ()
#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"
local
fun fbstr (i:int): string =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => tostring_int i
fun fizzbuzz' (n:int, j:int): void =
if n = j then ()
else (println! (fbstr j); fizzbuzz' (n, j+1))
in
fun fizzbuzz (n:int): void = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
implement main0 () = ()
#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"
local
fun fbstr (i:int): string =
case (i mod 3 = 0, i mod 5 = 0) of
(true , true ) => "FizzBuzz"
| (true , false) => "Fizz"
| (false, true ) => "Buzz"
| (false, false) => tostring_int i
fun fizzbuzz' (n:int, j:int): void =
if n = j then ()
else (println! (fbstr j); fizzbuzz' (n, j+1))
in
fun fizzbuzz (n:int): void = fizzbuzz' (n, 1)
val _ = fizzbuzz 100
end
implement main0 () = ()
How to compile itHow to compile itHow to compile itHow to compile itHow to compile it
$ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats
$ ls
fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c
$ size fizzbuzz
text data bss dec hex filename
6364 796 40 7200 1c20 fizzbuzz
$ ldd fizzbuzz
linux-vdso.so.1 (0x00007ffefef06000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007fd024f9b000)
/lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000)
$ ./fizzbuzz | head
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
$ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats
$ ls
fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c
$ size fizzbuzz
text data bss dec hex filename
6364 796 40 7200 1c20 fizzbuzz
$ ldd fizzbuzz
linux-vdso.so.1 (0x00007ffefef06000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007fd024f9b000)
/lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000)
$ ./fizzbuzz | head
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
$ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats
$ ls
fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c
$ size fizzbuzz
text data bss dec hex filename
6364 796 40 7200 1c20 fizzbuzz
$ ldd fizzbuzz
linux-vdso.so.1 (0x00007ffefef06000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007fd024f9b000)
/lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000)
$ ./fizzbuzz | head
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
$ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats
$ ls
fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c
$ size fizzbuzz
text data bss dec hex filename
6364 796 40 7200 1c20 fizzbuzz
$ ldd fizzbuzz
linux-vdso.so.1 (0x00007ffefef06000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007fd024f9b000)
/lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000)
$ ./fizzbuzz | head
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
$ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats
$ ls
fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c
$ size fizzbuzz
text data bss dec hex filename
6364 796 40 7200 1c20 fizzbuzz
$ ldd fizzbuzz
linux-vdso.so.1 (0x00007ffefef06000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007fd024f9b000)
/lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000)
$ ./fizzbuzz | head
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
ATS compile flowATS compile flowATS compile flowATS compile flowATS compile flow
What can ATS do?What can ATS do?What can ATS do?What can ATS do?What can ATS do?
☆ Write code on bare metal hardware☆ Write code on bare metal hardware☆ Write code on bare metal hardware☆ Write code on bare metal hardware☆ Write code on bare metal hardware
☆ Write code in Linux kernel☆ Write code in Linux kernel☆ Write code in Linux kernel☆ Write code in Linux kernel☆ Write code in Linux kernel
☆ Use strong type without any OS☆ Use strong type without any OS☆ Use strong type without any OS☆ Use strong type without any OS☆ Use strong type without any OS
☆ Prove code using dependent types☆ Prove code using dependent types☆ Prove code using dependent types☆ Prove code using dependent types☆ Prove code using dependent types
☆ Safely use malloc using linear types☆ Safely use malloc using linear types☆ Safely use malloc using linear types☆ Safely use malloc using linear types☆ Safely use malloc using linear types
☆ Safely use pointer using linear types☆ Safely use pointer using linear types☆ Safely use pointer using linear types☆ Safely use pointer using linear types☆ Safely use pointer using linear types
Demo running on bare metalDemo running on bare metalDemo running on bare metalDemo running on bare metalDemo running on bare metal
http://youtu.be/5uPue0Jo1nchttp://youtu.be/5uPue0Jo1nchttp://youtu.be/5uPue0Jo1nchttp://youtu.be/5uPue0Jo1nchttp://youtu.be/5uPue0Jo1nc
Arduino Uno hardware:Arduino Uno hardware:Arduino Uno hardware:Arduino Uno hardware:Arduino Uno hardware:
☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture
☆ Flash Memory: 32 KB☆ Flash Memory: 32 KB☆ Flash Memory: 32 KB☆ Flash Memory: 32 KB☆ Flash Memory: 32 KB
☆ SRAM: 2 KB☆ SRAM: 2 KB☆ SRAM: 2 KB☆ SRAM: 2 KB☆ SRAM: 2 KB
Demo software architectureDemo software architectureDemo software architectureDemo software architectureDemo software architecture
https://github.com/fpiot/arduino-atshttps://github.com/fpiot/arduino-atshttps://github.com/fpiot/arduino-atshttps://github.com/fpiot/arduino-atshttps://github.com/fpiot/arduino-ats
Proof: Curry–Howard in ATSProof: Curry–Howard in ATSProof: Curry–Howard in ATSProof: Curry–Howard in ATSProof: Curry–Howard in ATS
☆ Type: Function signature introduced
by keyword "fun"
☆ Type: Function signature introduced
by keyword "fun"
☆ Type: Function signature introduced
by keyword "fun"
☆ Type: Function signature introduced
by keyword "fun"
☆ Type: Function signature introduced
by keyword "fun"
☆ Program: Function body introduced
by keyword "implement"
☆ Program: Function body introduced
by keyword "implement"
☆ Program: Function body introduced
by keyword "implement"
☆ Program: Function body introduced
by keyword "implement"
☆ Program: Function body introduced
by keyword "implement"
☆ Proposition: Proof function signature
introduced by keyword "prfun"
☆ Proposition: Proof function signature
introduced by keyword "prfun"
☆ Proposition: Proof function signature
introduced by keyword "prfun"
☆ Proposition: Proof function signature
introduced by keyword "prfun"
☆ Proposition: Proof function signature
introduced by keyword "prfun"
☆ Proof: Proof function body
introduced by keyword "primplement"
☆ Proof: Proof function body
introduced by keyword "primplement"
☆ Proof: Proof function body
introduced by keyword "primplement"
☆ Proof: Proof function body
introduced by keyword "primplement"
☆ Proof: Proof function body
introduced by keyword "primplement"
Proof: style of functionsProof: style of functionsProof: style of functionsProof: style of functionsProof: style of functions
Proof: function signatureProof: function signatureProof: function signatureProof: function signatureProof: function signature
Proof: function bodyProof: function bodyProof: function bodyProof: function bodyProof: function body
Proof: before compilingProof: before compilingProof: before compilingProof: before compilingProof: before compiling
Proof: after compilingProof: after compilingProof: after compilingProof: after compilingProof: after compiling
Proof is erased at compile time.Proof is erased at compile time.Proof is erased at compile time.Proof is erased at compile time.Proof is erased at compile time.
Proof: pros of mixed functionProof: pros of mixed functionProof: pros of mixed functionProof: pros of mixed functionProof: pros of mixed function
You can write following application:You can write following application:You can write following application:You can write following application:You can write following application:
☆ Program without garbage collection☆ Program without garbage collection☆ Program without garbage collection☆ Program without garbage collection☆ Program without garbage collection
☆ Proof to prove the program☆ Proof to prove the program☆ Proof to prove the program☆ Proof to prove the program☆ Proof to prove the program
Good news for low-level programming!Good news for low-level programming!Good news for low-level programming!Good news for low-level programming!Good news for low-level programming!
Linear type: type of listLinear type: type of listLinear type: type of listLinear type: type of listLinear type: type of list
List defined with linear type.List defined with linear type.List defined with linear type.List defined with linear type.List defined with linear type.
Linear type: create listLinear type: create listLinear type: create listLinear type: create listLinear type: create list
Compile error occurs, if consuming is
forgotten.
Compile error occurs, if consuming is
forgotten.
Compile error occurs, if consuming is
forgotten.
Compile error occurs, if consuming is
forgotten.
Compile error occurs, if consuming is
forgotten.
Linear type: append listLinear type: append listLinear type: append listLinear type: append listLinear type: append list
Please read our fanzine !Please read our fanzine !Please read our fanzine !Please read our fanzine !Please read our fanzine !
Read "Functional Ikamusume" book!Read "Functional Ikamusume" book!Read "Functional Ikamusume" book!Read "Functional Ikamusume" book!Read "Functional Ikamusume" book!
http://www.paraiso-lang.org/ikmsm/books/c88.htmlhttp://www.paraiso-lang.org/ikmsm/books/c88.htmlhttp://www.paraiso-lang.org/ikmsm/books/c88.htmlhttp://www.paraiso-lang.org/ikmsm/books/c88.htmlhttp://www.paraiso-lang.org/ikmsm/books/c88.html
Join "Japan ATS User Group" !Join "Japan ATS User Group" !Join "Japan ATS User Group" !Join "Japan ATS User Group" !Join "Japan 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/
We translate following ATS documents
into Japanese.
We translate following ATS documents
into Japanese.
We translate following ATS documents
into Japanese.
We translate following ATS documents
into Japanese.
We translate following ATS documents
into Japanese.
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
* ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
* ATSプログラミングチュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
* Effective ATS
https://github.com/jats-ug/translate/blob/master/Manual/
EffectiveATS.md
Join us and review it!Join us and review it!Join us and review it!Join us and review it!Join us and review it!

Más contenido relacionado

La actualidad más candente

Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchinaguestcf9240
 
Dtrace и немного магии
Dtrace и немного магииDtrace и немного магии
Dtrace и немного магииDan Kruchinin
 
start_printf: dev/ic/com.c comstart()
start_printf: dev/ic/com.c comstart()start_printf: dev/ic/com.c comstart()
start_printf: dev/ic/com.c comstart()Kiwamu Okabe
 
Make Your Own Perl with Moops
Make Your Own Perl with MoopsMake Your Own Perl with Moops
Make Your Own Perl with MoopsMike Friedman
 
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaLin Yo-An
 
The Perl API for the Mortally Terrified (beta)
The Perl API for the Mortally Terrified (beta)The Perl API for the Mortally Terrified (beta)
The Perl API for the Mortally Terrified (beta)Mike Friedman
 
My Robot Poops - In JavaScript (with web sockets)
My Robot Poops - In JavaScript (with web sockets)My Robot Poops - In JavaScript (with web sockets)
My Robot Poops - In JavaScript (with web sockets)Matthew Schiffman
 
How To Think In Go
How To Think In GoHow To Think In Go
How To Think In Golestrrat
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In PerlKang-min Liu
 
Nginx Workshop Aftermath
Nginx Workshop AftermathNginx Workshop Aftermath
Nginx Workshop AftermathDenis Zhdanov
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basicsAbhay Sapru
 
Php radomize
Php radomizePhp radomize
Php radomizedo_aki
 
PHP5.3 を使うのはやめよう
PHP5.3 を使うのはやめようPHP5.3 を使うのはやめよう
PHP5.3 を使うのはやめようy-uti
 
FizzBuzzではじめるテスト
FizzBuzzではじめるテストFizzBuzzではじめるテスト
FizzBuzzではじめるテストMasashi Shinbara
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Damien Seguy
 
Beautiful PHP CLI Scripts
Beautiful PHP CLI ScriptsBeautiful PHP CLI Scripts
Beautiful PHP CLI ScriptsJesse Donat
 
WTFin Perl
WTFin PerlWTFin Perl
WTFin Perllechupl
 

La actualidad más candente (20)

Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
 
Dtrace и немного магии
Dtrace и немного магииDtrace и немного магии
Dtrace и немного магии
 
start_printf: dev/ic/com.c comstart()
start_printf: dev/ic/com.c comstart()start_printf: dev/ic/com.c comstart()
start_printf: dev/ic/com.c comstart()
 
Make Your Own Perl with Moops
Make Your Own Perl with MoopsMake Your Own Perl with Moops
Make Your Own Perl with Moops
 
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim PerlchinaPerl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
 
The Perl API for the Mortally Terrified (beta)
The Perl API for the Mortally Terrified (beta)The Perl API for the Mortally Terrified (beta)
The Perl API for the Mortally Terrified (beta)
 
My Robot Poops - In JavaScript (with web sockets)
My Robot Poops - In JavaScript (with web sockets)My Robot Poops - In JavaScript (with web sockets)
My Robot Poops - In JavaScript (with web sockets)
 
How To Think In Go
How To Think In GoHow To Think In Go
How To Think In Go
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In Perl
 
Nginx Workshop Aftermath
Nginx Workshop AftermathNginx Workshop Aftermath
Nginx Workshop Aftermath
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basics
 
Php radomize
Php radomizePhp radomize
Php radomize
 
PHP5.3 を使うのはやめよう
PHP5.3 を使うのはやめようPHP5.3 を使うのはやめよう
PHP5.3 を使うのはやめよう
 
Prototype js
Prototype jsPrototype js
Prototype js
 
bash
bashbash
bash
 
FizzBuzzではじめるテスト
FizzBuzzではじめるテストFizzBuzzではじめるテスト
FizzBuzzではじめるテスト
 
Vim Hacks
Vim HacksVim Hacks
Vim Hacks
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020
 
Beautiful PHP CLI Scripts
Beautiful PHP CLI ScriptsBeautiful PHP CLI Scripts
Beautiful PHP CLI Scripts
 
WTFin Perl
WTFin PerlWTFin Perl
WTFin Perl
 

Destacado

Static typing and proof in ATS language
Static typing and proof in ATS languageStatic typing and proof in ATS language
Static typing and proof in ATS languageKiwamu Okabe
 
Metasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCUMetasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCUKiwamu Okabe
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq usersKiwamu 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 #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUKiwamu Okabe
 
ATS programming on ESP8266
ATS programming on ESP8266ATS programming on ESP8266
ATS programming on ESP8266Kiwamu Okabe
 
Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCUMetasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCUKiwamu Okabe
 
ATS Programming Tutorial
ATS Programming TutorialATS Programming Tutorial
ATS Programming TutorialKiwamu Okabe
 
ATSプログラミングチュートリアル
ATSプログラミングチュートリアルATSプログラミングチュートリアル
ATSプログラミングチュートリアルKiwamu Okabe
 
ATS language overview'
ATS language overview'ATS language overview'
ATS language overview'Kiwamu Okabe
 
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
 
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
 
Start! ATS programming
Start! ATS programmingStart! ATS programming
Start! ATS programmingKiwamu Okabe
 

Destacado (13)

Static typing and proof in ATS language
Static typing and proof in ATS languageStatic typing and proof in ATS language
Static typing and proof in ATS language
 
Metasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCUMetasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCU
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq users
 
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 #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCU
 
ATS programming on ESP8266
ATS programming on ESP8266ATS programming on ESP8266
ATS programming on ESP8266
 
Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCUMetasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCU
 
ATS Programming Tutorial
ATS Programming TutorialATS Programming Tutorial
ATS Programming Tutorial
 
ATSプログラミングチュートリアル
ATSプログラミングチュートリアルATSプログラミングチュートリアル
ATSプログラミングチュートリアル
 
ATS language overview'
ATS language overview'ATS language overview'
ATS language overview'
 
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
 
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
 
Start! ATS programming
Start! ATS programmingStart! ATS programming
Start! ATS programming
 

Similar a ATS language overview

Fizz and buzz of computer programs in python.
Fizz and buzz of computer programs in python.Fizz and buzz of computer programs in python.
Fizz and buzz of computer programs in python.Esehara Shigeo
 
FUNctional programming in Python
FUNctional programming in PythonFUNctional programming in Python
FUNctional programming in Pythonknifeofdreams
 
R で解く FizzBuzz 問題
R で解く FizzBuzz 問題R で解く FizzBuzz 問題
R で解く FizzBuzz 問題Kosei ABE
 
20180310 functional programming
20180310 functional programming20180310 functional programming
20180310 functional programmingChiwon Song
 
Introducing Swift - and the Sunset of Our Culture?
Introducing Swift - and the Sunset of Our Culture?Introducing Swift - and the Sunset of Our Culture?
Introducing Swift - and the Sunset of Our Culture?dankogai
 
What FizzBuzz can teach us about design
What FizzBuzz can teach us about designWhat FizzBuzz can teach us about design
What FizzBuzz can teach us about designMassimo Iacolare
 
Performance Comparison JVM Languages
Performance Comparison JVM LanguagesPerformance Comparison JVM Languages
Performance Comparison JVM LanguagesCorneil du Plessis
 
Hiking through the Functional Forest with Fizz Buzz
Hiking through the Functional Forest with Fizz BuzzHiking through the Functional Forest with Fizz Buzz
Hiking through the Functional Forest with Fizz BuzzMike Harris
 
Test Driven Development Workshop
Test Driven Development WorkshopTest Driven Development Workshop
Test Driven Development WorkshopKaren Sijbrandij
 
Testing the Next Generation
Testing the Next GenerationTesting the Next Generation
Testing the Next GenerationMike Harris
 
Bdd: Tdd and beyond the infinite
Bdd: Tdd and beyond the infiniteBdd: Tdd and beyond the infinite
Bdd: Tdd and beyond the infiniteGiordano Scalzo
 
A Taste of Python - Devdays Toronto 2009
A Taste of Python - Devdays Toronto 2009A Taste of Python - Devdays Toronto 2009
A Taste of Python - Devdays Toronto 2009Jordan Baker
 

Similar a ATS language overview (17)

Fizz and buzz of computer programs in python.
Fizz and buzz of computer programs in python.Fizz and buzz of computer programs in python.
Fizz and buzz of computer programs in python.
 
FUNctional programming in Python
FUNctional programming in PythonFUNctional programming in Python
FUNctional programming in Python
 
R で解く FizzBuzz 問題
R で解く FizzBuzz 問題R で解く FizzBuzz 問題
R で解く FizzBuzz 問題
 
20180310 functional programming
20180310 functional programming20180310 functional programming
20180310 functional programming
 
Introducing Swift - and the Sunset of Our Culture?
Introducing Swift - and the Sunset of Our Culture?Introducing Swift - and the Sunset of Our Culture?
Introducing Swift - and the Sunset of Our Culture?
 
What FizzBuzz can teach us about design
What FizzBuzz can teach us about designWhat FizzBuzz can teach us about design
What FizzBuzz can teach us about design
 
Where do Rubyists go?
 Where do Rubyists go?  Where do Rubyists go?
Where do Rubyists go?
 
Performance Comparison JVM Languages
Performance Comparison JVM LanguagesPerformance Comparison JVM Languages
Performance Comparison JVM Languages
 
Hiking through the Functional Forest with Fizz Buzz
Hiking through the Functional Forest with Fizz BuzzHiking through the Functional Forest with Fizz Buzz
Hiking through the Functional Forest with Fizz Buzz
 
Test Driven Development Workshop
Test Driven Development WorkshopTest Driven Development Workshop
Test Driven Development Workshop
 
TDDBC お題
TDDBC お題TDDBC お題
TDDBC お題
 
Testing the Next Generation
Testing the Next GenerationTesting the Next Generation
Testing the Next Generation
 
Python
PythonPython
Python
 
Bdd: Tdd and beyond the infinite
Bdd: Tdd and beyond the infiniteBdd: Tdd and beyond the infinite
Bdd: Tdd and beyond the infinite
 
Basics
BasicsBasics
Basics
 
A Taste of Python - Devdays Toronto 2009
A Taste of Python - Devdays Toronto 2009A Taste of Python - Devdays Toronto 2009
A Taste of Python - Devdays Toronto 2009
 
Beware sharp tools
Beware sharp toolsBeware sharp tools
Beware sharp tools
 

Último

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
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
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
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
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
 
🐬 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
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 

Último (20)

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
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
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
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
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...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

ATS language overview

  • 1. ATS language overviewATS language overviewATS language overviewATS language overviewATS language overview Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
  • 2. 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."
  • 3. What is ATS?What is ATS?What is ATS?What is ATS?What is ATS? ☆ 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 ☆ DML-style dependent types☆ DML-style dependent types☆ DML-style dependent types☆ DML-style dependent types☆ DML-style dependent types ☆ Linear types☆ Linear types☆ Linear types☆ Linear types☆ Linear types ☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC ☆ Optional malloc/free☆ Optional malloc/free☆ Optional malloc/free☆ Optional malloc/free☆ Optional malloc/free ☆ Optional run-time☆ Optional run-time☆ Optional run-time☆ Optional run-time☆ Optional run-time
  • 4. Author: Hongwei XiAuthor: Hongwei XiAuthor: Hongwei XiAuthor: Hongwei XiAuthor: Hongwei Xi
  • 5. Fizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard ML (* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *) local fun fbstr i = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => Int.toString i fun fizzbuzz' (n, j) = if n = j then () else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1)) in fun fizzbuzz n = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end (* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *) local fun fbstr i = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => Int.toString i fun fizzbuzz' (n, j) = if n = j then () else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1)) in fun fizzbuzz n = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end (* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *) local fun fbstr i = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => Int.toString i fun fizzbuzz' (n, j) = if n = j then () else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1)) in fun fizzbuzz n = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end (* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *) local fun fbstr i = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => Int.toString i fun fizzbuzz' (n, j) = if n = j then () else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1)) in fun fizzbuzz n = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end (* http://rosettacode.org/wiki/FizzBuzz#Standard_ML *) local fun fbstr i = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => Int.toString i fun fizzbuzz' (n, j) = if n = j then () else (print (fbstr j ^ "n"); fizzbuzz' (n, j+1)) in fun fizzbuzz n = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end
  • 6. Fizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATS #include "share/atspre_define.hats" #include "share/atspre_staload.hats" local fun fbstr (i:int): string = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => tostring_int i fun fizzbuzz' (n:int, j:int): void = if n = j then () else (println! (fbstr j); fizzbuzz' (n, j+1)) in fun fizzbuzz (n:int): void = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end implement main0 () = () #include "share/atspre_define.hats" #include "share/atspre_staload.hats" local fun fbstr (i:int): string = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => tostring_int i fun fizzbuzz' (n:int, j:int): void = if n = j then () else (println! (fbstr j); fizzbuzz' (n, j+1)) in fun fizzbuzz (n:int): void = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end implement main0 () = () #include "share/atspre_define.hats" #include "share/atspre_staload.hats" local fun fbstr (i:int): string = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => tostring_int i fun fizzbuzz' (n:int, j:int): void = if n = j then () else (println! (fbstr j); fizzbuzz' (n, j+1)) in fun fizzbuzz (n:int): void = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end implement main0 () = () #include "share/atspre_define.hats" #include "share/atspre_staload.hats" local fun fbstr (i:int): string = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => tostring_int i fun fizzbuzz' (n:int, j:int): void = if n = j then () else (println! (fbstr j); fizzbuzz' (n, j+1)) in fun fizzbuzz (n:int): void = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end implement main0 () = () #include "share/atspre_define.hats" #include "share/atspre_staload.hats" local fun fbstr (i:int): string = case (i mod 3 = 0, i mod 5 = 0) of (true , true ) => "FizzBuzz" | (true , false) => "Fizz" | (false, true ) => "Buzz" | (false, false) => tostring_int i fun fizzbuzz' (n:int, j:int): void = if n = j then () else (println! (fbstr j); fizzbuzz' (n, j+1)) in fun fizzbuzz (n:int): void = fizzbuzz' (n, 1) val _ = fizzbuzz 100 end implement main0 () = ()
  • 7. How to compile itHow to compile itHow to compile itHow to compile itHow to compile it $ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats $ ls fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c $ size fizzbuzz text data bss dec hex filename 6364 796 40 7200 1c20 fizzbuzz $ ldd fizzbuzz linux-vdso.so.1 (0x00007ffefef06000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd024f9b000) /lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000) $ ./fizzbuzz | head 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz $ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats $ ls fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c $ size fizzbuzz text data bss dec hex filename 6364 796 40 7200 1c20 fizzbuzz $ ldd fizzbuzz linux-vdso.so.1 (0x00007ffefef06000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd024f9b000) /lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000) $ ./fizzbuzz | head 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz $ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats $ ls fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c $ size fizzbuzz text data bss dec hex filename 6364 796 40 7200 1c20 fizzbuzz $ ldd fizzbuzz linux-vdso.so.1 (0x00007ffefef06000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd024f9b000) /lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000) $ ./fizzbuzz | head 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz $ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats $ ls fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c $ size fizzbuzz text data bss dec hex filename 6364 796 40 7200 1c20 fizzbuzz $ ldd fizzbuzz linux-vdso.so.1 (0x00007ffefef06000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd024f9b000) /lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000) $ ./fizzbuzz | head 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz $ patscc -DATS_MEMALLOC_LIBC -o fizzbuzz fizzbuzz.dats $ ls fizzbuzz* fizzbuzz.dats fizzbuzz_dats.c $ size fizzbuzz text data bss dec hex filename 6364 796 40 7200 1c20 fizzbuzz $ ldd fizzbuzz linux-vdso.so.1 (0x00007ffefef06000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd024f9b000) /lib64/ld-linux-x86-64.so.2 (0x00005623ca0a6000) $ ./fizzbuzz | head 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz
  • 8. ATS compile flowATS compile flowATS compile flowATS compile flowATS compile flow
  • 9. What can ATS do?What can ATS do?What can ATS do?What can ATS do?What can ATS do? ☆ Write code on bare metal hardware☆ Write code on bare metal hardware☆ Write code on bare metal hardware☆ Write code on bare metal hardware☆ Write code on bare metal hardware ☆ Write code in Linux kernel☆ Write code in Linux kernel☆ Write code in Linux kernel☆ Write code in Linux kernel☆ Write code in Linux kernel ☆ Use strong type without any OS☆ Use strong type without any OS☆ Use strong type without any OS☆ Use strong type without any OS☆ Use strong type without any OS ☆ Prove code using dependent types☆ Prove code using dependent types☆ Prove code using dependent types☆ Prove code using dependent types☆ Prove code using dependent types ☆ Safely use malloc using linear types☆ Safely use malloc using linear types☆ Safely use malloc using linear types☆ Safely use malloc using linear types☆ Safely use malloc using linear types ☆ Safely use pointer using linear types☆ Safely use pointer using linear types☆ Safely use pointer using linear types☆ Safely use pointer using linear types☆ Safely use pointer using linear types
  • 10. Demo running on bare metalDemo running on bare metalDemo running on bare metalDemo running on bare metalDemo running on bare metal http://youtu.be/5uPue0Jo1nchttp://youtu.be/5uPue0Jo1nchttp://youtu.be/5uPue0Jo1nchttp://youtu.be/5uPue0Jo1nchttp://youtu.be/5uPue0Jo1nc Arduino Uno hardware:Arduino Uno hardware:Arduino Uno hardware:Arduino Uno hardware:Arduino Uno hardware: ☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture ☆ Flash Memory: 32 KB☆ Flash Memory: 32 KB☆ Flash Memory: 32 KB☆ Flash Memory: 32 KB☆ Flash Memory: 32 KB ☆ SRAM: 2 KB☆ SRAM: 2 KB☆ SRAM: 2 KB☆ SRAM: 2 KB☆ SRAM: 2 KB
  • 11. Demo software architectureDemo software architectureDemo software architectureDemo software architectureDemo software architecture https://github.com/fpiot/arduino-atshttps://github.com/fpiot/arduino-atshttps://github.com/fpiot/arduino-atshttps://github.com/fpiot/arduino-atshttps://github.com/fpiot/arduino-ats
  • 12. Proof: Curry–Howard in ATSProof: Curry–Howard in ATSProof: Curry–Howard in ATSProof: Curry–Howard in ATSProof: Curry–Howard in ATS ☆ Type: Function signature introduced by keyword "fun" ☆ Type: Function signature introduced by keyword "fun" ☆ Type: Function signature introduced by keyword "fun" ☆ Type: Function signature introduced by keyword "fun" ☆ Type: Function signature introduced by keyword "fun" ☆ Program: Function body introduced by keyword "implement" ☆ Program: Function body introduced by keyword "implement" ☆ Program: Function body introduced by keyword "implement" ☆ Program: Function body introduced by keyword "implement" ☆ Program: Function body introduced by keyword "implement" ☆ Proposition: Proof function signature introduced by keyword "prfun" ☆ Proposition: Proof function signature introduced by keyword "prfun" ☆ Proposition: Proof function signature introduced by keyword "prfun" ☆ Proposition: Proof function signature introduced by keyword "prfun" ☆ Proposition: Proof function signature introduced by keyword "prfun" ☆ Proof: Proof function body introduced by keyword "primplement" ☆ Proof: Proof function body introduced by keyword "primplement" ☆ Proof: Proof function body introduced by keyword "primplement" ☆ Proof: Proof function body introduced by keyword "primplement" ☆ Proof: Proof function body introduced by keyword "primplement"
  • 13. Proof: style of functionsProof: style of functionsProof: style of functionsProof: style of functionsProof: style of functions
  • 14. Proof: function signatureProof: function signatureProof: function signatureProof: function signatureProof: function signature
  • 15. Proof: function bodyProof: function bodyProof: function bodyProof: function bodyProof: function body
  • 16. Proof: before compilingProof: before compilingProof: before compilingProof: before compilingProof: before compiling
  • 17. Proof: after compilingProof: after compilingProof: after compilingProof: after compilingProof: after compiling Proof is erased at compile time.Proof is erased at compile time.Proof is erased at compile time.Proof is erased at compile time.Proof is erased at compile time.
  • 18. Proof: pros of mixed functionProof: pros of mixed functionProof: pros of mixed functionProof: pros of mixed functionProof: pros of mixed function You can write following application:You can write following application:You can write following application:You can write following application:You can write following application: ☆ Program without garbage collection☆ Program without garbage collection☆ Program without garbage collection☆ Program without garbage collection☆ Program without garbage collection ☆ Proof to prove the program☆ Proof to prove the program☆ Proof to prove the program☆ Proof to prove the program☆ Proof to prove the program Good news for low-level programming!Good news for low-level programming!Good news for low-level programming!Good news for low-level programming!Good news for low-level programming!
  • 19. Linear type: type of listLinear type: type of listLinear type: type of listLinear type: type of listLinear type: type of list List defined with linear type.List defined with linear type.List defined with linear type.List defined with linear type.List defined with linear type.
  • 20. Linear type: create listLinear type: create listLinear type: create listLinear type: create listLinear type: create list Compile error occurs, if consuming is forgotten. Compile error occurs, if consuming is forgotten. Compile error occurs, if consuming is forgotten. Compile error occurs, if consuming is forgotten. Compile error occurs, if consuming is forgotten.
  • 21. Linear type: append listLinear type: append listLinear type: append listLinear type: append listLinear type: append list
  • 22. Please read our fanzine !Please read our fanzine !Please read our fanzine !Please read our fanzine !Please read our fanzine ! Read "Functional Ikamusume" book!Read "Functional Ikamusume" book!Read "Functional Ikamusume" book!Read "Functional Ikamusume" book!Read "Functional Ikamusume" book! http://www.paraiso-lang.org/ikmsm/books/c88.htmlhttp://www.paraiso-lang.org/ikmsm/books/c88.htmlhttp://www.paraiso-lang.org/ikmsm/books/c88.htmlhttp://www.paraiso-lang.org/ikmsm/books/c88.htmlhttp://www.paraiso-lang.org/ikmsm/books/c88.html
  • 23. Join "Japan ATS User Group" !Join "Japan ATS User Group" !Join "Japan ATS User Group" !Join "Japan ATS User Group" !Join "Japan 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/ We translate following ATS documents into Japanese. We translate following ATS documents into Japanese. We translate following ATS documents into Japanese. We translate following ATS documents into Japanese. We translate following ATS documents into Japanese. * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md * ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ * ATSプログラミングチュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ * Effective ATS https://github.com/jats-ug/translate/blob/master/Manual/ EffectiveATS.md Join us and review it!Join us and review it!Join us and review it!Join us and review it!Join us and review it!