SlideShare a Scribd company logo
1 of 32
Download to read offline
Metasepi team meeting #20: 
Start! ATS programming on MCU
Metasepi team meeting #20: 
Start! ATS programming on MCU
Metasepi team meeting #20: 
Start! ATS programming on MCU
Metasepi team meeting #20: 
Start! ATS programming on MCU
Metasepi team meeting #20:
Start! ATS programming on MCU
Kiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi Project
Demo: ATS on Arduino UnoDemo: ATS on Arduino UnoDemo: ATS on Arduino UnoDemo: ATS on Arduino UnoDemo: ATS on Arduino Uno
☆ http://nico.ms/sm24680530☆ http://nico.ms/sm24680530☆ http://nico.ms/sm24680530☆ http://nico.ms/sm24680530☆ http://nico.ms/sm24680530
☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats
☆ Without any GC and any malloc☆ Without any GC and any malloc☆ Without any GC and any malloc☆ Without any GC and any malloc☆ Without any GC and any malloc
Demo: Arduino UnoDemo: Arduino UnoDemo: Arduino UnoDemo: Arduino UnoDemo: Arduino Uno
☆ MCU: ATmega328☆ MCU: ATmega328☆ MCU: ATmega328☆ MCU: ATmega328☆ MCU: ATmega328
☆ 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
http://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUno
Demo: LCD ShieldDemo: LCD ShieldDemo: LCD ShieldDemo: LCD ShieldDemo: LCD Shield
☆ LinkSprite 16X2 LCD Keypad Shield☆ LinkSprite 16X2 LCD Keypad Shield☆ LinkSprite 16X2 LCD Keypad Shield☆ LinkSprite 16X2 LCD Keypad Shield☆ LinkSprite 16X2 LCD Keypad Shield
☆ 16x2 LCD☆ 16x2 LCD☆ 16x2 LCD☆ 16x2 LCD☆ 16x2 LCD
☆ Controled by some GPIOs☆ Controled by some GPIOs☆ Controled by some GPIOs☆ Controled by some GPIOs☆ Controled by some GPIOs
http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for-
arduino-version-b/
http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for-
arduino-version-b/
http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for-
arduino-version-b/
http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for-
arduino-version-b/
http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for-
arduino-version-b/
Demo: Software ArchitectureDemo: Software ArchitectureDemo: Software ArchitectureDemo: Software ArchitectureDemo: Software Architecture
Demo code: main.datsDemo code: main.datsDemo code: main.datsDemo code: main.datsDemo code: main.dats
Demo code: lcs.satsDemo code: lcs.satsDemo code: lcs.satsDemo code: lcs.satsDemo code: lcs.sats
Demo code: lcs.datsDemo code: lcs.datsDemo code: lcs.datsDemo code: lcs.datsDemo code: lcs.dats
☆ We don't read it, today.☆ We don't read it, today.☆ We don't read it, today.☆ We don't read it, today.☆ We don't read it, today.
AgendaAgendaAgendaAgendaAgenda
☆ [0] ATS application demo☆ [0] ATS application demo☆ [0] ATS application demo☆ [0] ATS application demo☆ [0] ATS application demo
☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?
☆ [2] What is ATS language?☆ [2] What is ATS language?☆ [2] What is ATS language?☆ [2] What is ATS language?☆ [2] What is ATS language?
☆ [3] Let's read the demo code☆ [3] Let's read the demo code☆ [3] Let's read the demo code☆ [3] Let's read the demo code☆ [3] Let's read the demo code
☆ [4] Japan ATS User Group☆ [4] Japan ATS User Group☆ [4] Japan ATS User Group☆ [4] Japan ATS User Group☆ [4] Japan ATS User Group
[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?
http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/
☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.
☆ We want to use Metasepi OS for daily
desktop usage.
☆ We want to use Metasepi OS for daily
desktop usage.
☆ We want to use Metasepi OS for daily
desktop usage.
☆ We want to use Metasepi OS for daily
desktop usage.
☆ We want to use Metasepi OS for daily
desktop usage.
☆ Haskell language was chosen for 1st
iteration named "Arafura".
☆ Haskell language was chosen for 1st
iteration named "Arafura".
☆ Haskell language was chosen for 1st
iteration named "Arafura".
☆ Haskell language was chosen for 1st
iteration named "Arafura".
☆ Haskell language was chosen for 1st
iteration named "Arafura".
☆ ATS language is chosen for our 2nd
iteration named "Bohai".
☆ ATS language is chosen for our 2nd
iteration named "Bohai".
☆ ATS language is chosen for our 2nd
iteration named "Bohai".
☆ ATS language is chosen for our 2nd
iteration named "Bohai".
☆ ATS language is chosen for our 2nd
iteration named "Bohai".
How to create Metasepi?How to create Metasepi?How to create Metasepi?How to create Metasepi?How to create Metasepi?
☆ Use "Snatch-driven development".☆ Use "Snatch-driven development".☆ Use "Snatch-driven development".☆ Use "Snatch-driven development".☆ Use "Snatch-driven development".
http://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcher
[2] What is ATS language?[2] What is ATS language?[2] What is ATS language?[2] What is ATS language?[2] What is ATS language?
http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/
☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML
☆ Dependent types and Linear types☆ Dependent types and Linear types☆ Dependent types and Linear types☆ Dependent types and Linear types☆ Dependent types and Linear types
☆ Without any runtime☆ Without any runtime☆ Without any runtime☆ Without any runtime☆ Without any runtime
☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC
☆ Designed by Hongwei Xi☆ Designed by Hongwei Xi☆ Designed by Hongwei Xi☆ Designed by Hongwei Xi☆ Designed by Hongwei Xi
☆ Developed at Boston University☆ Developed at Boston University☆ Developed at Boston University☆ Developed at Boston University☆ Developed at Boston University
ATS compile flowATS compile flowATS compile flowATS compile flowATS compile flow
[3] Let's read the demo code[3] Let's read the demo code[3] Let's read the demo code[3] Let's read the demo code[3] Let's read the demo code
Start from main.dats.Start from main.dats.Start from main.dats.Start from main.dats.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
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
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
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
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 sequencemain.dats sequencemain.dats sequencemain.dats sequencemain.dats sequence
lcd.satslcd.satslcd.satslcd.satslcd.sats
Power of Dependent Type #1Power of Dependent Type #1Power of Dependent Type #1Power of Dependent Type #1Power 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}
= {
- 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)
$ 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}
= {
- 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)
$ 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}
= {
- 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)
$ 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}
= {
- 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)
$ 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}
= {
- 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 #2Power of Dependent Type #2Power of Dependent Type #2Power of Dependent Type #2Power 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
S2EVar
(1829->S2Evar(n(5500)))))
typechecking has failed: there are some unsolved constraints:
please inspect the above reported error message(s) for information.
$ 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
S2EVar
(1829->S2Evar(n(5500)))))
typechecking has failed: there are some unsolved constraints:
please inspect the above reported error message(s) for information.
$ 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
S2EVar
(1829->S2Evar(n(5500)))))
typechecking has failed: there are some unsolved constraints:
please inspect the above reported error message(s) for information.
$ 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
S2EVar
(1829->S2Evar(n(5500)))))
typechecking has failed: there are some unsolved constraints:
please inspect the above reported error message(s) for information.
$ 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
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!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!
☆ Constraint "i + j <= n" is at lcd.sats☆ Constraint "i + j <= n" is at lcd.sats☆ Constraint "i + j <= n" is at lcd.sats☆ Constraint "i + j <= n" is at lcd.sats☆ Constraint "i + j <= n" is at lcd.sats
☆ main.dats violates the constraint☆ main.dats violates the constraint☆ main.dats violates the constraint☆ main.dats violates the constraint☆ main.dats violates the constraint
Power of Linear Type #1Power of Linear Type #1Power of Linear Type #1Power of Linear Type #1Power 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)
$ 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)
$ 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)
$ 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)
$ 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 #2Power of Linear Type #2Power of Linear Type #2Power of Linear Type #2Power 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
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)].
$ make
--snip--
patsopt -o DATS/main_dats.c -d DATS/main.dats
/home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263
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)].
$ make
--snip--
patsopt -o DATS/main_dats.c -d DATS/main.dats
/home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263
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)].
$ make
--snip--
patsopt -o DATS/main_dats.c -d DATS/main.dats
/home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263
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)].
$ make
--snip--
patsopt -o DATS/main_dats.c -d DATS/main.dats
/home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263
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!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!
☆ Linear value "lcd" is consumed☆ Linear value "lcd" is consumed☆ Linear value "lcd" is consumed☆ Linear value "lcd" is consumed☆ Linear value "lcd" is consumed
☆ However "lcd" is used by "forever"☆ However "lcd" is used by "forever"☆ However "lcd" is used by "forever"☆ However "lcd" is used by "forever"☆ However "lcd" is used by "forever"
[5] Japan ATS User Group[5] Japan ATS User Group[5] Japan ATS User Group[5] Japan ATS User Group[5] 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/
Doc: ATSプログラミング入門Doc: ATSプログラミング入門Doc: ATSプログラミング入門Doc: ATSプログラミング入門Doc: ATSプログラミング入門
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
Doc: チュートリアルDoc: チュートリアルDoc: チュートリアルDoc: チュートリアルDoc: チュートリアル
http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
Doc: MLプログラマ向けガイドDoc: MLプログラマ向けガイドDoc: MLプログラマ向けガイドDoc: MLプログラマ向けガイドDoc: MLプログラマ向けガイド
https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/
ats/ml-programmers-guide-to-ats.md
https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/
ats/ml-programmers-guide-to-ats.md
https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/
ats/ml-programmers-guide-to-ats.md
https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/
ats/ml-programmers-guide-to-ats.md
https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/
ats/ml-programmers-guide-to-ats.md
Doc: ATS2 wikiDoc: ATS2 wikiDoc: ATS2 wikiDoc: ATS2 wikiDoc: ATS2 wiki
https://github.com/githwxi/ATS-Postiats/wikihttps://github.com/githwxi/ATS-Postiats/wikihttps://github.com/githwxi/ATS-Postiats/wikihttps://github.com/githwxi/ATS-Postiats/wikihttps://github.com/githwxi/ATS-Postiats/wiki
Paper: Applied Type SystemPaper: Applied Type SystemPaper: Applied Type SystemPaper: Applied Type SystemPaper: Applied Type System
https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/
ATS-types03-ja.pdf
https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/
ATS-types03-ja.pdf
https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/
ATS-types03-ja.pdf
https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/
ATS-types03-ja.pdf
https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/
ATS-types03-ja.pdf
ATS IDE on MonoDevelopATS IDE on MonoDevelopATS IDE on MonoDevelopATS IDE on MonoDevelopATS IDE on MonoDevelop
https://github.com/ashalkhakov/ATS-Postiats-idehttps://github.com/ashalkhakov/ATS-Postiats-idehttps://github.com/ashalkhakov/ATS-Postiats-idehttps://github.com/ashalkhakov/ATS-Postiats-idehttps://github.com/ashalkhakov/ATS-Postiats-ide
Functional IoTFunctional IoTFunctional IoTFunctional IoTFunctional IoT
http://fpiot.metasepi.org/http://fpiot.metasepi.org/http://fpiot.metasepi.org/http://fpiot.metasepi.org/http://fpiot.metasepi.org/
Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)
Date: Mon Dec 23 11:40 JST 2013
Hi Metasepi-chan,
I spent quite some time today browsing metasepi.org.
I am really interested in your Metasepi project, partly because I
myself wanted to implement NetBSD in ATS about 5 years ago.
Unfortunately, I never had time to get the project started as I
needed to spend so much time on ATS2. By the way, I had planned to
use the very same approach which you call "Snatch". I had also
considered Minix but I chose NetBSD because it was a real OS.
I think I know first-handedly the dilemma you are currently in. On
one hand, you want to be able to fully focus on writing the
kernel. On the other hand, you also need to add features to Ajhc
constantly to address all kinds of issues that keep popping up,
which undoubtedly makes it very difficult for you to focus.
Date: Mon Dec 23 11:40 JST 2013
Hi Metasepi-chan,
I spent quite some time today browsing metasepi.org.
I am really interested in your Metasepi project, partly because I
myself wanted to implement NetBSD in ATS about 5 years ago.
Unfortunately, I never had time to get the project started as I
needed to spend so much time on ATS2. By the way, I had planned to
use the very same approach which you call "Snatch". I had also
considered Minix but I chose NetBSD because it was a real OS.
I think I know first-handedly the dilemma you are currently in. On
one hand, you want to be able to fully focus on writing the
kernel. On the other hand, you also need to add features to Ajhc
constantly to address all kinds of issues that keep popping up,
which undoubtedly makes it very difficult for you to focus.
Date: Mon Dec 23 11:40 JST 2013
Hi Metasepi-chan,
I spent quite some time today browsing metasepi.org.
I am really interested in your Metasepi project, partly because I
myself wanted to implement NetBSD in ATS about 5 years ago.
Unfortunately, I never had time to get the project started as I
needed to spend so much time on ATS2. By the way, I had planned to
use the very same approach which you call "Snatch". I had also
considered Minix but I chose NetBSD because it was a real OS.
I think I know first-handedly the dilemma you are currently in. On
one hand, you want to be able to fully focus on writing the
kernel. On the other hand, you also need to add features to Ajhc
constantly to address all kinds of issues that keep popping up,
which undoubtedly makes it very difficult for you to focus.
Date: Mon Dec 23 11:40 JST 2013
Hi Metasepi-chan,
I spent quite some time today browsing metasepi.org.
I am really interested in your Metasepi project, partly because I
myself wanted to implement NetBSD in ATS about 5 years ago.
Unfortunately, I never had time to get the project started as I
needed to spend so much time on ATS2. By the way, I had planned to
use the very same approach which you call "Snatch". I had also
considered Minix but I chose NetBSD because it was a real OS.
I think I know first-handedly the dilemma you are currently in. On
one hand, you want to be able to fully focus on writing the
kernel. On the other hand, you also need to add features to Ajhc
constantly to address all kinds of issues that keep popping up,
which undoubtedly makes it very difficult for you to focus.
Date: Mon Dec 23 11:40 JST 2013
Hi Metasepi-chan,
I spent quite some time today browsing metasepi.org.
I am really interested in your Metasepi project, partly because I
myself wanted to implement NetBSD in ATS about 5 years ago.
Unfortunately, I never had time to get the project started as I
needed to spend so much time on ATS2. By the way, I had planned to
use the very same approach which you call "Snatch". I had also
considered Minix but I chose NetBSD because it was a real OS.
I think I know first-handedly the dilemma you are currently in. On
one hand, you want to be able to fully focus on writing the
kernel. On the other hand, you also need to add features to Ajhc
constantly to address all kinds of issues that keep popping up,
which undoubtedly makes it very difficult for you to focus.
Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)
I would highly recommend that you use ATS to implement NetBSD
kernel. Unlike jhc, there is no semantics gap between ATS and C.
In particular, they both use the same native unboxed data
representation. Once you become familiar with ATS, you can readily
visualize the C code that your ATS source is to be compiled into.
ATS is truly an ideal language for the kind of "Snatch" approach
you want to take to re-write NetBSD. If you take the lead, then I
will be happy to "chip in" :)
I also spent some time reading documentation on jhc. Personally, I
feel that there is simply too much uncertainty to use it in real
kernel implementation. Features like GC could make the kernel
highly unpredictable, scaring away potential users.
I think that we both believe C is the right language for systems
programming. The problem with C is that it is too difficult to
write correct C programs. ATS is designed to allow the programmer
to correctly write the kind of C programs he or she wanted to
write in the first place. While jhc generates C code, the kind of
C code it generates may not be suited for kernel. This is what I
call a semantics gap.
I would highly recommend that you use ATS to implement NetBSD
kernel. Unlike jhc, there is no semantics gap between ATS and C.
In particular, they both use the same native unboxed data
representation. Once you become familiar with ATS, you can readily
visualize the C code that your ATS source is to be compiled into.
ATS is truly an ideal language for the kind of "Snatch" approach
you want to take to re-write NetBSD. If you take the lead, then I
will be happy to "chip in" :)
I also spent some time reading documentation on jhc. Personally, I
feel that there is simply too much uncertainty to use it in real
kernel implementation. Features like GC could make the kernel
highly unpredictable, scaring away potential users.
I think that we both believe C is the right language for systems
programming. The problem with C is that it is too difficult to
write correct C programs. ATS is designed to allow the programmer
to correctly write the kind of C programs he or she wanted to
write in the first place. While jhc generates C code, the kind of
C code it generates may not be suited for kernel. This is what I
call a semantics gap.
I would highly recommend that you use ATS to implement NetBSD
kernel. Unlike jhc, there is no semantics gap between ATS and C.
In particular, they both use the same native unboxed data
representation. Once you become familiar with ATS, you can readily
visualize the C code that your ATS source is to be compiled into.
ATS is truly an ideal language for the kind of "Snatch" approach
you want to take to re-write NetBSD. If you take the lead, then I
will be happy to "chip in" :)
I also spent some time reading documentation on jhc. Personally, I
feel that there is simply too much uncertainty to use it in real
kernel implementation. Features like GC could make the kernel
highly unpredictable, scaring away potential users.
I think that we both believe C is the right language for systems
programming. The problem with C is that it is too difficult to
write correct C programs. ATS is designed to allow the programmer
to correctly write the kind of C programs he or she wanted to
write in the first place. While jhc generates C code, the kind of
C code it generates may not be suited for kernel. This is what I
call a semantics gap.
I would highly recommend that you use ATS to implement NetBSD
kernel. Unlike jhc, there is no semantics gap between ATS and C.
In particular, they both use the same native unboxed data
representation. Once you become familiar with ATS, you can readily
visualize the C code that your ATS source is to be compiled into.
ATS is truly an ideal language for the kind of "Snatch" approach
you want to take to re-write NetBSD. If you take the lead, then I
will be happy to "chip in" :)
I also spent some time reading documentation on jhc. Personally, I
feel that there is simply too much uncertainty to use it in real
kernel implementation. Features like GC could make the kernel
highly unpredictable, scaring away potential users.
I think that we both believe C is the right language for systems
programming. The problem with C is that it is too difficult to
write correct C programs. ATS is designed to allow the programmer
to correctly write the kind of C programs he or she wanted to
write in the first place. While jhc generates C code, the kind of
C code it generates may not be suited for kernel. This is what I
call a semantics gap.
I would highly recommend that you use ATS to implement NetBSD
kernel. Unlike jhc, there is no semantics gap between ATS and C.
In particular, they both use the same native unboxed data
representation. Once you become familiar with ATS, you can readily
visualize the C code that your ATS source is to be compiled into.
ATS is truly an ideal language for the kind of "Snatch" approach
you want to take to re-write NetBSD. If you take the lead, then I
will be happy to "chip in" :)
I also spent some time reading documentation on jhc. Personally, I
feel that there is simply too much uncertainty to use it in real
kernel implementation. Features like GC could make the kernel
highly unpredictable, scaring away potential users.
I think that we both believe C is the right language for systems
programming. The problem with C is that it is too difficult to
write correct C programs. ATS is designed to allow the programmer
to correctly write the kind of C programs he or she wanted to
write in the first place. While jhc generates C code, the kind of
C code it generates may not be suited for kernel. This is what I
call a semantics gap.
Hongwei said...Hongwei said...Hongwei said...Hongwei said...Hongwei said...
I write this message in the hope that we could join effort in
doing something that has not been done up to now: Writing a real
kernel in (largely) functional style that can truly deliever
safety-wise as well as performance-wise.
Cheers,
--Hongwei
I write this message in the hope that we could join effort in
doing something that has not been done up to now: Writing a real
kernel in (largely) functional style that can truly deliever
safety-wise as well as performance-wise.
Cheers,
--Hongwei
I write this message in the hope that we could join effort in
doing something that has not been done up to now: Writing a real
kernel in (largely) functional style that can truly deliever
safety-wise as well as performance-wise.
Cheers,
--Hongwei
I write this message in the hope that we could join effort in
doing something that has not been done up to now: Writing a real
kernel in (largely) functional style that can truly deliever
safety-wise as well as performance-wise.
Cheers,
--Hongwei
I write this message in the hope that we could join effort in
doing something that has not been done up to now: Writing a real
kernel in (largely) functional style that can truly deliever
safety-wise as well as performance-wise.
Cheers,
--Hongwei
Follow me!Follow me!Follow me!Follow me!Follow me!
https://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ug

