32
Embedded application designed by ATS language Embedded application designed by ATS language Embedded application designed by ATS language Embedded application designed by ATS language Embedded application designed by ATS language Kiwamu Okabe @ RIKEN AICS Kiwamu Okabe @ RIKEN AICS Kiwamu Okabe @ RIKEN AICS Kiwamu Okabe @ RIKEN AICS Kiwamu Okabe @ RIKEN AICS

Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Embedded application designed by ATS language

Embedded application designed by ATS language

Embedded application designed by ATS language

Embedded application designed by ATS language

Embedded application designed by ATS language

Kiwamu Okabe @ RIKEN AICSKiwamu Okabe @ RIKEN AICSKiwamu Okabe @ RIKEN AICSKiwamu Okabe @ RIKEN AICSKiwamu Okabe @ RIKEN AICS

Page 2: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

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."

Page 3: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Want the safer language... It's ATS!Want the safer language... It's ATS!Want the safer language... It's ATS!Want the safer language... It's ATS!Want the safer language... It's 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

Page 4: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

AgendaAgendaAgendaAgendaAgenda☆ [1] Demo☆ [1] Demo☆ [1] Demo☆ [1] Demo☆ [1] Demo

☆ [2] ATS language basics☆ [2] ATS language basics☆ [2] ATS language basics☆ [2] ATS language basics☆ [2] ATS language basics

☆ [3] Prop (proof) on ATS☆ [3] Prop (proof) on ATS☆ [3] Prop (proof) on ATS☆ [3] Prop (proof) on ATS☆ [3] Prop (proof) on ATS

☆ [4] View (linear type) on ATS☆ [4] View (linear type) on ATS☆ [4] View (linear type) on ATS☆ [4] View (linear type) on ATS☆ [4] View (linear type) on ATS

☆ [5] Compare ATS with the other☆ [5] Compare ATS with the other☆ [5] Compare ATS with the other☆ [5] Compare ATS with the other☆ [5] Compare ATS with the other

☆ [6] Conclusion☆ [6] Conclusion☆ [6] Conclusion☆ [6] Conclusion☆ [6] Conclusion

Page 5: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

[1] Demo: ATS application on ESP8266[1] Demo: ATS application on ESP8266[1] Demo: ATS application on ESP8266[1] Demo: ATS application on ESP8266[1] Demo: ATS application on ESP8266https://github.com/fpiot/esp8266-atshttps://github.com/fpiot/esp8266-atshttps://github.com/fpiot/esp8266-atshttps://github.com/fpiot/esp8266-atshttps://github.com/fpiot/esp8266-ats

Page 6: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

ESP8266 hardwareESP8266 hardwareESP8266 hardwareESP8266 hardwareESP8266 hardware☆ http://espressif.com/en/products/wroom/☆ http://espressif.com/en/products/wroom/☆ http://espressif.com/en/products/wroom/☆ http://espressif.com/en/products/wroom/☆ http://espressif.com/en/products/wroom/

☆ 32-bit low power MCU Wi-Fi Module☆ 32-bit low power MCU Wi-Fi Module☆ 32-bit low power MCU Wi-Fi Module☆ 32-bit low power MCU Wi-Fi Module☆ 32-bit low power MCU Wi-Fi Module

☆ ROM: 4 MB☆ ROM: 4 MB☆ ROM: 4 MB☆ ROM: 4 MB☆ ROM: 4 MB

☆ RAM: 50 KB☆ RAM: 50 KB☆ RAM: 50 KB☆ RAM: 50 KB☆ RAM: 50 KB

Page 7: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?$�vi�user/user_main.dats�39�����val�json_open�=�string0_copy�"{\"value1\":�\""�40�����val�json_close�=�string0_copy�"\"�}"�41�����val�temp�=�esp_tostrptr_int�rand�42�����val�json_head�=�strptr_append�(json_open,�temp)�43�����val�json_data�=�strptr_append�(json_head,�json_close)�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!$�makeATS�user/user_main.dats/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�[json_head$3823(-1)]�needs�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst(strptr_addr_vtype);�S2EVar(4441))]�instead.patsopt(TRANS3):�there�are�[1]�errors�in�total.

