SlideShare a Scribd company logo
1 of 33
Download to read offline
Metasepi team meeting #19: 
  
ATS application on Arduino 
Kiwamu Okabe @ Metasepi Project
Demo: ATS on Arduino Uno 
☆ http://nico.ms/sm24680530 
☆ https://github.com/fpiot/arduino-ats 
☆ Without any GC, and any malloc
Demo: Arduino Uno 
☆ MCU: ATmega328 
☆ Flash Memory: 32 KB 
☆ SRAM: 2 KB 
hhhttttttppp::://////aaarrrddduuuiiinnnooo...cccccc///eeennn///MMMaaaiiinnn///AAArrrddduuuiiinnnoooBBBoooaaarrrdddUUUnnnooo
Demo: LCD Shield 
☆ LinkSprite 16X2 LCD Keypad Shield 
☆ 16x2 LCD 
☆ HD44780 compatible 
http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for-arduino- 
version-b/
Demo: Software Architecture
Demo code: main.dats
Demo code: lcs.sats
Demo code: lcs.dats 
☆ We don't read it, today.
Agenda 
☆ [0] ATS application demo 
☆ [1] What is Metasepi? 
☆ [2] How to create Metasepi? 
☆ [3] What is ATS language? 
☆ [4] Let's read the demo code 
☆ [5] Japan ATS User Group
[1] What is Metasepi? 
http://metasepi.org/ 
☆ Unix-like OS designed by strong type. 
☆ We want to use Metasepi OS for daily 
desktop usage (e.g. web browser, 
programming, office suite, ... etc.) 
☆ We have surveyed may functional 
languages (e.g. Haskell, OCaml, 
MLton, ... etc.)
Kernel developer wants type 
☆ Kernels are developed with C. 
☆ We should design kernel with the 
greatest care. 
☆ C language is unsafe!
Kernel Bug #1: Buffer overrun 
☆ Pointer to array doesn't know the 
length.
Kernel Bug #2: Page fault 
☆ Page fault in user space => SEGV 
☆ Page fault in kernel space => Halt!
Kernel Bug #3: Weak type 
☆ Lots of (void *) and unsafe coercion. 
☆ NetBSD kernel uses it 45130 times! 
$ pwd 
/home/kiwamu/src/netbsd/sys 
$ grep "void *" `find . -name "*.c"` | wc -l 
45130 
☆ Kernel developers frequently use 
(void *) for flexibility. It's realy BAD, but 
there is no other option.
[2] How to create Metasepi? 
☆ Scratch or Rewrite
Snatch-driven development 
http://en.wikipedia.org/wiki/Snatcher
Which language should we use? 
☆ ATS http://www.ats-lang.org/
[3] What is ATS language? 
http://www.ats-lang.org/ 
☆ Syntax like ML 
☆ Dependent types 
☆ Linear types 
☆ Without any runtime 
☆ Optional GC 
☆ Developed at Boston University
ATS compile flow
[4] Let's read the demo code 
Start from main.dats. 
arduino-ats 
|-- DATS 
| `-- lcd.dats 
|-- SATS 
| |-- arduino.sats 
| `-- lcd.sats 
|-- avr_prelude 
| |-- DATS 
| | `-- string0.dats 
| |-- SATS 
| | `-- string0.sats 
| |-- kernel_prelude.cats 
| `-- kernel_staload.hats 
`-- demo 
`-- lcd_ats 
|-- DATS 
| `-- main.dats # <= Start from here. 
`-- config.hats
main.dats sequence
lcd.sats
Power of Dependent Type #1 
$ pwd 
/home/kiwamu/src/arduino-ats/demo/lcd_ats 
$ vi DATS/main.dats 
$ git diff 
diff --git a/demo/lcd_ats/DATS/main.dats b/demo/lcd_ats/DATS/ 
main.dats 
index ab94597..f00eccd 100644 
--- a/demo/lcd_ats/DATS/main.dats 
+++ b/demo/lcd_ats/DATS/main.dats 
@@ -13,7 +13,7 @@ val g_str_message = " ATS is a 
statically typed programming lang 
implement main0 () = { 
fun loop {n:int}{i:nat | i < n} 
(lcd: !lcd_t, str: string (n), pos: size_t (i)): void 
= { 
- val () = if pos + lcd_width <= length str then { 
+ val () = if pos + lcd_width <= 1 + length str then { 
val () = lcd_setCursor (lcd, 1, 0) 
val () = lcd_print (lcd, g_str_atsrun, i2sz 0, length 
g_str_atsrun) 
val () = lcd_setCursor (lcd, 0, 1)
Power of Dependent Type #2 
$ make 
--snip-- 
patsopt -o DATS/main_dats.c -d DATS/main.dats 
/home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 958 
(line=20, offs=25) -- 958(line=20, offs=25): error(3): unsolved 
constraint: C3NSTRprop(main; S2Eapp(S2Ecst(<=); S2Eapp(S2Ecst(+); 
S2EVar(1830->S2Evar(i(5501))), S2EVar(1831->S2Eintinf(16))), S2EVar 
(1829->S2Evar(n(5500))))) 
typechecking has failed: there are some unsolved constraints: 
please inspect the above reported error message(s) for information. 
☆ ATS2 finds issue at compile time! 
☆ Constraint "i + j <= n" is at lcd.sats 
☆ main.dats violates the constraint
Power of Linear Type #1 
$ pwd 
/home/kiwamu/src/arduino-ats/demo/lcd_ats 
$ vi DATS/main.dats 
$ git diff 
diff --git a/demo/lcd_ats/DATS/main.dats b/demo/lcd_ats/DATS/ 
main.dats 
index ab94597..4c73340 100644 
--- a/demo/lcd_ats/DATS/main.dats 
+++ b/demo/lcd_ats/DATS/main.dats 
@@ -25,6 +25,7 @@ implement main0 () = { 
fun forever {n:int}{i:nat | i < n} 
(lcd: !lcd_t, str: string (n), pos: size_t (i)): 
void = { 
val () = loop (lcd, str, pos) 
+ val () = lcd_close lcd 
val () = forever (lcd, str, pos) 
} 
val lcd = lcd_open (8, 13, 9, 4, 5, 6, 7)
Power of Linear Type #2 
$ make 
--snip-- 
patsopt -o DATS/main_dats.c -d DATS/main.dats 
/home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263 
(line=29, offs=23) -- 1266(line=29, offs=26): error(3): the linear 
dynamic variable [lcd$1182(-1)] is no longer available. 
/home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263 
(line=29, offs=23) -- 1266(line=29, offs=26): error(3): the 
dynamic expression cannot be assigned the type [S2Ecst(lcd_t)]. 
☆ ATS2 finds issue at compile time! 
☆ Linear value "lcd" is consumed 
☆ However "lcd" is used by "forever"
[5] Japan ATS User Group 
http://jats-ug.metasepi.org/
Doc: ATSプログラミング入門
hhhttttttppp::://////jjjaaatttsss---uuuggg...mmmeeetttaaassseeepppiii...ooorrrggg///dddoooccc///AAATTTSSS222///IIINNNTTT222PPPRRROOOGGGIIINNNAAATTTSSS///
Doc: チュートリアル
hhhttttttppp::://////jjjaaatttsss---uuuggg...mmmeeetttaaassseeepppiii...ooorrrggg///dddoooccc///AAATTTSSS222///AAATTTSSS222TTTUUUTTTOOORRRIIIAAALLL///
Doc: MLプログラマ向けガイド
https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/ 
ats/ml-programmers-guide-to-ats.md
Doc: ATS2 wiki 
hhhttttttpppsss::://////gggiiittthhhuuubbb...cccooommm///gggiiittthhhwwwxxxiii///AAATTTSSS---PPPooossstttiiiaaatttsss///wwwiiikkkiii
Functional IoT 
hhhttttttppp::://////fffpppiiiooottt...mmmeeetttaaassseeepppiii...ooorrrggg///
Follow me! 
https://twitter.com/jats_ug

More Related Content

What's hot

Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?
Elizaveta Shashkova
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pry
Creditas
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
Kiwamu Okabe
 

What's hot (20)

Real-time OS system state captured by ATS language
Real-time OS system state captured by ATS languageReal-time OS system state captured by ATS language
Real-time OS system state captured by ATS language
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq users
 
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
 
ATS2 updates 2017
ATS2 updates 2017ATS2 updates 2017
ATS2 updates 2017
 
Functional IoT: Programming Language and OS
Functional IoT: Programming Language and OSFunctional IoT: Programming Language and OS
Functional IoT: Programming Language and OS
 
ATS language overview'
ATS language overview'ATS language overview'
ATS language overview'
 
Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontroller
 
Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and Platform
 
Functional IoT: Introduction
Functional IoT: IntroductionFunctional IoT: Introduction
Functional IoT: Introduction
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi project
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Con
 
Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?
 
EcmaScript
EcmaScriptEcmaScript
EcmaScript
 
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
 
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLONGareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pry
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
 
⛳️ Votre API passe-t-elle le contrôle technique ?
⛳️ Votre API passe-t-elle le contrôle technique ?⛳️ Votre API passe-t-elle le contrôle technique ?
⛳️ Votre API passe-t-elle le contrôle technique ?
 
Development Principles & Philosophy
Development Principles & PhilosophyDevelopment Principles & Philosophy
Development Principles & Philosophy
 

Similar to Metasepi team meeting #19: ATS application on Arduino

Functional MCU programming #0: Development environment
Functional MCU programming #0: Development environmentFunctional MCU programming #0: Development environment
Functional MCU programming #0: Development environment
Kiwamu Okabe
 
Share the Experience of Using Embedded Development Board
Share the Experience of Using Embedded Development BoardShare the Experience of Using Embedded Development Board
Share the Experience of Using Embedded Development Board
Jian-Hong Pan
 
HKG15-300: Art's Quick Compiler: An unofficial overview
HKG15-300: Art's Quick Compiler: An unofficial overviewHKG15-300: Art's Quick Compiler: An unofficial overview
HKG15-300: Art's Quick Compiler: An unofficial overview
Linaro
 

Similar to Metasepi team meeting #19: ATS application on Arduino (20)

Functional MCU programming
Functional MCU programmingFunctional MCU programming
Functional MCU programming
 
Metasepi team meeting #7: Snatch application on tiny OS
Metasepi team meeting #7: Snatch application on tiny OSMetasepi team meeting #7: Snatch application on tiny OS
Metasepi team meeting #7: Snatch application on tiny OS
 
Functional MCU programming #0: Development environment
Functional MCU programming #0: Development environmentFunctional MCU programming #0: Development environment
Functional MCU programming #0: Development environment
 
Cryptography and secure systems
Cryptography and secure systemsCryptography and secure systems
Cryptography and secure systems
 
Share the Experience of Using Embedded Development Board
Share the Experience of Using Embedded Development BoardShare the Experience of Using Embedded Development Board
Share the Experience of Using Embedded Development Board
 
Mainline kernel on ARM Tegra20 devices that are left behind on 2.6 kernels
Mainline kernel on ARM Tegra20 devices that are left behind on 2.6 kernelsMainline kernel on ARM Tegra20 devices that are left behind on 2.6 kernels
Mainline kernel on ARM Tegra20 devices that are left behind on 2.6 kernels
 
Schrödinger's ARM Assembly
Schrödinger's ARM AssemblySchrödinger's ARM Assembly
Schrödinger's ARM Assembly
 
HackLU 2018 Make ARM Shellcode Great Again
HackLU 2018 Make ARM Shellcode Great AgainHackLU 2018 Make ARM Shellcode Great Again
HackLU 2018 Make ARM Shellcode Great Again
 
node-rpi-ws281x
node-rpi-ws281xnode-rpi-ws281x
node-rpi-ws281x
 
Raspberry Pi - HW/SW Application Development
Raspberry Pi - HW/SW Application DevelopmentRaspberry Pi - HW/SW Application Development
Raspberry Pi - HW/SW Application Development
 
리눅스 드라이버 실습 #3
리눅스 드라이버 실습 #3리눅스 드라이버 실습 #3
리눅스 드라이버 실습 #3
 
7nm "Navi" GPU - A GPU Built For Performance
7nm "Navi" GPU - A GPU Built For Performance 7nm "Navi" GPU - A GPU Built For Performance
7nm "Navi" GPU - A GPU Built For Performance
 
HKG15-300: Art's Quick Compiler: An unofficial overview
HKG15-300: Art's Quick Compiler: An unofficial overviewHKG15-300: Art's Quick Compiler: An unofficial overview
HKG15-300: Art's Quick Compiler: An unofficial overview
 
GPGPU using CUDA Thrust
GPGPU using CUDA ThrustGPGPU using CUDA Thrust
GPGPU using CUDA Thrust
 
Experiences with Power 9 at A*STAR CRC
Experiences with Power 9 at A*STAR CRCExperiences with Power 9 at A*STAR CRC
Experiences with Power 9 at A*STAR CRC
 
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
 
20171206 PGconf.ASIA LT gstore_fdw
20171206 PGconf.ASIA LT gstore_fdw20171206 PGconf.ASIA LT gstore_fdw
20171206 PGconf.ASIA LT gstore_fdw
 
C++ for the Web
C++ for the WebC++ for the Web
C++ for the Web
 
Metasepi team meeting #6: "Snatch-driven development"
Metasepi team meeting #6: "Snatch-driven development"Metasepi team meeting #6: "Snatch-driven development"
Metasepi team meeting #6: "Snatch-driven development"
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
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...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 

Metasepi team meeting #19: ATS application on Arduino

  • 1. Metasepi team meeting #19:   ATS application on Arduino Kiwamu Okabe @ Metasepi Project
  • 2. Demo: ATS on Arduino Uno ☆ http://nico.ms/sm24680530 ☆ https://github.com/fpiot/arduino-ats ☆ Without any GC, and any malloc
  • 3. Demo: Arduino Uno ☆ MCU: ATmega328 ☆ Flash Memory: 32 KB ☆ SRAM: 2 KB hhhttttttppp::://////aaarrrddduuuiiinnnooo...cccccc///eeennn///MMMaaaiiinnn///AAArrrddduuuiiinnnoooBBBoooaaarrrdddUUUnnnooo
  • 4. Demo: LCD Shield ☆ LinkSprite 16X2 LCD Keypad Shield ☆ 16x2 LCD ☆ HD44780 compatible http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for-arduino- version-b/
  • 8. Demo code: lcs.dats ☆ We don't read it, today.
  • 9. Agenda ☆ [0] ATS application demo ☆ [1] What is Metasepi? ☆ [2] How to create Metasepi? ☆ [3] What is ATS language? ☆ [4] Let's read the demo code ☆ [5] Japan ATS User Group
  • 10. [1] What is Metasepi? http://metasepi.org/ ☆ Unix-like OS designed by strong type. ☆ We want to use Metasepi OS for daily desktop usage (e.g. web browser, programming, office suite, ... etc.) ☆ We have surveyed may functional languages (e.g. Haskell, OCaml, MLton, ... etc.)
  • 11. Kernel developer wants type ☆ Kernels are developed with C. ☆ We should design kernel with the greatest care. ☆ C language is unsafe!
  • 12. Kernel Bug #1: Buffer overrun ☆ Pointer to array doesn't know the length.
  • 13. Kernel Bug #2: Page fault ☆ Page fault in user space => SEGV ☆ Page fault in kernel space => Halt!
  • 14. Kernel Bug #3: Weak type ☆ Lots of (void *) and unsafe coercion. ☆ NetBSD kernel uses it 45130 times! $ pwd /home/kiwamu/src/netbsd/sys $ grep "void *" `find . -name "*.c"` | wc -l 45130 ☆ Kernel developers frequently use (void *) for flexibility. It's realy BAD, but there is no other option.
  • 15. [2] How to create Metasepi? ☆ Scratch or Rewrite
  • 17. Which language should we use? ☆ ATS http://www.ats-lang.org/
  • 18. [3] What is ATS language? http://www.ats-lang.org/ ☆ Syntax like ML ☆ Dependent types ☆ Linear types ☆ Without any runtime ☆ Optional GC ☆ Developed at Boston University
  • 20. [4] Let's read the demo code Start from main.dats. arduino-ats |-- DATS | `-- lcd.dats |-- SATS | |-- arduino.sats | `-- lcd.sats |-- avr_prelude | |-- DATS | | `-- string0.dats | |-- SATS | | `-- string0.sats | |-- kernel_prelude.cats | `-- kernel_staload.hats `-- demo `-- lcd_ats |-- DATS | `-- main.dats # <= Start from here. `-- config.hats
  • 23. Power of Dependent Type #1 $ pwd /home/kiwamu/src/arduino-ats/demo/lcd_ats $ vi DATS/main.dats $ git diff diff --git a/demo/lcd_ats/DATS/main.dats b/demo/lcd_ats/DATS/ main.dats index ab94597..f00eccd 100644 --- a/demo/lcd_ats/DATS/main.dats +++ b/demo/lcd_ats/DATS/main.dats @@ -13,7 +13,7 @@ val g_str_message = " ATS is a statically typed programming lang implement main0 () = { fun loop {n:int}{i:nat | i < n} (lcd: !lcd_t, str: string (n), pos: size_t (i)): void = { - val () = if pos + lcd_width <= length str then { + val () = if pos + lcd_width <= 1 + length str then { val () = lcd_setCursor (lcd, 1, 0) val () = lcd_print (lcd, g_str_atsrun, i2sz 0, length g_str_atsrun) val () = lcd_setCursor (lcd, 0, 1)
  • 24. Power of Dependent Type #2 $ make --snip-- patsopt -o DATS/main_dats.c -d DATS/main.dats /home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 958 (line=20, offs=25) -- 958(line=20, offs=25): error(3): unsolved constraint: C3NSTRprop(main; S2Eapp(S2Ecst(<=); S2Eapp(S2Ecst(+); S2EVar(1830->S2Evar(i(5501))), S2EVar(1831->S2Eintinf(16))), S2EVar (1829->S2Evar(n(5500))))) typechecking has failed: there are some unsolved constraints: please inspect the above reported error message(s) for information. ☆ ATS2 finds issue at compile time! ☆ Constraint "i + j <= n" is at lcd.sats ☆ main.dats violates the constraint
  • 25. Power of Linear Type #1 $ pwd /home/kiwamu/src/arduino-ats/demo/lcd_ats $ vi DATS/main.dats $ git diff diff --git a/demo/lcd_ats/DATS/main.dats b/demo/lcd_ats/DATS/ main.dats index ab94597..4c73340 100644 --- a/demo/lcd_ats/DATS/main.dats +++ b/demo/lcd_ats/DATS/main.dats @@ -25,6 +25,7 @@ implement main0 () = { fun forever {n:int}{i:nat | i < n} (lcd: !lcd_t, str: string (n), pos: size_t (i)): void = { val () = loop (lcd, str, pos) + val () = lcd_close lcd val () = forever (lcd, str, pos) } val lcd = lcd_open (8, 13, 9, 4, 5, 6, 7)
  • 26. Power of Linear Type #2 $ make --snip-- patsopt -o DATS/main_dats.c -d DATS/main.dats /home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263 (line=29, offs=23) -- 1266(line=29, offs=26): error(3): the linear dynamic variable [lcd$1182(-1)] is no longer available. /home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263 (line=29, offs=23) -- 1266(line=29, offs=26): error(3): the dynamic expression cannot be assigned the type [S2Ecst(lcd_t)]. ☆ ATS2 finds issue at compile time! ☆ Linear value "lcd" is consumed ☆ However "lcd" is used by "forever"
  • 27. [5] Japan ATS User Group http://jats-ug.metasepi.org/
  • 31. Doc: ATS2 wiki hhhttttttpppsss::://////gggiiittthhhuuubbb...cccooommm///gggiiittthhhwwwxxxiii///AAATTTSSS---PPPooossstttiiiaaatttsss///wwwiiikkkiii