More Related Content

What's hot

Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformKiwamu Okabe
 
ATS language overview'
ATS language overview'ATS language overview'
ATS language overview'Kiwamu Okabe
 
Functional IoT: Programming Language and OS
Functional IoT: Programming Language and OSFunctional IoT: Programming Language and OS
Functional IoT: Programming Language and OSKiwamu 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
 
Arduino programming of ML-style in ATS
Arduino programming of ML-style in ATSArduino programming of ML-style in ATS
Arduino programming of ML-style in ATSKiwamu 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
 
ATS programming on ESP8266
ATS programming on ESP8266ATS programming on ESP8266
ATS programming on ESP8266Kiwamu Okabe
 
Functional IoT: Introduction
Functional IoT: IntroductionFunctional IoT: Introduction
Functional IoT: IntroductionKiwamu Okabe
 
Metasepi team meeting #17: Invariant captured by ATS's API
Metasepi team meeting #17: Invariant captured by ATS's APIMetasepi team meeting #17: Invariant captured by ATS's API
Metasepi team meeting #17: Invariant captured by ATS's APIKiwamu Okabe
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi projectKiwamu Okabe
 
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
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCKiwamu Okabe
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Conguest29922
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pryCreditas
 
Managing a R&D Lab with Foreman
Managing a R&D Lab with ForemanManaging a R&D Lab with Foreman
Managing a R&D Lab with ForemanJulien Pivotto
 