$�vi�user/user_main.dats�39�����val�json_open�=�string0_copy�"{\"value1\":�\""�40�����val�json_close�=�string0_copy�"\"�}"�41�����val�temp�=�esp_tostrptr_int�rand�42�����val�json_head�=�strptr_append�(json_open,�temp)�43�����val�json_data�=�strptr_append�(json_head,�json_close)�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!$�makeATS�user/user_main.dats/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�[json_head$3823(-1)]�needs�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst(strptr_addr_vtype);�S2EVar(4441))]�instead.patsopt(TRANS3):�there�are�[1]�errors�in�total.

$�vi�user/user_main.dats�39�����val�json_open�=�string0_copy�"{\"value1\":�\""�40�����val�json_close�=�string0_copy�"\"�}"�41�����val�temp�=�esp_tostrptr_int�rand�42�����val�json_head�=�strptr_append�(json_open,�temp)�43�����val�json_data�=�strptr_append�(json_head,�json_close)�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!$�makeATS�user/user_main.dats/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�[json_head$3823(-1)]�needs�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst(strptr_addr_vtype);�S2EVar(4441))]�instead.patsopt(TRANS3):�there�are�[1]�errors�in�total.

$�vi�user/user_main.dats�39�����val�json_open�=�string0_copy�"{\"value1\":�\""�40�����val�json_close�=�string0_copy�"\"�}"�41�����val�temp�=�esp_tostrptr_int�rand�42�����val�json_head�=�strptr_append�(json_open,�temp)�43�����val�json_data�=�strptr_append�(json_head,�json_close)�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!$�makeATS�user/user_main.dats/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�[json_head$3823(-1)]�needs�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst(strptr_addr_vtype);�S2EVar(4441))]�instead.patsopt(TRANS3):�there�are�[1]�errors�in�total.

$�vi�user/user_main.dats�39�����val�json_open�=�string0_copy�"{\"value1\":�\""�40�����val�json_close�=�string0_copy�"\"�}"�41�����val�temp�=�esp_tostrptr_int�rand�42�����val�json_head�=�strptr_append�(json_open,�temp)�43�����val�json_data�=�strptr_append�(json_head,�json_close)�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!$�makeATS�user/user_main.dats/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�[json_head$3823(-1)]�needs�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst(strptr_addr_vtype);�S2EVar(4441))]�instead.patsopt(TRANS3):�there�are�[1]�errors�in�total.

Page 8: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Demo: ATS application on Arduino UnoDemo: ATS application on Arduino UnoDemo: ATS application on Arduino UnoDemo: ATS application on Arduino UnoDemo: ATS application on Arduino Unohttps://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

Page 9: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Arduino Uno hardwareArduino Uno hardwareArduino Uno hardwareArduino Uno hardwareArduino Uno hardware☆ https://www.arduino.cc/☆ https://www.arduino.cc/☆ https://www.arduino.cc/☆ https://www.arduino.cc/☆ https://www.arduino.cc/

☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture☆ 8-bit Harvard architecture

☆ ROM: 32 KB☆ ROM: 32 KB☆ ROM: 32 KB☆ ROM: 32 KB☆ ROM: 32 KB

☆ RAM: 2 KB☆ RAM: 2 KB☆ RAM: 2 KB☆ RAM: 2 KB☆ RAM: 2 KB

Page 10: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?$�vi�../../SATS/lcd.sats�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void$�vi�DATS/main.dats�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!�--snip--�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats/home/kiwamu/src/arduino-ats/demo/lcd_greeting/DATS/main.dats:�1016(line=20,�offs=26)�--�1016(line=20,�offs=26):�error(3):�unsolved�constraint:�C3NSTRprop(C3TKmain();�S2Eapp(S2Ecst(<=);�S2Eapp(S2Ecst(+);�S2EVar(1969->S2Evar(i(5685))),�S2EVar(1970->S2Eintinf(16))),�S2EVar(1968->S2Evar(n(5684)))))

$�vi�../../SATS/lcd.sats�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void$�vi�DATS/main.dats�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!�--snip--�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats/home/kiwamu/src/arduino-ats/demo/lcd_greeting/DATS/main.dats:�1016(line=20,�offs=26)�--�1016(line=20,�offs=26):�error(3):�unsolved�constraint:�C3NSTRprop(C3TKmain();�S2Eapp(S2Ecst(<=);�S2Eapp(S2Ecst(+);�S2EVar(1969->S2Evar(i(5685))),�S2EVar(1970->S2Eintinf(16))),�S2EVar(1968->S2Evar(n(5684)))))

$�vi�../../SATS/lcd.sats�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void$�vi�DATS/main.dats�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!�--snip--�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats/home/kiwamu/src/arduino-ats/demo/lcd_greeting/DATS/main.dats:�1016(line=20,�offs=26)�--�1016(line=20,�offs=26):�error(3):�unsolved�constraint:�C3NSTRprop(C3TKmain();�S2Eapp(S2Ecst(<=);�S2Eapp(S2Ecst(+);�S2EVar(1969->S2Evar(i(5685))),�S2EVar(1970->S2Eintinf(16))),�S2EVar(1968->S2Evar(n(5684)))))

$�vi�../../SATS/lcd.sats�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void$�vi�DATS/main.dats�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!�--snip--�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats/home/kiwamu/src/arduino-ats/demo/lcd_greeting/DATS/main.dats:�1016(line=20,�offs=26)�--�1016(line=20,�offs=26):�error(3):�unsolved�constraint:�C3NSTRprop(C3TKmain();�S2Eapp(S2Ecst(<=);�S2Eapp(S2Ecst(+);�S2EVar(1969->S2Evar(i(5685))),�S2EVar(1970->S2Eintinf(16))),�S2EVar(1968->S2Evar(n(5684)))))

$�vi�../../SATS/lcd.sats�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void$�vi�DATS/main.dats�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!�--snip--�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats/home/kiwamu/src/arduino-ats/demo/lcd_greeting/DATS/main.dats:�1016(line=20,�offs=26)�--�1016(line=20,�offs=26):�error(3):�unsolved�constraint:�C3NSTRprop(C3TKmain();�S2Eapp(S2Ecst(<=);�S2Eapp(S2Ecst(+);�S2EVar(1969->S2Evar(i(5685))),�S2EVar(1970->S2Eintinf(16))),�S2EVar(1968->S2Evar(n(5684)))))

Page 11: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

[2] ATS language basics[2] ATS language basics[2] ATS language basics[2] ATS language basics[2] ATS language basics

Page 12: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Dynamics: ML-style programmingDynamics: ML-style programmingDynamics: ML-style programmingDynamics: ML-style programmingDynamics: ML-style programming☆ Dynamics of ATS is similar to Standard ML.☆ Dynamics of ATS is similar to Standard ML.☆ Dynamics of ATS is similar to Standard ML.☆ Dynamics of ATS is similar to Standard ML.☆ Dynamics of ATS is similar to Standard ML.

☆ You should represent type signature of function, because ATS can't inference everything.☆ You should represent type signature of function, because ATS can't inference everything.☆ You should represent type signature of function, because ATS can't inference everything.☆ You should represent type signature of function, because ATS can't inference everything.☆ You should represent type signature of function, because ATS can't inference everything.

☆ You should introduce main function, because ATS code is compiled into C language.☆ You should introduce main function, because ATS code is compiled into C language.☆ You should introduce main function, because ATS code is compiled into C language.☆ You should introduce main function, because ATS code is compiled into C language.☆ You should introduce main function, because ATS code is compiled into C language.