Reading Other Peoples Code (Web Rebels 2018)
Reading Other Peoples Code (Web Rebels 2018)Reading Other Peoples Code (Web Rebels 2018)
Reading Other Peoples Code (Web Rebels 2018)Patricia Aas
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to SwiftJohn Anderson
 
Puppet and software delivery
Puppet and software deliveryPuppet and software delivery
Puppet and software deliveryJulien Pivotto
 

What's hot (20)

Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and Platform
 
ATS language overview'
ATS language overview'ATS language overview'
ATS language overview'
 
Functional IoT: Programming Language and OS
Functional IoT: Programming Language and OSFunctional IoT: Programming Language and OS
Functional IoT: Programming Language and OS
 
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
 
Arduino programming of ML-style in ATS
Arduino programming of ML-style in ATSArduino programming of ML-style in ATS
Arduino programming of ML-style in ATS
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS language
 
ATS programming on ESP8266
ATS programming on ESP8266ATS programming on ESP8266
ATS programming on ESP8266
 
Functional IoT: Introduction
Functional IoT: IntroductionFunctional IoT: Introduction
Functional IoT: Introduction
 
Metasepi team meeting #17: Invariant captured by ATS's API
Metasepi team meeting #17: Invariant captured by ATS's APIMetasepi team meeting #17: Invariant captured by ATS's API
Metasepi team meeting #17: Invariant captured by ATS's API
 