Page 13: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Fizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard MLFizzbuzz on Standard MLlocal��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�100end

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�100end

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�100end

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�100end

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�100end

Page 14: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Fizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATSFizzbuzz on ATSlocal��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�100end

implement�main0�()�=�()

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�100end

implement�main0�()�=�()

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�100end

implement�main0�()�=�()

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�100end

implement�main0�()�=�()

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�100end

implement�main0�()�=�()

Page 15: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

ATS binary is portableATS binary is portableATS binary is portableATS binary is portableATS binary is portable☆ File size is 13 kB:☆ File size is 13 kB:☆ File size is 13 kB:☆ File size is 13 kB:☆ File size is 13 kB:$�ls�-lh�fizzbuzz-rwxr-xr-x�1�kiwamu�kiwamu�13K�Nov��6�21:45�fizzbuzz*$�ls�-lh�fizzbuzz-rwxr-xr-x�1�kiwamu�kiwamu�13K�Nov��6�21:45�fizzbuzz*$�ls�-lh�fizzbuzz-rwxr-xr-x�1�kiwamu�kiwamu�13K�Nov��6�21:45�fizzbuzz*$�ls�-lh�fizzbuzz-rwxr-xr-x�1�kiwamu�kiwamu�13K�Nov��6�21:45�fizzbuzz*$�ls�-lh�fizzbuzz-rwxr-xr-x�1�kiwamu�kiwamu�13K�Nov��6�21:45�fizzbuzz*

☆ Number of undefined symbols is 6:☆ Number of undefined symbols is 6:☆ Number of undefined symbols is 6:☆ Number of undefined symbols is 6:☆ Number of undefined symbols is 6:$�nm�fizzbuzz�│�grep�'U�'�����������������U�__libc_start_main@@GLIBC_2.2.5�����������������U�exit@@GLIBC_2.2.5�����������������U�fflush@@GLIBC_2.2.5�����������������U�fprintf@@GLIBC_2.2.5�����������������U�fwrite@@GLIBC_2.2.5�����������������U�longjmp@@GLIBC_2.2.5

$�nm�fizzbuzz�│�grep�'U�'�����������������U�__libc_start_main@@GLIBC_2.2.5�����������������U�exit@@GLIBC_2.2.5�����������������U�fflush@@GLIBC_2.2.5�����������������U�fprintf@@GLIBC_2.2.5�����������������U�fwrite@@GLIBC_2.2.5�����������������U�longjmp@@GLIBC_2.2.5

$�nm�fizzbuzz�│�grep�'U�'�����������������U�__libc_start_main@@GLIBC_2.2.5�����������������U�exit@@GLIBC_2.2.5�����������������U�fflush@@GLIBC_2.2.5�����������������U�fprintf@@GLIBC_2.2.5�����������������U�fwrite@@GLIBC_2.2.5�����������������U�longjmp@@GLIBC_2.2.5

$�nm�fizzbuzz�│�grep�'U�'�����������������U�__libc_start_main@@GLIBC_2.2.5�����������������U�exit@@GLIBC_2.2.5�����������������U�fflush@@GLIBC_2.2.5�����������������U�fprintf@@GLIBC_2.2.5�����������������U�fwrite@@GLIBC_2.2.5�����������������U�longjmp@@GLIBC_2.2.5

$�nm�fizzbuzz�│�grep�'U�'�����������������U�__libc_start_main@@GLIBC_2.2.5�����������������U�exit@@GLIBC_2.2.5�����������������U�fflush@@GLIBC_2.2.5�����������������U�fprintf@@GLIBC_2.2.5�����������������U�fwrite@@GLIBC_2.2.5�����������������U�longjmp@@GLIBC_2.2.5

Page 16: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

ATS compile flowATS compile flowATS compile flowATS compile flowATS compile flow

Page 17: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

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.

Page 18: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

[3] Prop (proof) on ATS[3] Prop (proof) on ATS[3] Prop (proof) on ATS[3] Prop (proof) on ATS[3] Prop (proof) on ATS

Page 19: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Prop: Curry–Howard in ATSProp: Curry–Howard in ATSProp: Curry–Howard in ATSProp: Curry–Howard in ATSProp: 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"

Page 20: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Prop: Style of functionsProp: Style of functionsProp: Style of functionsProp: Style of functionsProp: Style of functions

Page 21: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Prop: Function signatureProp: Function signatureProp: Function signatureProp: Function signatureProp: Function signature

Page 22: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Prop: Function bodyProp: Function bodyProp: Function bodyProp: Function bodyProp: Function body

Page 23: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Prop is similar to CoqProp is similar to CoqProp is similar to CoqProp is similar to CoqProp is similar to Coq☆ Coq is an interactive theorem prover.☆ Coq is an interactive theorem prover.☆ Coq is an interactive theorem prover.☆ Coq is an interactive theorem prover.☆ Coq is an interactive theorem prover.

☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/

☆ ATS also has subsystem for theorem-proving.☆ ATS also has subsystem for theorem-proving.☆ ATS also has subsystem for theorem-proving.☆ ATS also has subsystem for theorem-proving.☆ ATS also has subsystem for theorem-proving.

☆ But ATS doesn't have tactics.☆ But ATS doesn't have tactics.☆ But ATS doesn't have tactics.☆ But ATS doesn't have tactics.☆ But ATS doesn't have tactics.

☆ ATS constructs proofs as total functions.☆ ATS constructs proofs as total functions.☆ ATS constructs proofs as total functions.☆ ATS constructs proofs as total functions.☆ ATS constructs proofs as total functions.

Page 24: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Prop: Coq codeProp: Coq codeProp: Coq codeProp: Coq codeProp: Coq codeInductive�day�:�Type�:=��│�monday�:�day��│�tuesday�:�day��│�wednesday�:�day��│�thursday�:�day��│�friday�:�day��│�saturday�:�day��│�sunday�:�day.

Inductive�good_day�:�day�->�Prop�:=��│�gd_sat�:�good_day�saturday��│�gd_sun�:�good_day�sunday.

Theorem�gds�:�good_day�sunday.Proof.�apply�gd_sun.�Qed.

Inductive�day�:�Type�:=��│�monday�:�day��│�tuesday�:�day��│�wednesday�:�day��│�thursday�:�day��│�friday�:�day��│�saturday�:�day��│�sunday�:�day.

Inductive�good_day�:�day�->�Prop�:=��│�gd_sat�:�good_day�saturday��│�gd_sun�:�good_day�sunday.

Theorem�gds�:�good_day�sunday.Proof.�apply�gd_sun.�Qed.

Inductive�day�:�Type�:=��│�monday�:�day��│�tuesday�:�day��│�wednesday�:�day��│�thursday�:�day��│�friday�:�day��│�saturday�:�day��│�sunday�:�day.

Inductive�good_day�:�day�->�Prop�:=��│�gd_sat�:�good_day�saturday��│�gd_sun�:�good_day�sunday.

Theorem�gds�:�good_day�sunday.Proof.�apply�gd_sun.�Qed.

Inductive�day�:�Type�:=��│�monday�:�day��│�tuesday�:�day��│�wednesday�:�day��│�thursday�:�day��│�friday�:�day��│�saturday�:�day��│�sunday�:�day.

Inductive�good_day�:�day�->�Prop�:=��│�gd_sat�:�good_day�saturday��│�gd_sun�:�good_day�sunday.

Theorem�gds�:�good_day�sunday.Proof.�apply�gd_sun.�Qed.