ATS2 updates 2017
ATS2 updates 2017ATS2 updates 2017
ATS2 updates 2017
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi project
 
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?
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Con
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pry
 
Managing a R&D Lab with Foreman
Managing a R&D Lab with ForemanManaging a R&D Lab with Foreman
Managing a R&D Lab with Foreman
 
Javascript on Arduino
Javascript on ArduinoJavascript on Arduino
Javascript on Arduino
 
Reading Other Peoples Code (Web Rebels 2018)
Reading Other Peoples Code (Web Rebels 2018)Reading Other Peoples Code (Web Rebels 2018)
Reading Other Peoples Code (Web Rebels 2018)
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to Swift
 
Puppet and software delivery
Puppet and software deliveryPuppet and software delivery
Puppet and software delivery
 

Similar to Metasepi team meeting #20: Start! ATS programming on MCU

Hands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ OsakaHands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ OsakaKiwamu Okabe
 
Hands-on VeriFast with STM32 microcontroller @ Nagoya
Hands-on VeriFast with STM32 microcontroller @ NagoyaHands-on VeriFast with STM32 microcontroller @ Nagoya
Hands-on VeriFast with STM32 microcontroller @ NagoyaKiwamu Okabe
 
Padrino is agnostic
Padrino is agnosticPadrino is agnostic
Padrino is agnosticTakeshi Yabe
 
Metasepi team meeting: Ajhc Project Overview
Metasepi team meeting: Ajhc Project OverviewMetasepi team meeting: Ajhc Project Overview
Metasepi team meeting: Ajhc Project OverviewKiwamu Okabe
 
Functional MCU programming
Functional MCU programmingFunctional MCU programming
Functional MCU programmingKiwamu Okabe
 
"今" 使えるJavaScriptのトレンド
"今" 使えるJavaScriptのトレンド"今" 使えるJavaScriptのトレンド
"今" 使えるJavaScriptのトレンドHayato Mizuno
 
SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)Robert Swisher
 
Metasepi team meeting #13: NetBSD driver using Haskell
Metasepi team meeting #13: NetBSD driver using HaskellMetasepi team meeting #13: NetBSD driver using Haskell
Metasepi team meeting #13: NetBSD driver using HaskellKiwamu Okabe
 
Smart.js: JavaScript engine running on tiny MCU
Smart.js: JavaScript engine running on tiny MCUSmart.js: JavaScript engine running on tiny MCU
Smart.js: JavaScript engine running on tiny MCUKiwamu Okabe
 
Explorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoExplorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoAlvaro Viebrantz
 
String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?Jeremy Schneider
 
Redis深入浅出
Redis深入浅出Redis深入浅出
Redis深入浅出ruoyi ruan
 
QConSF 2022 - Backends in Dart
QConSF 2022 - Backends in DartQConSF 2022 - Backends in Dart
QConSF 2022 - Backends in DartChris Swan
 
How to test code with mruby
How to test code with mrubyHow to test code with mruby
How to test code with mrubyHiroshi SHIBATA
 
Bridging the gap between designers and developers at the Guardian
Bridging the gap between designers and developers at the GuardianBridging the gap between designers and developers at the Guardian
Bridging the gap between designers and developers at the GuardianKaelig Deloumeau-Prigent
 
Teflon - Anti Stick for the browser attack surface
Teflon - Anti Stick for the browser attack surfaceTeflon - Anti Stick for the browser attack surface
Teflon - Anti Stick for the browser attack surfaceSaumil Shah
 

Similar to Metasepi team meeting #20: Start! ATS programming on MCU (20)

Hands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ OsakaHands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ Osaka
 
Hands-on VeriFast with STM32 microcontroller @ Nagoya
Hands-on VeriFast with STM32 microcontroller @ NagoyaHands-on VeriFast with STM32 microcontroller @ Nagoya
Hands-on VeriFast with STM32 microcontroller @ Nagoya
 
Padrino is agnostic
Padrino is agnosticPadrino is agnostic
Padrino is agnostic
 
Metasepi team meeting: Ajhc Project Overview
Metasepi team meeting: Ajhc Project OverviewMetasepi team meeting: Ajhc Project Overview
Metasepi team meeting: Ajhc Project Overview
 
Origins of Serverless
Origins of ServerlessOrigins of Serverless
Origins of Serverless
 
Functional MCU programming
Functional MCU programmingFunctional MCU programming
Functional MCU programming
 
Automate Yo' Self
Automate Yo' SelfAutomate Yo' Self
Automate Yo' Self
 
"今" 使えるJavaScriptのトレンド
"今" 使えるJavaScriptのトレンド"今" 使えるJavaScriptのトレンド
"今" 使えるJavaScriptのトレンド
 
SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)
 
Metasepi team meeting #13: NetBSD driver using Haskell
Metasepi team meeting #13: NetBSD driver using HaskellMetasepi team meeting #13: NetBSD driver using Haskell
Metasepi team meeting #13: NetBSD driver using Haskell
 
Smart.js: JavaScript engine running on tiny MCU
Smart.js: JavaScript engine running on tiny MCUSmart.js: JavaScript engine running on tiny MCU
Smart.js: JavaScript engine running on tiny MCU
 
Mojolicious lite
Mojolicious liteMojolicious lite
Mojolicious lite
 
Explorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoExplorando Go em Ambiente Embarcado
Explorando Go em Ambiente Embarcado
 
String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?
 
Cadence flow
Cadence flowCadence flow
Cadence flow
 
Redis深入浅出
Redis深入浅出Redis深入浅出
Redis深入浅出
 
QConSF 2022 - Backends in Dart
QConSF 2022 - Backends in DartQConSF 2022 - Backends in Dart
QConSF 2022 - Backends in Dart
 
How to test code with mruby
How to test code with mrubyHow to test code with mruby
How to test code with mruby
 
Bridging the gap between designers and developers at the Guardian
Bridging the gap between designers and developers at the GuardianBridging the gap between designers and developers at the Guardian
Bridging the gap between designers and developers at the Guardian
 
Teflon - Anti Stick for the browser attack surface
Teflon - Anti Stick for the browser attack surfaceTeflon - Anti Stick for the browser attack surface
Teflon - Anti Stick for the browser attack surface
 

Recently uploaded

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 

Recently uploaded (20)

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 