Inductive�day�:�Type�:=��│�monday�:�day��│�tuesday�:�day��│�wednesday�:�day��│�thursday�:�day��│�friday�:�day��│�saturday�:�day��│�sunday�:�day.

Inductive�good_day�:�day�->�Prop�:=��│�gd_sat�:�good_day�saturday��│�gd_sun�:�good_day�sunday.

Theorem�gds�:�good_day�sunday.Proof.�apply�gd_sun.�Qed.

Page 25: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Prop: ATS codeProp: ATS codeProp: ATS codeProp: ATS codeProp: ATS codedatasort�Day�=��│�Monday��│�Tuesday��│�Wednesday��│�Thursday��│�Friday��│�Saturday��│�Sunday

dataprop�Good_Day�(Day)�=��│�Gd_Sat�(Saturday)�of�()��│�Gd_Sun�(Sunday)�of�()

extern�prfun�gds:�Good_Day�Sundayprimplement�gds�=�Gd_Sun�()

datasort�Day�=��│�Monday��│�Tuesday��│�Wednesday��│�Thursday��│�Friday��│�Saturday��│�Sunday

dataprop�Good_Day�(Day)�=��│�Gd_Sat�(Saturday)�of�()��│�Gd_Sun�(Sunday)�of�()

extern�prfun�gds:�Good_Day�Sundayprimplement�gds�=�Gd_Sun�()

datasort�Day�=��│�Monday��│�Tuesday��│�Wednesday��│�Thursday��│�Friday��│�Saturday��│�Sunday

dataprop�Good_Day�(Day)�=��│�Gd_Sat�(Saturday)�of�()��│�Gd_Sun�(Sunday)�of�()

extern�prfun�gds:�Good_Day�Sundayprimplement�gds�=�Gd_Sun�()

datasort�Day�=��│�Monday��│�Tuesday��│�Wednesday��│�Thursday��│�Friday��│�Saturday��│�Sunday

dataprop�Good_Day�(Day)�=��│�Gd_Sat�(Saturday)�of�()��│�Gd_Sun�(Sunday)�of�()

extern�prfun�gds:�Good_Day�Sundayprimplement�gds�=�Gd_Sun�()

datasort�Day�=��│�Monday��│�Tuesday��│�Wednesday��│�Thursday��│�Friday��│�Saturday��│�Sunday

dataprop�Good_Day�(Day)�=��│�Gd_Sat�(Saturday)�of�()��│�Gd_Sun�(Sunday)�of�()

extern�prfun�gds:�Good_Day�Sundayprimplement�gds�=�Gd_Sun�()

Page 26: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

[4] View (linear type) on ATS[4] View (linear type) on ATS[4] View (linear type) on ATS[4] View (linear type) on ATS[4] View (linear type) on ATS☆ View is linear type in ATS☆ View is linear type in ATS☆ View is linear type in ATS☆ View is linear type in ATS☆ View is linear type in ATS

☆ View manages producing and consuming resource☆ View manages producing and consuming resource☆ View manages producing and consuming resource☆ View manages producing and consuming resource☆ View manages producing and consuming resource

☆ Example of resource: memory chunk, array, list, queue, lock/unlock, session, ...☆ Example of resource: memory chunk, array, list, queue, lock/unlock, session, ...☆ Example of resource: memory chunk, array, list, queue, lock/unlock, session, ...☆ Example of resource: memory chunk, array, list, queue, lock/unlock, session, ...☆ Example of resource: memory chunk, array, list, queue, lock/unlock, session, ...

☆ At-view is a ticket to permit dereferencing pointer☆ At-view is a ticket to permit dereferencing pointer☆ At-view is a ticket to permit dereferencing pointer☆ At-view is a ticket to permit dereferencing pointer☆ At-view is a ticket to permit dereferencing pointer

Page 27: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

At-view: Figure of append listAt-view: Figure of append listAt-view: Figure of append listAt-view: Figure of append listAt-view: Figure of append list

Page 28: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

At-view: Code of append listAt-view: Code of append listAt-view: Code of append listAt-view: Code of append listAt-view: Code of append list#include�"share/atspre_staload.hats"

implement�main0�()�=�{��val�l1�=�list_vt_make_pair�(1,�2)��val�l2�=�list_vt_make_sing�3��val�l3�=�list_vt_append�(l2,�l1)��val�()�=�print_list_vt<int>�l3�(*�=>�3,�1,�2�*)(*val�()�=�list_vt_free<int>�l3�*)�(*�Compile-time�error!�*)}

#include�"share/atspre_staload.hats"

implement�main0�()�=�{��val�l1�=�list_vt_make_pair�(1,�2)��val�l2�=�list_vt_make_sing�3��val�l3�=�list_vt_append�(l2,�l1)��val�()�=�print_list_vt<int>�l3�(*�=>�3,�1,�2�*)(*val�()�=�list_vt_free<int>�l3�*)�(*�Compile-time�error!�*)}

#include�"share/atspre_staload.hats"

implement�main0�()�=�{��val�l1�=�list_vt_make_pair�(1,�2)��val�l2�=�list_vt_make_sing�3��val�l3�=�list_vt_append�(l2,�l1)��val�()�=�print_list_vt<int>�l3�(*�=>�3,�1,�2�*)(*val�()�=�list_vt_free<int>�l3�*)�(*�Compile-time�error!�*)}

#include�"share/atspre_staload.hats"

implement�main0�()�=�{��val�l1�=�list_vt_make_pair�(1,�2)��val�l2�=�list_vt_make_sing�3��val�l3�=�list_vt_append�(l2,�l1)��val�()�=�print_list_vt<int>�l3�(*�=>�3,�1,�2�*)(*val�()�=�list_vt_free<int>�l3�*)�(*�Compile-time�error!�*)}

#include�"share/atspre_staload.hats"

implement�main0�()�=�{��val�l1�=�list_vt_make_pair�(1,�2)��val�l2�=�list_vt_make_sing�3��val�l3�=�list_vt_append�(l2,�l1)��val�()�=�print_list_vt<int>�l3�(*�=>�3,�1,�2�*)(*val�()�=�list_vt_free<int>�l3�*)�(*�Compile-time�error!�*)}

Page 29: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

[5] Compare ATS with Event-B[5] Compare ATS with Event-B[5] Compare ATS with Event-B[5] Compare ATS with Event-B[5] Compare ATS with Event-B☆ Event-B generates code from verification.☆ Event-B generates code from verification.☆ Event-B generates code from verification.☆ Event-B generates code from verification.☆ Event-B generates code from verification.

☆ ATS write verification in code.☆ ATS write verification in code.☆ ATS write verification in code.☆ ATS write verification in code.☆ ATS write verification in code.

☆ Event-B focuses on interaction between contexts.☆ Event-B focuses on interaction between contexts.☆ Event-B focuses on interaction between contexts.☆ Event-B focuses on interaction between contexts.☆ Event-B focuses on interaction between contexts.

☆ ATS focuses on specification in single context.☆ ATS focuses on specification in single context.☆ ATS focuses on specification in single context.☆ ATS focuses on specification in single context.☆ ATS focuses on specification in single context.

☆ ATS can manage multi-context with some code.☆ ATS can manage multi-context with some code.☆ ATS can manage multi-context with some code.☆ ATS can manage multi-context with some code.☆ ATS can manage multi-context with some code.

Page 30: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Compare ATS with VeriFastCompare ATS with VeriFastCompare ATS with VeriFastCompare ATS with VeriFastCompare ATS with VeriFastVeriFast is very similar to ATS, but...VeriFast is very similar to ATS, but...VeriFast is very similar to ATS, but...VeriFast is very similar to ATS, but...VeriFast is very similar to ATS, but...