Metasepi team meeting #20: Start! ATS programming on MCU

  • 1. Metasepi team meeting #20:  Start! ATS programming on MCU Metasepi team meeting #20:  Start! ATS programming on MCU Metasepi team meeting #20:  Start! ATS programming on MCU Metasepi team meeting #20:  Start! ATS programming on MCU Metasepi team meeting #20: Start! ATS programming on MCU Kiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi ProjectKiwamu Okabe @ Metasepi Project
  • 2. Demo: ATS on Arduino UnoDemo: ATS on Arduino UnoDemo: ATS on Arduino UnoDemo: ATS on Arduino UnoDemo: ATS on Arduino Uno ☆ http://nico.ms/sm24680530☆ http://nico.ms/sm24680530☆ http://nico.ms/sm24680530☆ http://nico.ms/sm24680530☆ http://nico.ms/sm24680530 ☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats ☆ Without any GC and any malloc☆ Without any GC and any malloc☆ Without any GC and any malloc☆ Without any GC and any malloc☆ Without any GC and any malloc
  • 3. Demo: Arduino UnoDemo: Arduino UnoDemo: Arduino UnoDemo: Arduino UnoDemo: Arduino Uno ☆ MCU: ATmega328☆ MCU: ATmega328☆ MCU: ATmega328☆ MCU: ATmega328☆ MCU: ATmega328 ☆ 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 http://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUno
  • 4. Demo: LCD ShieldDemo: LCD ShieldDemo: LCD ShieldDemo: LCD ShieldDemo: LCD Shield ☆ LinkSprite 16X2 LCD Keypad Shield☆ LinkSprite 16X2 LCD Keypad Shield☆ LinkSprite 16X2 LCD Keypad Shield☆ LinkSprite 16X2 LCD Keypad Shield☆ LinkSprite 16X2 LCD Keypad Shield ☆ 16x2 LCD☆ 16x2 LCD☆ 16x2 LCD☆ 16x2 LCD☆ 16x2 LCD ☆ Controled by some GPIOs☆ Controled by some GPIOs☆ Controled by some GPIOs☆ Controled by some GPIOs☆ Controled by some GPIOs http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for- arduino-version-b/ http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for- arduino-version-b/ http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for- arduino-version-b/ http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for- arduino-version-b/ http://store.linksprite.com/linksprite-16x2-lcd-keypad-shield-for- arduino-version-b/
  • 5. Demo: Software ArchitectureDemo: Software ArchitectureDemo: Software ArchitectureDemo: Software ArchitectureDemo: Software Architecture
  • 6. Demo code: main.datsDemo code: main.datsDemo code: main.datsDemo code: main.datsDemo code: main.dats
  • 7. Demo code: lcs.satsDemo code: lcs.satsDemo code: lcs.satsDemo code: lcs.satsDemo code: lcs.sats
  • 8. Demo code: lcs.datsDemo code: lcs.datsDemo code: lcs.datsDemo code: lcs.datsDemo code: lcs.dats ☆ We don't read it, today.☆ We don't read it, today.☆ We don't read it, today.☆ We don't read it, today.☆ We don't read it, today.
  • 9. AgendaAgendaAgendaAgendaAgenda ☆ [0] ATS application demo☆ [0] ATS application demo☆ [0] ATS application demo☆ [0] ATS application demo☆ [0] ATS application demo ☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi?☆ [1] What is Metasepi? ☆ [2] What is ATS language?☆ [2] What is ATS language?☆ [2] What is ATS language?☆ [2] What is ATS language?☆ [2] What is ATS language? ☆ [3] Let's read the demo code☆ [3] Let's read the demo code☆ [3] Let's read the demo code☆ [3] Let's read the demo code☆ [3] Let's read the demo code ☆ [4] Japan ATS User Group☆ [4] Japan ATS User Group☆ [4] Japan ATS User Group☆ [4] Japan ATS User Group☆ [4] Japan ATS User Group
  • 10. [1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi?[1] What is Metasepi? http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/ ☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type.☆ Unix-like OS designed by strong type. ☆ We want to use Metasepi OS for daily desktop usage. ☆ We want to use Metasepi OS for daily desktop usage. ☆ We want to use Metasepi OS for daily desktop usage. ☆ We want to use Metasepi OS for daily desktop usage. ☆ We want to use Metasepi OS for daily desktop usage. ☆ Haskell language was chosen for 1st iteration named "Arafura". ☆ Haskell language was chosen for 1st iteration named "Arafura". ☆ Haskell language was chosen for 1st iteration named "Arafura". ☆ Haskell language was chosen for 1st iteration named "Arafura". ☆ Haskell language was chosen for 1st iteration named "Arafura". ☆ ATS language is chosen for our 2nd iteration named "Bohai". ☆ ATS language is chosen for our 2nd iteration named "Bohai". ☆ ATS language is chosen for our 2nd iteration named "Bohai". ☆ ATS language is chosen for our 2nd iteration named "Bohai". ☆ ATS language is chosen for our 2nd iteration named "Bohai".
  • 11. How to create Metasepi?How to create Metasepi?How to create Metasepi?How to create Metasepi?How to create Metasepi? ☆ Use "Snatch-driven development".☆ Use "Snatch-driven development".☆ Use "Snatch-driven development".☆ Use "Snatch-driven development".☆ Use "Snatch-driven development". http://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcherhttp://en.wikipedia.org/wiki/Snatcher
  • 12. [2] What is ATS language?[2] What is ATS language?[2] What is ATS language?[2] What is ATS language?[2] What is ATS language? http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/ ☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML☆ Syntax like ML ☆ Dependent types and Linear types☆ Dependent types and Linear types☆ Dependent types and Linear types☆ Dependent types and Linear types☆ Dependent types and Linear types ☆ Without any runtime☆ Without any runtime☆ Without any runtime☆ Without any runtime☆ Without any runtime ☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC☆ Optional GC ☆ Designed by Hongwei Xi☆ Designed by Hongwei Xi☆ Designed by Hongwei Xi☆ Designed by Hongwei Xi☆ Designed by Hongwei Xi ☆ Developed at Boston University☆ Developed at Boston University☆ Developed at Boston University☆ Developed at Boston University☆ Developed at Boston University
  • 13. ATS compile flowATS compile flowATS compile flowATS compile flowATS compile flow
  • 14. [3] Let's read the demo code[3] Let's read the demo code[3] Let's read the demo code[3] Let's read the demo code[3] Let's read the demo code Start from main.dats.Start from main.dats.Start from main.dats.Start from main.dats.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 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 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 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 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
  • 15. main.dats sequencemain.dats sequencemain.dats sequencemain.dats sequencemain.dats sequence
  • 17. Power of Dependent Type #1Power of Dependent Type #1Power of Dependent Type #1Power of Dependent Type #1Power 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} = { - 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) $ 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} = { - 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) $ 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} = { - 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) $ 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} = { - 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) $ 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} = { - 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)
  • 18. Power of Dependent Type #2Power of Dependent Type #2Power of Dependent Type #2Power of Dependent Type #2Power 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 S2EVar (1829->S2Evar(n(5500))))) typechecking has failed: there are some unsolved constraints: please inspect the above reported error message(s) for information. $ 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 S2EVar (1829->S2Evar(n(5500))))) typechecking has failed: there are some unsolved constraints: please inspect the above reported error message(s) for information. $ 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 S2EVar (1829->S2Evar(n(5500))))) typechecking has failed: there are some unsolved constraints: please inspect the above reported error message(s) for information. $ 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 S2EVar (1829->S2Evar(n(5500))))) typechecking has failed: there are some unsolved constraints: please inspect the above reported error message(s) for information. $ 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 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!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time! ☆ Constraint "i + j <= n" is at lcd.sats☆ Constraint "i + j <= n" is at lcd.sats☆ Constraint "i + j <= n" is at lcd.sats☆ Constraint "i + j <= n" is at lcd.sats☆ Constraint "i + j <= n" is at lcd.sats ☆ main.dats violates the constraint☆ main.dats violates the constraint☆ main.dats violates the constraint☆ main.dats violates the constraint☆ main.dats violates the constraint
  • 19. Power of Linear Type #1Power of Linear Type #1Power of Linear Type #1Power of Linear Type #1Power 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) $ 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) $ 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) $ 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) $ 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)
  • 20. Power of Linear Type #2Power of Linear Type #2Power of Linear Type #2Power of Linear Type #2Power 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 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)]. $ make --snip-- patsopt -o DATS/main_dats.c -d DATS/main.dats /home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263 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)]. $ make --snip-- patsopt -o DATS/main_dats.c -d DATS/main.dats /home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263 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)]. $ make --snip-- patsopt -o DATS/main_dats.c -d DATS/main.dats /home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263 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)]. $ make --snip-- patsopt -o DATS/main_dats.c -d DATS/main.dats /home/kiwamu/src/arduino-ats/demo/lcd_ats/DATS/main.dats: 1263 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!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time!☆ ATS2 finds issue at compile time! ☆ Linear value "lcd" is consumed☆ Linear value "lcd" is consumed☆ Linear value "lcd" is consumed☆ Linear value "lcd" is consumed☆ Linear value "lcd" is consumed ☆ However "lcd" is used by "forever"☆ However "lcd" is used by "forever"☆ However "lcd" is used by "forever"☆ However "lcd" is used by "forever"☆ However "lcd" is used by "forever"
  • 21. [5] Japan ATS User Group[5] Japan ATS User Group[5] Japan ATS User Group[5] Japan ATS User Group[5] 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/
  • 22. Doc: ATSプログラミング入門Doc: ATSプログラミング入門Doc: ATSプログラミング入門Doc: ATSプログラミング入門Doc: ATSプログラミング入門 http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
  • 23. Doc: チュートリアルDoc: チュートリアルDoc: チュートリアルDoc: チュートリアルDoc: チュートリアル http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
  • 24. Doc: MLプログラマ向けガイドDoc: MLプログラマ向けガイドDoc: MLプログラマ向けガイドDoc: MLプログラマ向けガイドDoc: MLプログラマ向けガイド https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/ ats/ml-programmers-guide-to-ats.md https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/ ats/ml-programmers-guide-to-ats.md https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/ ats/ml-programmers-guide-to-ats.md https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/ ats/ml-programmers-guide-to-ats.md https://github.com/jats-ug/translate/blob/master/Web/cs.likai.org/ ats/ml-programmers-guide-to-ats.md
  • 25. Doc: ATS2 wikiDoc: ATS2 wikiDoc: ATS2 wikiDoc: ATS2 wikiDoc: ATS2 wiki https://github.com/githwxi/ATS-Postiats/wikihttps://github.com/githwxi/ATS-Postiats/wikihttps://github.com/githwxi/ATS-Postiats/wikihttps://github.com/githwxi/ATS-Postiats/wikihttps://github.com/githwxi/ATS-Postiats/wiki
  • 26. Paper: Applied Type SystemPaper: Applied Type SystemPaper: Applied Type SystemPaper: Applied Type SystemPaper: Applied Type System https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/ ATS-types03-ja.pdf https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/ ATS-types03-ja.pdf https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/ ATS-types03-ja.pdf https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/ ATS-types03-ja.pdf https://github.com/jats-ug/translate/raw/master/Paper/ATS-types03/ ATS-types03-ja.pdf
  • 27. ATS IDE on MonoDevelopATS IDE on MonoDevelopATS IDE on MonoDevelopATS IDE on MonoDevelopATS IDE on MonoDevelop https://github.com/ashalkhakov/ATS-Postiats-idehttps://github.com/ashalkhakov/ATS-Postiats-idehttps://github.com/ashalkhakov/ATS-Postiats-idehttps://github.com/ashalkhakov/ATS-Postiats-idehttps://github.com/ashalkhakov/ATS-Postiats-ide
  • 28. Functional IoTFunctional IoTFunctional IoTFunctional IoTFunctional IoT http://fpiot.metasepi.org/http://fpiot.metasepi.org/http://fpiot.metasepi.org/http://fpiot.metasepi.org/http://fpiot.metasepi.org/
  • 29. Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.) Date: Mon Dec 23 11:40 JST 2013 Hi Metasepi-chan, I spent quite some time today browsing metasepi.org. I am really interested in your Metasepi project, partly because I myself wanted to implement NetBSD in ATS about 5 years ago. Unfortunately, I never had time to get the project started as I needed to spend so much time on ATS2. By the way, I had planned to use the very same approach which you call "Snatch". I had also considered Minix but I chose NetBSD because it was a real OS. I think I know first-handedly the dilemma you are currently in. On one hand, you want to be able to fully focus on writing the kernel. On the other hand, you also need to add features to Ajhc constantly to address all kinds of issues that keep popping up, which undoubtedly makes it very difficult for you to focus. Date: Mon Dec 23 11:40 JST 2013 Hi Metasepi-chan, I spent quite some time today browsing metasepi.org. I am really interested in your Metasepi project, partly because I myself wanted to implement NetBSD in ATS about 5 years ago. Unfortunately, I never had time to get the project started as I needed to spend so much time on ATS2. By the way, I had planned to use the very same approach which you call "Snatch". I had also considered Minix but I chose NetBSD because it was a real OS. I think I know first-handedly the dilemma you are currently in. On one hand, you want to be able to fully focus on writing the kernel. On the other hand, you also need to add features to Ajhc constantly to address all kinds of issues that keep popping up, which undoubtedly makes it very difficult for you to focus. Date: Mon Dec 23 11:40 JST 2013 Hi Metasepi-chan, I spent quite some time today browsing metasepi.org. I am really interested in your Metasepi project, partly because I myself wanted to implement NetBSD in ATS about 5 years ago. Unfortunately, I never had time to get the project started as I needed to spend so much time on ATS2. By the way, I had planned to use the very same approach which you call "Snatch". I had also considered Minix but I chose NetBSD because it was a real OS. I think I know first-handedly the dilemma you are currently in. On one hand, you want to be able to fully focus on writing the kernel. On the other hand, you also need to add features to Ajhc constantly to address all kinds of issues that keep popping up, which undoubtedly makes it very difficult for you to focus. Date: Mon Dec 23 11:40 JST 2013 Hi Metasepi-chan, I spent quite some time today browsing metasepi.org. I am really interested in your Metasepi project, partly because I myself wanted to implement NetBSD in ATS about 5 years ago. Unfortunately, I never had time to get the project started as I needed to spend so much time on ATS2. By the way, I had planned to use the very same approach which you call "Snatch". I had also considered Minix but I chose NetBSD because it was a real OS. I think I know first-handedly the dilemma you are currently in. On one hand, you want to be able to fully focus on writing the kernel. On the other hand, you also need to add features to Ajhc constantly to address all kinds of issues that keep popping up, which undoubtedly makes it very difficult for you to focus. Date: Mon Dec 23 11:40 JST 2013 Hi Metasepi-chan, I spent quite some time today browsing metasepi.org. I am really interested in your Metasepi project, partly because I myself wanted to implement NetBSD in ATS about 5 years ago. Unfortunately, I never had time to get the project started as I needed to spend so much time on ATS2. By the way, I had planned to use the very same approach which you call "Snatch". I had also considered Minix but I chose NetBSD because it was a real OS. I think I know first-handedly the dilemma you are currently in. On one hand, you want to be able to fully focus on writing the kernel. On the other hand, you also need to add features to Ajhc constantly to address all kinds of issues that keep popping up, which undoubtedly makes it very difficult for you to focus.
  • 30. Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.)Hongwei said... (cont.) I would highly recommend that you use ATS to implement NetBSD kernel. Unlike jhc, there is no semantics gap between ATS and C. In particular, they both use the same native unboxed data representation. Once you become familiar with ATS, you can readily visualize the C code that your ATS source is to be compiled into. ATS is truly an ideal language for the kind of "Snatch" approach you want to take to re-write NetBSD. If you take the lead, then I will be happy to "chip in" :) I also spent some time reading documentation on jhc. Personally, I feel that there is simply too much uncertainty to use it in real kernel implementation. Features like GC could make the kernel highly unpredictable, scaring away potential users. I think that we both believe C is the right language for systems programming. The problem with C is that it is too difficult to write correct C programs. ATS is designed to allow the programmer to correctly write the kind of C programs he or she wanted to write in the first place. While jhc generates C code, the kind of C code it generates may not be suited for kernel. This is what I call a semantics gap. I would highly recommend that you use ATS to implement NetBSD kernel. Unlike jhc, there is no semantics gap between ATS and C. In particular, they both use the same native unboxed data representation. Once you become familiar with ATS, you can readily visualize the C code that your ATS source is to be compiled into. ATS is truly an ideal language for the kind of "Snatch" approach you want to take to re-write NetBSD. If you take the lead, then I will be happy to "chip in" :) I also spent some time reading documentation on jhc. Personally, I feel that there is simply too much uncertainty to use it in real kernel implementation. Features like GC could make the kernel highly unpredictable, scaring away potential users. I think that we both believe C is the right language for systems programming. The problem with C is that it is too difficult to write correct C programs. ATS is designed to allow the programmer to correctly write the kind of C programs he or she wanted to write in the first place. While jhc generates C code, the kind of C code it generates may not be suited for kernel. This is what I call a semantics gap. I would highly recommend that you use ATS to implement NetBSD kernel. Unlike jhc, there is no semantics gap between ATS and C. In particular, they both use the same native unboxed data representation. Once you become familiar with ATS, you can readily visualize the C code that your ATS source is to be compiled into. ATS is truly an ideal language for the kind of "Snatch" approach you want to take to re-write NetBSD. If you take the lead, then I will be happy to "chip in" :) I also spent some time reading documentation on jhc. Personally, I feel that there is simply too much uncertainty to use it in real kernel implementation. Features like GC could make the kernel highly unpredictable, scaring away potential users. I think that we both believe C is the right language for systems programming. The problem with C is that it is too difficult to write correct C programs. ATS is designed to allow the programmer to correctly write the kind of C programs he or she wanted to write in the first place. While jhc generates C code, the kind of C code it generates may not be suited for kernel. This is what I call a semantics gap. I would highly recommend that you use ATS to implement NetBSD kernel. Unlike jhc, there is no semantics gap between ATS and C. In particular, they both use the same native unboxed data representation. Once you become familiar with ATS, you can readily visualize the C code that your ATS source is to be compiled into. ATS is truly an ideal language for the kind of "Snatch" approach you want to take to re-write NetBSD. If you take the lead, then I will be happy to "chip in" :) I also spent some time reading documentation on jhc. Personally, I feel that there is simply too much uncertainty to use it in real kernel implementation. Features like GC could make the kernel highly unpredictable, scaring away potential users. I think that we both believe C is the right language for systems programming. The problem with C is that it is too difficult to write correct C programs. ATS is designed to allow the programmer to correctly write the kind of C programs he or she wanted to write in the first place. While jhc generates C code, the kind of C code it generates may not be suited for kernel. This is what I call a semantics gap. I would highly recommend that you use ATS to implement NetBSD kernel. Unlike jhc, there is no semantics gap between ATS and C. In particular, they both use the same native unboxed data representation. Once you become familiar with ATS, you can readily visualize the C code that your ATS source is to be compiled into. ATS is truly an ideal language for the kind of "Snatch" approach you want to take to re-write NetBSD. If you take the lead, then I will be happy to "chip in" :) I also spent some time reading documentation on jhc. Personally, I feel that there is simply too much uncertainty to use it in real kernel implementation. Features like GC could make the kernel highly unpredictable, scaring away potential users. I think that we both believe C is the right language for systems programming. The problem with C is that it is too difficult to write correct C programs. ATS is designed to allow the programmer to correctly write the kind of C programs he or she wanted to write in the first place. While jhc generates C code, the kind of C code it generates may not be suited for kernel. This is what I call a semantics gap.
  • 31. Hongwei said...Hongwei said...Hongwei said...Hongwei said...Hongwei said... I write this message in the hope that we could join effort in doing something that has not been done up to now: Writing a real kernel in (largely) functional style that can truly deliever safety-wise as well as performance-wise. Cheers, --Hongwei I write this message in the hope that we could join effort in doing something that has not been done up to now: Writing a real kernel in (largely) functional style that can truly deliever safety-wise as well as performance-wise. Cheers, --Hongwei I write this message in the hope that we could join effort in doing something that has not been done up to now: Writing a real kernel in (largely) functional style that can truly deliever safety-wise as well as performance-wise. Cheers, --Hongwei I write this message in the hope that we could join effort in doing something that has not been done up to now: Writing a real kernel in (largely) functional style that can truly deliever safety-wise as well as performance-wise. Cheers, --Hongwei I write this message in the hope that we could join effort in doing something that has not been done up to now: Writing a real kernel in (largely) functional style that can truly deliever safety-wise as well as performance-wise. Cheers, --Hongwei
  • 32. Follow me!Follow me!Follow me!Follow me!Follow me! https://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ughttps://twitter.com/jats_ug