☆ VeriFast is closed source.☆ VeriFast is closed source.☆ VeriFast is closed source.☆ VeriFast is closed source.☆ VeriFast is closed source.

☆ ATS is open source.☆ ATS is open source.☆ ATS is open source.☆ ATS is open source.☆ ATS is open source.

☆ VeriFast is for C/Java.☆ VeriFast is for C/Java.☆ VeriFast is for C/Java.☆ VeriFast is for C/Java.☆ VeriFast is for C/Java.

☆ ATS is for C/Erlang/JavaScript/PHP/Perl/Python.☆ ATS is for C/Erlang/JavaScript/PHP/Perl/Python.☆ ATS is for C/Erlang/JavaScript/PHP/Perl/Python.☆ ATS is for C/Erlang/JavaScript/PHP/Perl/Python.☆ ATS is for C/Erlang/JavaScript/PHP/Perl/Python.

☆ VeriFast's host language is C or Java.☆ VeriFast's host language is C or Java.☆ VeriFast's host language is C or Java.☆ VeriFast's host language is C or Java.☆ VeriFast's host language is C or Java.

☆ ATS's host language is ML.☆ ATS's host language is ML.☆ ATS's host language is ML.☆ ATS's host language is ML.☆ ATS's host language is ML.

Page 31: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

Compare ATS with XMOSCompare ATS with XMOSCompare ATS with XMOSCompare ATS with XMOSCompare ATS with XMOS☆ XMOS strongly focuses on channel implemented on hardware.☆ XMOS strongly focuses on channel implemented on hardware.☆ XMOS strongly focuses on channel implemented on hardware.☆ XMOS strongly focuses on channel implemented on hardware.☆ XMOS strongly focuses on channel implemented on hardware.

☆ ATS also uses strongly typed channel what needs some support by OS.☆ ATS also uses strongly typed channel what needs some support by OS.☆ ATS also uses strongly typed channel what needs some support by OS.☆ ATS also uses strongly typed channel what needs some support by OS.☆ ATS also uses strongly typed channel what needs some support by OS.http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/main.htmlhttp://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/main.htmlhttp://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/main.htmlhttp://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/main.htmlhttp://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/main.html

☆ ATS's channel may be easily used without OS-support, with hardware-support like XMOS.☆ ATS's channel may be easily used without OS-support, with hardware-support like XMOS.☆ ATS's channel may be easily used without OS-support, with hardware-support like XMOS.☆ ATS's channel may be easily used without OS-support, with hardware-support like XMOS.☆ ATS's channel may be easily used without OS-support, with hardware-support like XMOS.

Page 32: Embedded application designed by ATS languageRemember Heartbleed bug? Should we use safer language than C? == In English == "Preventing heartbleed bugs with safe programming languages"

[6] Conclusion[6] Conclusion[6] Conclusion[6] Conclusion[6] Conclusion☆ ATS can use strong type without any OS.☆ ATS can use strong type without any OS.☆ ATS can use strong type without any OS.☆ ATS can use strong type without any OS.☆ ATS can use strong type without any OS.

☆ ATS can prove code using dependent types.☆ ATS can prove code using dependent types.☆ ATS can prove code using dependent types.☆ ATS can prove code using dependent types.☆ ATS can prove code using dependent types.

☆ ATS can safely use pointer using linear types.☆ ATS can safely use pointer using linear types.☆ ATS can safely use pointer using linear types.☆ ATS can safely use pointer using linear types.☆ ATS can safely use pointer using linear types.

☆ ATS can manage resource using linear types.☆ ATS can manage resource using linear types.☆ ATS can manage resource using linear types.☆ ATS can manage resource using linear types.☆ ATS can manage resource using linear types.

☆ Join "ATS logo Japan ATS User Group"!☆ Join "ATS logo Japan ATS User Group"!☆ Join "ATS logo Japan ATS User Group"!☆ Join "ATS logo Japan ATS User Group"!☆ Join "ATS logo 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/