SlideShare a Scribd company logo
ATS2 updates 2017ATS2 updates 2017ATS2 updates 2017ATS2 updates 2017ATS2 updates 2017
Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
What's ATS2 language?What's ATS2 language?What's ATS2 language?What's ATS2 language?What's ATS2 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/
☆ The syntax is similar to ML☆ The syntax is similar to ML☆ The syntax is similar to ML☆ The syntax is similar to ML☆ The syntax is similar to ML
☆ DML-style dependent types / Linear types☆ DML-style dependent types / Linear types☆ DML-style dependent types / Linear types☆ DML-style dependent types / Linear types☆ DML-style dependent types / Linear types
☆ Theorem proving / Safely using pointer☆ Theorem proving / Safely using pointer☆ Theorem proving / Safely using pointer☆ Theorem proving / Safely using pointer☆ Theorem proving / Safely using pointer
☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime
☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
What's Japan ATS User Group?What's Japan ATS User Group?What's Japan ATS User Group?What's Japan ATS User Group?What's 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/
☆ Translating ATS documents into Japanese☆ Translating ATS documents into Japanese☆ Translating ATS documents into Japanese☆ Translating ATS documents into Japanese☆ Translating ATS documents into Japanese
*�ATSプログラミング⼊門
��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
*�ATSプログラミングチュートリアル
��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
*�Effective�ATS
��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md
*�ATSプログラミング⼊門
��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
*�ATSプログラミングチュートリアル
��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
*�Effective�ATS
��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md
*�ATSプログラミング⼊門
��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
*�ATSプログラミングチュートリアル
��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
*�Effective�ATS
��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md
*�ATSプログラミング⼊門
��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
*�ATSプログラミングチュートリアル
��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
*�Effective�ATS
��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md
*�ATSプログラミング⼊門
��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
*�ATSプログラミングチュートリアル
��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/
*�Effective�ATS
��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md
But the translations are stopped...But the translations are stopped...But the translations are stopped...But the translations are stopped...But the translations are stopped...
$�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
$�pwd
/home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS
$�git�log�.
--snip--
commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8
Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp>
Date:���Sun�Nov�29�11:50:07�2015�+0900
����Some�fix
--snip--
$�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
$�pwd
/home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS
$�git�log�.
--snip--
commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8
Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp>
Date:���Sun�Nov�29�11:50:07�2015�+0900
����Some�fix
--snip--
$�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
$�pwd
/home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS
$�git�log�.
--snip--
commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8
Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp>
Date:���Sun�Nov�29�11:50:07�2015�+0900
����Some�fix
--snip--
$�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
$�pwd
/home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS
$�git�log�.
--snip--
commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8
Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp>
Date:���Sun�Nov�29�11:50:07�2015�+0900
����Some�fix
--snip--
$�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/
$�pwd
/home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS
$�git�log�.
--snip--
commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8
Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp>
Date:���Sun�Nov�29�11:50:07�2015�+0900
����Some�fix
--snip--
After November 2015, what happens at ATS2?After November 2015, what happens at ATS2?After November 2015, what happens at ATS2?After November 2015, what happens at ATS2?After November 2015, what happens at ATS2?
ATS-extsolve using SMT solver #1ATS-extsolve using SMT solver #1ATS-extsolve using SMT solver #1ATS-extsolve using SMT solver #1ATS-extsolve using SMT solver #1
☆ Command patsolve_smt2 turns ATS
constraints in json format into those in smt-lib2
format.
☆ Command patsolve_smt2 turns ATS
constraints in json format into those in smt-lib2
format.
☆ Command patsolve_smt2 turns ATS
constraints in json format into those in smt-lib2
format.
☆ Command patsolve_smt2 turns ATS
constraints in json format into those in smt-lib2
format.
☆ Command patsolve_smt2 turns ATS
constraints in json format into those in smt-lib2
format.
☆ It means that z3, cvc4 and etc can be used to
type-check.
☆ It means that z3, cvc4 and etc can be used to
type-check.
☆ It means that z3, cvc4 and etc can be used to
type-check.
☆ It means that z3, cvc4 and etc can be used to
type-check.
☆ It means that z3, cvc4 and etc can be used to
type-check.
☆ It can handle constraints on real numbers.☆ It can handle constraints on real numbers.☆ It can handle constraints on real numbers.☆ It can handle constraints on real numbers.☆ It can handle constraints on real numbers.
ATS-extsolve using SMT solver #2ATS-extsolve using SMT solver #2ATS-extsolve using SMT solver #2ATS-extsolve using SMT solver #2ATS-extsolve using SMT solver #2
☆ Example:☆ Example:☆ Example:☆ Example:☆ Example:
$�git�clone�https://github.com/githwxi/ATS-Postiats.git
$�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make)
$�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST
$�vi�fib.dats
$�git�clone�https://github.com/githwxi/ATS-Postiats.git
$�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make)
$�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST
$�vi�fib.dats
$�git�clone�https://github.com/githwxi/ATS-Postiats.git
$�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make)
$�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST
$�vi�fib.dats
$�git�clone�https://github.com/githwxi/ATS-Postiats.git
$�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make)
$�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST
$�vi�fib.dats
$�git�clone�https://github.com/githwxi/ATS-Postiats.git
$�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make)
$�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make)
$�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST
$�vi�fib.dats
#include�"share/atspre_staload.hats"
stacst�fib:�int�->�int
extern�praxi�fib_bas0():�[fib(0)==0]�void
extern�praxi�fib_bas1():�[fib(1)==1]�void
extern�praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void
#include�"share/atspre_staload.hats"
stacst�fib:�int�->�int
extern�praxi�fib_bas0():�[fib(0)==0]�void
extern�praxi�fib_bas1():�[fib(1)==1]�void
extern�praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void
#include�"share/atspre_staload.hats"
stacst�fib:�int�->�int
extern�praxi�fib_bas0():�[fib(0)==0]�void
extern�praxi�fib_bas1():�[fib(1)==1]�void
extern�praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void
#include�"share/atspre_staload.hats"
stacst�fib:�int�->�int
extern�praxi�fib_bas0():�[fib(0)==0]�void
extern�praxi�fib_bas1():�[fib(1)==1]�void
extern�praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void
#include�"share/atspre_staload.hats"
stacst�fib:�int�->�int
extern praxi�fib_bas0():�[fib(0)==0]�void
extern praxi�fib_bas1():�[fib(1)==1]�void
extern praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void
ATS-extsolve using SMT solver #3ATS-extsolve using SMT solver #3ATS-extsolve using SMT solver #3ATS-extsolve using SMT solver #3ATS-extsolve using SMT solver #3
fun�fib�{n:nat}�.<n>.�(n:�int(n))�:�int(fib(n))�=�let
����fun�loop�{i:nat│i�<=�n}�.<n-i>.
������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�=
��������(if�ni�>=�2�then�let
�������������prval�()�=�fib_ind2{i+2}()
�����������in
�������������loop{i+1}(ni-1,�f1,�f0+f1)
�����������end
���������else�(if�ni�>=�1�then�f1�else�f0))�//�Can't�solve�`f1`!
����prval�()�=�fib_bas0()�and�()�=�fib_bas1()
��in
����loop{0}(n,�0,�1)
��end
fun�fib�{n:nat}�.<n>.�(n:�int(n))�:�int(fib(n))�=�let
����fun�loop�{i:nat│i�<=�n}�.<n-i>.
������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�=
��������(if�ni�>=�2�then�let
�������������prval�()�=�fib_ind2{i+2}()
�����������in
�������������loop{i+1}(ni-1,�f1,�f0+f1)
�����������end
���������else�(if�ni�>=�1�then�f1�else�f0))�//�Can't�solve�`f1`!
����prval�()�=�fib_bas0()�and�()�=�fib_bas1()
��in
����loop{0}(n,�0,�1)
��end
fun�fib�{n:nat}�.<n>.�(n:�int(n))�:�int(fib(n))�=�let
����fun�loop�{i:nat│i�<=�n}�.<n-i>.
������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�=
��������(if�ni�>=�2�then�let
�������������prval�()�=�fib_ind2{i+2}()
�����������in
�������������loop{i+1}(ni-1,�f1,�f0+f1)
�����������end
���������else�(if�ni�>=�1�then�f1�else�f0))�//�Can't�solve�`f1`!
����prval�()�=�fib_bas0()�and�()�=�fib_bas1()
��in
����loop{0}(n,�0,�1)
��end
fun�fib�{n:nat}�.<n>.�(n:�int(n))�:�int(fib(n))�=�let
����fun�loop�{i:nat│i�<=�n}�.<n-i>.
������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�=
��������(if�ni�>=�2�then�let
�������������prval�()�=�fib_ind2{i+2}()
�����������in
�������������loop{i+1}(ni-1,�f1,�f0+f1)
�����������end
���������else�(if�ni�>=�1�then�f1�else�f0))�//�Can't�solve�`f1`!
����prval�()�=�fib_bas0()�and�()�=�fib_bas1()
��in
����loop{0}(n,�0,�1)
��end
fun�fib�{n:nat} .<n>.�(n:�int(n))�:�int(fib(n))�=�let
fun�loop�{i:nat│i�<=�n} .<n-i>.
������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�=
��������(if�ni�>=�2 then let
prval�()�=�fib_ind2{i+2}()
in
�������������loop{i+1}(ni-1,�f1,�f0+f1)
end
else�(if�ni�>=�1 then�f1�else�f0))�//�Can't�solve�`f1`!
prval�()�=�fib_bas0()�and�()�=�fib_bas1()
in
����loop{0}(n,�0,�1)
end
ATS-extsolve using SMT solver #4ATS-extsolve using SMT solver #4ATS-extsolve using SMT solver #4ATS-extsolve using SMT solver #4ATS-extsolve using SMT solver #4
implement�main0(argc,�argv)�=
{
��val�n�=�(if�(argc�>=�2)
�����������then�g0string2int(argv[1])�else�10):�int
��val�n�=�g1ofg0(n)
��val�n�=�(if�n�>=�0�then�n�else�0):�intGte(0)
��val�()�=�println!�("fib(",�n,�")�=�",�fib(n))
}
implement�main0(argc,�argv)�=
{
��val�n�=�(if�(argc�>=�2)
�����������then�g0string2int(argv[1])�else�10):�int
��val�n�=�g1ofg0(n)
��val�n�=�(if�n�>=�0�then�n�else�0):�intGte(0)
��val�()�=�println!�("fib(",�n,�")�=�",�fib(n))
}
implement�main0(argc,�argv)�=
{
��val�n�=�(if�(argc�>=�2)
�����������then�g0string2int(argv[1])�else�10):�int
��val�n�=�g1ofg0(n)
��val�n�=�(if�n�>=�0�then�n�else�0):�intGte(0)
��val�()�=�println!�("fib(",�n,�")�=�",�fib(n))
}
implement�main0(argc,�argv)�=
{
��val�n�=�(if�(argc�>=�2)
�����������then�g0string2int(argv[1])�else�10):�int
��val�n�=�g1ofg0(n)
��val�n�=�(if�n�>=�0�then�n�else�0):�intGte(0)
��val�()�=�println!�("fib(",�n,�")�=�",�fib(n))
}
implement�main0(argc,�argv)�=
{
val�n�=�(if�(argc�>=�2)
then�g0string2int(argv[1])�else 10):�int
val�n�=�g1ofg0(n)
val�n�=�(if�n�>=�0 then�n�else 0):�intGte(0)
val�()�=�println!�("fib(",�n,�")�=�",�fib(n))
}
$�patscc�-o�fib�fib.dats
/home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554
(line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:�
C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst
(add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n
(8879)))))
$�patscc�-o�fib�fib.dats
/home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554
(line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:�
C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst
(add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n
(8879)))))
$�patscc�-o�fib�fib.dats
/home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554
(line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:�
C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst
(add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n
(8879)))))
$�patscc�-o�fib�fib.dats
/home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554
(line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:�
C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst
(add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n
(8879)))))
$�patscc�-o�fib�fib.dats
/home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554
(line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:�
C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst
(add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n
(8879)))))
ATS-extsolve using SMT solver #5ATS-extsolve using SMT solver #5ATS-extsolve using SMT solver #5ATS-extsolve using SMT solver #5ATS-extsolve using SMT solver #5
☆ But, z3 can type-check it!☆ But, z3 can type-check it!☆ But, z3 can type-check it!☆ But, z3 can type-check it!☆ But, z3 can type-check it!
$�patscc�--constraint-ignore�-o�fib�fib.dats
$�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i
Hello�from�[patsolve_z3]!
typechecking�is�finished�successfully!
$�./fib�25
fib(25)�=�75025
$�patscc�--constraint-ignore�-o�fib�fib.dats
$�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i
Hello�from�[patsolve_z3]!
typechecking�is�finished�successfully!
$�./fib�25
fib(25)�=�75025
$�patscc�--constraint-ignore�-o�fib�fib.dats
$�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i
Hello�from�[patsolve_z3]!
typechecking�is�finished�successfully!
$�./fib�25
fib(25)�=�75025
$�patscc�--constraint-ignore�-o�fib�fib.dats
$�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i
Hello�from�[patsolve_z3]!
typechecking�is�finished�successfully!
$�./fib�25
fib(25)�=�75025
$�patscc�--constraint-ignore�-o�fib�fib.dats
$�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i
Hello�from�[patsolve_z3]!
typechecking�is�finished�successfully!
$�./fib�25
fib(25)�=�75025
NPM package manager for ATS2 #1NPM package manager for ATS2 #1NPM package manager for ATS2 #1NPM package manager for ATS2 #1NPM package manager for ATS2 #1
☆ There are many ATS2 packages at NPM.☆ There are many ATS2 packages at NPM.☆ There are many ATS2 packages at NPM.☆ There are many ATS2 packages at NPM.☆ There are many ATS2 packages at NPM.
☆ NPM is the package manager for JavaScript.☆ NPM is the package manager for JavaScript.☆ NPM is the package manager for JavaScript.☆ NPM is the package manager for JavaScript.☆ NPM is the package manager for JavaScript.
☆ https://www.npmjs.com/browse/keyword/ATS☆ https://www.npmjs.com/browse/keyword/ATS☆ https://www.npmjs.com/browse/keyword/ATS☆ https://www.npmjs.com/browse/keyword/ATS☆ https://www.npmjs.com/browse/keyword/ATS
NPM package manager for ATS2 #2NPM package manager for ATS2 #2NPM package manager for ATS2 #2NPM package manager for ATS2 #2NPM package manager for ATS2 #2
NPM package manager for ATS2 #3NPM package manager for ATS2 #3NPM package manager for ATS2 #3NPM package manager for ATS2 #3NPM package manager for ATS2 #3
☆ How to create ATS package?☆ How to create ATS package?☆ How to create ATS package?☆ How to create ATS package?☆ How to create ATS package?
☆ Please read following articles:☆ Please read following articles:☆ Please read following articles:☆ Please read following articles:☆ Please read following articles:
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html
http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html
Better JavaScript support #1Better JavaScript support #1Better JavaScript support #1Better JavaScript support #1Better JavaScript support #1
☆ ATS+Emscripten run on web browser.☆ ATS+Emscripten run on web browser.☆ ATS+Emscripten run on web browser.☆ ATS+Emscripten run on web browser.☆ ATS+Emscripten run on web browser.
☆ Command patsopt and atscc2js can run on
web browser.
☆ Command patsopt and atscc2js can run on
web browser.
☆ Command patsopt and atscc2js can run on
web browser.
☆ Command patsopt and atscc2js can run on
web browser.
☆ Command patsopt and atscc2js can run on
web browser.
☆ It means that you can compile ATS code into
JavaScript on your browser!
☆ It means that you can compile ATS code into
JavaScript on your browser!
☆ It means that you can compile ATS code into
JavaScript on your browser!
☆ It means that you can compile ATS code into
JavaScript on your browser!
☆ It means that you can compile ATS code into
JavaScript on your browser!
☆ Let's open following URL:☆ Let's open following URL:☆ Let's open following URL:☆ Let's open following URL:☆ Let's open following URL:
http://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hellohttp://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hellohttp://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hellohttp://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hellohttp://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hello
Better JavaScript support #2Better JavaScript support #2Better JavaScript support #2Better JavaScript support #2Better JavaScript support #2
The other language support #1The other language support #1The other language support #1The other language support #1The other language support #1
☆ ATS has following language backends:☆ ATS has following language backends:☆ ATS has following language backends:☆ ATS has following language backends:☆ ATS has following language backends:
*�C�language
*�Erlang
*�JavaScript
*�PHP
*�Clojure
*�Perl
*�Python3
*�Scheme
*�C�language
*�Erlang
*�JavaScript
*�PHP
*�Clojure
*�Perl
*�Python3
*�Scheme
*�C�language
*�Erlang
*�JavaScript
*�PHP
*�Clojure
*�Perl
*�Python3
*�Scheme
*�C�language
*�Erlang
*�JavaScript
*�PHP
*�Clojure
*�Perl
*�Python3
*�Scheme
*�C�language
*�Erlang
*�JavaScript
*�PHP
*�Clojure
*�Perl
*�Python3
*�Scheme
The other language support #2The other language support #2The other language support #2The other language support #2The other language support #2
☆ Support in atscc2erl and atscc2scm for
handling tail-call optimized code.
☆ Support in atscc2erl and atscc2scm for
handling tail-call optimized code.
☆ Support in atscc2erl and atscc2scm for
handling tail-call optimized code.
☆ Support in atscc2erl and atscc2scm for
handling tail-call optimized code.
☆ Support in atscc2erl and atscc2scm for
handling tail-call optimized code.
☆ Adding support for stream_vt in the following
compilers: atscc2js, atscc2py3, atscc2scm,
atscc2clj, atscc2php, atscc2pl.
☆ Adding support for stream_vt in the following
compilers: atscc2js, atscc2py3, atscc2scm,
atscc2clj, atscc2php, atscc2pl.
☆ Adding support for stream_vt in the following
compilers: atscc2js, atscc2py3, atscc2scm,
atscc2clj, atscc2php, atscc2pl.
☆ Adding support for stream_vt in the following
compilers: atscc2js, atscc2py3, atscc2scm,
atscc2clj, atscc2php, atscc2pl.
☆ Adding support for stream_vt in the following
compilers: atscc2js, atscc2py3, atscc2scm,
atscc2clj, atscc2php, atscc2pl.
Session typesSession typesSession typesSession typesSession types
セッション型チャネル:概要⼊門
(Session-typed�Channels:A�Brief�Introduction)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/
main.html
セッション型チャネル:セッションを合成しよう!
(Session-typed�Channels:Let�us�combine�sessions�together!)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/
main.html
セッション型チャネル:概要⼊門
(Session-typed�Channels:A�Brief�Introduction)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/
main.html
セッション型チャネル:セッションを合成しよう!
(Session-typed�Channels:Let�us�combine�sessions�together!)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/
main.html
セッション型チャネル:概要⼊門
(Session-typed�Channels:A�Brief�Introduction)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/
main.html
セッション型チャネル:セッションを合成しよう!
(Session-typed�Channels:Let�us�combine�sessions�together!)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/
main.html
セッション型チャネル:概要⼊門
(Session-typed�Channels:A�Brief�Introduction)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/
main.html
セッション型チャネル:セッションを合成しよう!
(Session-typed�Channels:Let�us�combine�sessions�together!)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/
main.html
セッション型チャネル:概要⼊門
(Session-typed�Channels:A�Brief�Introduction)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/
main.html
セッション型チャネル:セッションを合成しよう!
(Session-typed�Channels:Let�us�combine�sessions�together!)
http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/
main.html
Syntax highlightingSyntax highlightingSyntax highlightingSyntax highlightingSyntax highlighting
☆ Pandoc☆ Pandoc☆ Pandoc☆ Pandoc☆ Pandoc
https://github.com/jgm/skylighting/blob/master/xml/ats.xmlhttps://github.com/jgm/skylighting/blob/master/xml/ats.xmlhttps://github.com/jgm/skylighting/blob/master/xml/ats.xmlhttps://github.com/jgm/skylighting/blob/master/xml/ats.xmlhttps://github.com/jgm/skylighting/blob/master/xml/ats.xml
☆ DocBook☆ DocBook☆ DocBook☆ DocBook☆ DocBook
https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/
MYTEXT/mytexting.dats
https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/
MYTEXT/mytexting.dats
https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/
MYTEXT/mytexting.dats
https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/
MYTEXT/mytexting.dats
https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/
MYTEXT/mytexting.dats
Syntax: ifcase-expressions #1Syntax: ifcase-expressions #1Syntax: ifcase-expressions #1Syntax: ifcase-expressions #1Syntax: ifcase-expressions #1
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
ifcase.dats�*)
#include�"share/atspre_staload.hats"
fun�acker{m,n:nat}�.<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�=
��(ifcase
���│�m�=�0�=>�n�+�1
���│�n�=�0�=>�acker(m-1,�1)
���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1)))
val�()�=�assertloc(acker(3,3)�=�61)
fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�()
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
ifcase.dats�*)
#include�"share/atspre_staload.hats"
fun�acker{m,n:nat}�.<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�=
��(ifcase
���│�m�=�0�=>�n�+�1
���│�n�=�0�=>�acker(m-1,�1)
���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1)))
val�()�=�assertloc(acker(3,3)�=�61)
fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�()
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
ifcase.dats�*)
#include�"share/atspre_staload.hats"
fun�acker{m,n:nat}�.<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�=
��(ifcase
���│�m�=�0�=>�n�+�1
���│�n�=�0�=>�acker(m-1,�1)
���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1)))
val�()�=�assertloc(acker(3,3)�=�61)
fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�()
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
ifcase.dats�*)
#include�"share/atspre_staload.hats"
fun�acker{m,n:nat}�.<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�=
��(ifcase
���│�m�=�0�=>�n�+�1
���│�n�=�0�=>�acker(m-1,�1)
���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1)))
val�()�=�assertloc(acker(3,3)�=�61)
fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�()
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
ifcase.dats�*)
#include�"share/atspre_staload.hats"
fun�acker{m,n:nat} .<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�=
��(ifcase
���│�m�=�0�=>�n�+�1
���│�n�=�0�=>�acker(m-1,�1)
���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1)))
val�()�=�assertloc(acker(3,3)�=�61)
fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�()
Syntax: ifcase-expressions #2Syntax: ifcase-expressions #2Syntax: ifcase-expressions #2Syntax: ifcase-expressions #2Syntax: ifcase-expressions #2
implement�main0�()�=�()�where�{
��var�x:�int
��var�y:�int
��val�i�=�(2:�intGte(0))
��val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=>
������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1)
������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1)
������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void
��val�()�=�foo(x,�y)
��val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y)
}
implement�main0�()�=�()�where�{
��var�x:�int
��var�y:�int
��val�i�=�(2:�intGte(0))
��val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=>
������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1)
������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1)
������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void
��val�()�=�foo(x,�y)
��val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y)
}
implement�main0�()�=�()�where�{
��var�x:�int
��var�y:�int
��val�i�=�(2:�intGte(0))
��val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=>
������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1)
������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1)
������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void
��val�()�=�foo(x,�y)
��val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y)
}
implement�main0�()�=�()�where�{
��var�x:�int
��var�y:�int
��val�i�=�(2:�intGte(0))
��val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=>
������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1)
������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1)
������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void
��val�()�=�foo(x,�y)
��val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y)
}
implement�main0�()�=�()�where�{
var�x:�int
var�y:�int
val�i�=�(2:�intGte(0))
val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=>
������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1)
������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1)
������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void
val�()�=�foo(x,�y)
val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y)
}
$�patscc�ifcase.dats
$�./a.out
x�=�10�and�y�=�11
$�patscc�ifcase.dats
$�./a.out
x�=�10�and�y�=�11
$�patscc�ifcase.dats
$�./a.out
x�=�10�and�y�=�11
$�patscc�ifcase.dats
$�./a.out
x�=�10�and�y�=�11
$�patscc�ifcase.dats
$�./a.out
x�=�10�and�y�=�11
Support templates, more #1Support templates, more #1Support templates, more #1Support templates, more #1Support templates, more #1
☆ Supporting $tempenver in template
implementation: This is a crucial addition in
support of programming in ATS that may
potentially be (very) deeply template-based!!!
☆ Supporting $tempenver in template
implementation: This is a crucial addition in
support of programming in ATS that may
potentially be (very) deeply template-based!!!
☆ Supporting $tempenver in template
implementation: This is a crucial addition in
support of programming in ATS that may
potentially be (very) deeply template-based!!!
☆ Supporting $tempenver in template
implementation: This is a crucial addition in
support of programming in ATS that may
potentially be (very) deeply template-based!!!
☆ Supporting $tempenver in template
implementation: This is a crucial addition in
support of programming in ATS that may
potentially be (very) deeply template-based!!!
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
tempenver.dats�*)
#define�ATS_PACKNAME�"TEMPENVER"
#include�"share/atspre_staload.hats"
extern�fun{}�foo():�int
extern�fun{}�bar1(int):�int
extern�fun{}�bar2(int):�int
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
tempenver.dats�*)
#define�ATS_PACKNAME�"TEMPENVER"
#include�"share/atspre_staload.hats"
extern�fun{}�foo():�int
extern�fun{}�bar1(int):�int
extern�fun{}�bar2(int):�int
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
tempenver.dats�*)
#define�ATS_PACKNAME�"TEMPENVER"
#include�"share/atspre_staload.hats"
extern�fun{}�foo():�int
extern�fun{}�bar1(int):�int
extern�fun{}�bar2(int):�int
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
tempenver.dats�*)
#define�ATS_PACKNAME�"TEMPENVER"
#include�"share/atspre_staload.hats"
extern�fun{}�foo():�int
extern�fun{}�bar1(int):�int
extern�fun{}�bar2(int):�int
(*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/
tempenver.dats�*)
#define�ATS_PACKNAME�"TEMPENVER"
#include�"share/atspre_staload.hats"
extern fun{}�foo():�int
extern fun{}�bar1(int):�int
extern fun{}�bar2(int):�int
Support templates, more #2Support templates, more #2Support templates, more #2Support templates, more #2Support templates, more #2
implmnt{}�bar1(x)�=�bar2(x)
implmnt{}�bar2(x)�=�if�x�>�0�then�foo()�+�bar1(x-1)�else�0
implement�main0(argc�,argv)�=�let
����implement{}�foo((*void*))�=�argc
����val�()�=�$tempenver(argc)
��in
����println!�("bar2(10)�=�",�bar2(10))
��end
implmnt{}�bar1(x)�=�bar2(x)
implmnt{}�bar2(x)�=�if�x�>�0�then�foo()�+�bar1(x-1)�else�0
implement�main0(argc�,argv)�=�let
����implement{}�foo((*void*))�=�argc
����val�()�=�$tempenver(argc)
��in
����println!�("bar2(10)�=�",�bar2(10))
��end
implmnt{}�bar1(x)�=�bar2(x)
implmnt{}�bar2(x)�=�if�x�>�0�then�foo()�+�bar1(x-1)�else�0
implement�main0(argc�,argv)�=�let
����implement{}�foo((*void*))�=�argc
����val�()�=�$tempenver(argc)
��in
����println!�("bar2(10)�=�",�bar2(10))
��end
implmnt{}�bar1(x)�=�bar2(x)
implmnt{}�bar2(x)�=�if�x�>�0�then�foo()�+�bar1(x-1)�else�0
implement�main0(argc�,argv)�=�let
����implement{}�foo((*void*))�=�argc
����val�()�=�$tempenver(argc)
��in
����println!�("bar2(10)�=�",�bar2(10))
��end
implmnt{}�bar1(x)�=�bar2(x)
implmnt{}�bar2(x)�=�if�x�>�0 then�foo()�+�bar1(x-1)�else 0
implement�main0(argc�,argv)�=�let
implement{}�foo((*void*))�=�argc
val�()�=�$tempenver(argc)
in
����println!�("bar2(10)�=�",�bar2(10))
end
$�patscc�tempenver.dats
casper$�./a.out
bar2(10)�=�10
casper$�./a.out�100
bar2(10)�=�20
$�patscc�tempenver.dats
casper$�./a.out
bar2(10)�=�10
casper$�./a.out�100
bar2(10)�=�20
$�patscc�tempenver.dats
casper$�./a.out
bar2(10)�=�10
casper$�./a.out�100
bar2(10)�=�20
$�patscc�tempenver.dats
casper$�./a.out
bar2(10)�=�10
casper$�./a.out�100
bar2(10)�=�20
$�patscc�tempenver.dats
casper$�./a.out
bar2(10)�=�10
casper$�./a.out�100
bar2(10)�=�20
New parsing-combinator packageNew parsing-combinator packageNew parsing-combinator packageNew parsing-combinator packageNew parsing-combinator package
☆ Adding a parsing-combinator package for
libats.
☆ Adding a parsing-combinator package for
libats.
☆ Adding a parsing-combinator package for
libats.
☆ Adding a parsing-combinator package for
libats.
☆ Adding a parsing-combinator package for
libats.
☆ Adding a parsing-combinator package for
libatscc.
☆ Adding a parsing-combinator package for
libatscc.
☆ Adding a parsing-combinator package for
libatscc.
☆ Adding a parsing-combinator package for
libatscc.
☆ Adding a parsing-combinator package for
libatscc.
☆ It means following code?☆ It means following code?☆ It means following code?☆ It means following code?☆ It means following code?
https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/
libats-/hwxi/parcomb
https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/
libats-/hwxi/parcomb
https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/
libats-/hwxi/parcomb
https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/
libats-/hwxi/parcomb
https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/
libats-/hwxi/parcomb
ats-lang-club@googlegroups.comats-lang-club@googlegroups.comats-lang-club@googlegroups.comats-lang-club@googlegroups.comats-lang-club@googlegroups.com
☆ Welcome to the secret group!☆ Welcome to the secret group!☆ Welcome to the secret group!☆ Welcome to the secret group!☆ Welcome to the secret group!
I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The�
plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on�
or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei
I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The�
plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on�
or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei
I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The�
plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on�
or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei
I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The�
plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on�
or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei
I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The�
plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on�
or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei
☆ They are discussing about the future of ATS
language.
☆ They are discussing about the future of ATS
language.
☆ They are discussing about the future of ATS
language.
☆ They are discussing about the future of ATS
language.
☆ They are discussing about the future of ATS
language.
AD: 簡約!? λカ娘 10AD: 簡約!? λカ娘 10AD: 簡約!? λカ娘 10AD: 簡約!? λカ娘 10AD: 簡約!? λカ娘 10
☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b
☆ At 参照透明な海を守る会☆ At 参照透明な海を守る会☆ At 参照透明な海を守る会☆ At 参照透明な海を守る会☆ At 参照透明な海を守る会
☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)
☆ 第2章 Coqダンジョン: 底抜けの壺の夢☆ 第2章 Coqダンジョン: 底抜けの壺の夢☆ 第2章 Coqダンジョン: 底抜けの壺の夢☆ 第2章 Coqダンジョン: 底抜けの壺の夢☆ 第2章 Coqダンジョン: 底抜けの壺の夢
☆ 第3章 モナドとひも☆ 第3章 モナドとひも☆ 第3章 モナドとひも☆ 第3章 モナドとひも☆ 第3章 モナドとひも
☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!
☆ 第5章 VeriFastチュートリアル☆ 第5章 VeriFastチュートリアル☆ 第5章 VeriFastチュートリアル☆ 第5章 VeriFastチュートリアル☆ 第5章 VeriFastチュートリアル
License of photosLicense of photosLicense of photosLicense of photosLicense of photos
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr
��https://www.flickr.com/photos/exey/3960710978/
��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr
��https://www.flickr.com/photos/exey/3960710978/
��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr
��https://www.flickr.com/photos/exey/3960710978/
��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr
��https://www.flickr.com/photos/exey/3960710978/
��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr
��https://www.flickr.com/photos/exey/3960710978/
��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0

More Related Content

What's hot

Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCUMetasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCU
Kiwamu Okabe
 
Start! ATS programming
Start! ATS programmingStart! ATS programming
Start! ATS programming
Kiwamu Okabe
 
Metasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCUMetasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCU
Kiwamu Okabe
 
Functional IoT: Introduction
Functional IoT: IntroductionFunctional IoT: Introduction
Functional IoT: Introduction
Kiwamu Okabe
 
Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontroller
Kiwamu Okabe
 
Metasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCU
Kiwamu Okabe
 
Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and Platform
Kiwamu Okabe
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq users
Kiwamu Okabe
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi project
Kiwamu Okabe
 
Poster: Generate ATS interface from C code, and introduce linear type
Poster: Generate ATS interface from C code, and introduce linear typePoster: Generate ATS interface from C code, and introduce linear type
Poster: Generate ATS interface from C code, and introduce linear type
Kiwamu Okabe
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Con
guest29922
 
Dart: A Replacement for JavaScript and Why You Should Care
Dart: A Replacement for JavaScript and Why You Should CareDart: A Replacement for JavaScript and Why You Should Care
Dart: A Replacement for JavaScript and Why You Should Care
Kevin Gisi
 
JavaScript Speech Recognition
JavaScript Speech RecognitionJavaScript Speech Recognition
JavaScript Speech Recognition
FITC
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!
Chang W. Doh
 
Ruby - The Hard Bits
Ruby - The Hard BitsRuby - The Hard Bits
Ruby - The Hard Bits
Paul Gallagher
 
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
 
Coffeescript: Fad or Useful Tool? Socal Code Camp Fullerton 2015
Coffeescript: Fad or Useful Tool? Socal Code Camp Fullerton 2015Coffeescript: Fad or Useful Tool? Socal Code Camp Fullerton 2015
Coffeescript: Fad or Useful Tool? Socal Code Camp Fullerton 2015
John Schmidt
 
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLONGareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Outlyer
 
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
 
Jay Phillips's Presentation at eComm 2009
Jay Phillips's Presentation at eComm 2009Jay Phillips's Presentation at eComm 2009
Jay Phillips's Presentation at eComm 2009
eCommConf
 

What's hot (20)

Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCUMetasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCU
 
Start! ATS programming
Start! ATS programmingStart! ATS programming
Start! ATS programming
 
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
 
Functional IoT: Introduction
Functional IoT: IntroductionFunctional IoT: Introduction
Functional IoT: Introduction
 
Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontroller
 
Metasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCU
 
Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and Platform
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq users
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi project
 
Poster: Generate ATS interface from C code, and introduce linear type
Poster: Generate ATS interface from C code, and introduce linear typePoster: Generate ATS interface from C code, and introduce linear type
Poster: Generate ATS interface from C code, and introduce linear type
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Con
 
Dart: A Replacement for JavaScript and Why You Should Care
Dart: A Replacement for JavaScript and Why You Should CareDart: A Replacement for JavaScript and Why You Should Care
Dart: A Replacement for JavaScript and Why You Should Care
 
JavaScript Speech Recognition
JavaScript Speech RecognitionJavaScript Speech Recognition
JavaScript Speech Recognition
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!
 
Ruby - The Hard Bits
Ruby - The Hard BitsRuby - The Hard Bits
Ruby - The Hard Bits
 
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?
 
Coffeescript: Fad or Useful Tool? Socal Code Camp Fullerton 2015
Coffeescript: Fad or Useful Tool? Socal Code Camp Fullerton 2015Coffeescript: Fad or Useful Tool? Socal Code Camp Fullerton 2015
Coffeescript: Fad or Useful Tool? Socal Code Camp Fullerton 2015
 
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLONGareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
 
Jay Phillips's Presentation at eComm 2009
Jay Phillips's Presentation at eComm 2009Jay Phillips's Presentation at eComm 2009
Jay Phillips's Presentation at eComm 2009
 

Recently uploaded

20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 

Recently uploaded (20)

20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 

ATS2 updates 2017

  • 1. ATS2 updates 2017ATS2 updates 2017ATS2 updates 2017ATS2 updates 2017ATS2 updates 2017 Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
  • 2. What's ATS2 language?What's ATS2 language?What's ATS2 language?What's ATS2 language?What's ATS2 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/ ☆ The syntax is similar to ML☆ The syntax is similar to ML☆ The syntax is similar to ML☆ The syntax is similar to ML☆ The syntax is similar to ML ☆ DML-style dependent types / Linear types☆ DML-style dependent types / Linear types☆ DML-style dependent types / Linear types☆ DML-style dependent types / Linear types☆ DML-style dependent types / Linear types ☆ Theorem proving / Safely using pointer☆ Theorem proving / Safely using pointer☆ Theorem proving / Safely using pointer☆ Theorem proving / Safely using pointer☆ Theorem proving / Safely using pointer ☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime ☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
  • 3. What's Japan ATS User Group?What's Japan ATS User Group?What's Japan ATS User Group?What's Japan ATS User Group?What's 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/ ☆ Translating ATS documents into Japanese☆ Translating ATS documents into Japanese☆ Translating ATS documents into Japanese☆ Translating ATS documents into Japanese☆ Translating ATS documents into Japanese *�ATSプログラミング⼊門 ��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ *�ATSプログラミングチュートリアル ��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ *�Effective�ATS ��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md *�ATSプログラミング⼊門 ��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ *�ATSプログラミングチュートリアル ��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ *�Effective�ATS ��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md *�ATSプログラミング⼊門 ��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ *�ATSプログラミングチュートリアル ��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ *�Effective�ATS ��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md *�ATSプログラミング⼊門 ��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ *�ATSプログラミングチュートリアル ��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ *�Effective�ATS ��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md *�ATSプログラミング⼊門 ��http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ *�ATSプログラミングチュートリアル ��http://jats-ug.metasepi.org/doc/ATS2/ATS2TUTORIAL/ *�Effective�ATS ��https://github.com/jats-ug/translate/blob/master/Manual/EffectiveATS.md
  • 4. But the translations are stopped...But the translations are stopped...But the translations are stopped...But the translations are stopped...But the translations are stopped... $�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ $�pwd /home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS $�git�log�. --snip-- commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8 Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp> Date:���Sun�Nov�29�11:50:07�2015�+0900 ����Some�fix --snip-- $�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ $�pwd /home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS $�git�log�. --snip-- commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8 Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp> Date:���Sun�Nov�29�11:50:07�2015�+0900 ����Some�fix --snip-- $�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ $�pwd /home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS $�git�log�. --snip-- commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8 Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp> Date:���Sun�Nov�29�11:50:07�2015�+0900 ����Some�fix --snip-- $�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ $�pwd /home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS $�git�log�. --snip-- commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8 Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp> Date:���Sun�Nov�29�11:50:07�2015�+0900 ����Some�fix --snip-- $�w3m�http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/ $�pwd /home/kiwamu/doc/ATS-Postiats.jats-ug/doc/BOOK/INT2PROGINATS $�git�log�. --snip-- commit�88ce0cdbd5ecf38f6d30a0c5141c3263389d91b8 Author:�Kiwamu�Okabe�<kiwamu@debian.or.jp> Date:���Sun�Nov�29�11:50:07�2015�+0900 ����Some�fix --snip-- After November 2015, what happens at ATS2?After November 2015, what happens at ATS2?After November 2015, what happens at ATS2?After November 2015, what happens at ATS2?After November 2015, what happens at ATS2?
  • 5. ATS-extsolve using SMT solver #1ATS-extsolve using SMT solver #1ATS-extsolve using SMT solver #1ATS-extsolve using SMT solver #1ATS-extsolve using SMT solver #1 ☆ Command patsolve_smt2 turns ATS constraints in json format into those in smt-lib2 format. ☆ Command patsolve_smt2 turns ATS constraints in json format into those in smt-lib2 format. ☆ Command patsolve_smt2 turns ATS constraints in json format into those in smt-lib2 format. ☆ Command patsolve_smt2 turns ATS constraints in json format into those in smt-lib2 format. ☆ Command patsolve_smt2 turns ATS constraints in json format into those in smt-lib2 format. ☆ It means that z3, cvc4 and etc can be used to type-check. ☆ It means that z3, cvc4 and etc can be used to type-check. ☆ It means that z3, cvc4 and etc can be used to type-check. ☆ It means that z3, cvc4 and etc can be used to type-check. ☆ It means that z3, cvc4 and etc can be used to type-check. ☆ It can handle constraints on real numbers.☆ It can handle constraints on real numbers.☆ It can handle constraints on real numbers.☆ It can handle constraints on real numbers.☆ It can handle constraints on real numbers.
  • 6. ATS-extsolve using SMT solver #2ATS-extsolve using SMT solver #2ATS-extsolve using SMT solver #2ATS-extsolve using SMT solver #2ATS-extsolve using SMT solver #2 ☆ Example:☆ Example:☆ Example:☆ Example:☆ Example: $�git�clone�https://github.com/githwxi/ATS-Postiats.git $�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make) $�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST $�vi�fib.dats $�git�clone�https://github.com/githwxi/ATS-Postiats.git $�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make) $�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST $�vi�fib.dats $�git�clone�https://github.com/githwxi/ATS-Postiats.git $�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make) $�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST $�vi�fib.dats $�git�clone�https://github.com/githwxi/ATS-Postiats.git $�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make) $�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST $�vi�fib.dats $�git�clone�https://github.com/githwxi/ATS-Postiats.git $�(cd�ATS-Postiats/contrib/ATS-extsolve�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-smt2�&&�make) $�(cd�ATS-Postiats/contrib/ATS-extsolve-z3�&&�make) $�cd�ATS-Postiats/contrib/ATS-extsolve-z3/TEST $�vi�fib.dats #include�"share/atspre_staload.hats" stacst�fib:�int�->�int extern�praxi�fib_bas0():�[fib(0)==0]�void extern�praxi�fib_bas1():�[fib(1)==1]�void extern�praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void #include�"share/atspre_staload.hats" stacst�fib:�int�->�int extern�praxi�fib_bas0():�[fib(0)==0]�void extern�praxi�fib_bas1():�[fib(1)==1]�void extern�praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void #include�"share/atspre_staload.hats" stacst�fib:�int�->�int extern�praxi�fib_bas0():�[fib(0)==0]�void extern�praxi�fib_bas1():�[fib(1)==1]�void extern�praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void #include�"share/atspre_staload.hats" stacst�fib:�int�->�int extern�praxi�fib_bas0():�[fib(0)==0]�void extern�praxi�fib_bas1():�[fib(1)==1]�void extern�praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void #include�"share/atspre_staload.hats" stacst�fib:�int�->�int extern praxi�fib_bas0():�[fib(0)==0]�void extern praxi�fib_bas1():�[fib(1)==1]�void extern praxi�fib_ind2{n:int�│�n�>=�2}():�[fib(n)==fib(n-1)+fib(n-2)]�void
  • 7. ATS-extsolve using SMT solver #3ATS-extsolve using SMT solver #3ATS-extsolve using SMT solver #3ATS-extsolve using SMT solver #3ATS-extsolve using SMT solver #3 fun�fib�{n:nat}�.<n>.�(n:�int(n))�:�int(fib(n))�=�let ����fun�loop�{i:nat│i�<=�n}�.<n-i>. ������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�= ��������(if�ni�>=�2�then�let �������������prval�()�=�fib_ind2{i+2}() �����������in �������������loop{i+1}(ni-1,�f1,�f0+f1) �����������end ���������else�(if�ni�>=�1�then�f1�else�f0))�//�Can't�solve�`f1`! ����prval�()�=�fib_bas0()�and�()�=�fib_bas1() ��in ����loop{0}(n,�0,�1) ��end fun�fib�{n:nat}�.<n>.�(n:�int(n))�:�int(fib(n))�=�let ����fun�loop�{i:nat│i�<=�n}�.<n-i>. ������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�= ��������(if�ni�>=�2�then�let �������������prval�()�=�fib_ind2{i+2}() �����������in �������������loop{i+1}(ni-1,�f1,�f0+f1) �����������end ���������else�(if�ni�>=�1�then�f1�else�f0))�//�Can't�solve�`f1`! ����prval�()�=�fib_bas0()�and�()�=�fib_bas1() ��in ����loop{0}(n,�0,�1) ��end fun�fib�{n:nat}�.<n>.�(n:�int(n))�:�int(fib(n))�=�let ����fun�loop�{i:nat│i�<=�n}�.<n-i>. ������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�= ��������(if�ni�>=�2�then�let �������������prval�()�=�fib_ind2{i+2}() �����������in �������������loop{i+1}(ni-1,�f1,�f0+f1) �����������end ���������else�(if�ni�>=�1�then�f1�else�f0))�//�Can't�solve�`f1`! ����prval�()�=�fib_bas0()�and�()�=�fib_bas1() ��in ����loop{0}(n,�0,�1) ��end fun�fib�{n:nat}�.<n>.�(n:�int(n))�:�int(fib(n))�=�let ����fun�loop�{i:nat│i�<=�n}�.<n-i>. ������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�= ��������(if�ni�>=�2�then�let �������������prval�()�=�fib_ind2{i+2}() �����������in �������������loop{i+1}(ni-1,�f1,�f0+f1) �����������end ���������else�(if�ni�>=�1�then�f1�else�f0))�//�Can't�solve�`f1`! ����prval�()�=�fib_bas0()�and�()�=�fib_bas1() ��in ����loop{0}(n,�0,�1) ��end fun�fib�{n:nat} .<n>.�(n:�int(n))�:�int(fib(n))�=�let fun�loop�{i:nat│i�<=�n} .<n-i>. ������(ni:�int(n-i),�f0:�int(fib(i)),�f1:�int(fib(i+1)))�:�int(fib(n))�= ��������(if�ni�>=�2 then let prval�()�=�fib_ind2{i+2}() in �������������loop{i+1}(ni-1,�f1,�f0+f1) end else�(if�ni�>=�1 then�f1�else�f0))�//�Can't�solve�`f1`! prval�()�=�fib_bas0()�and�()�=�fib_bas1() in ����loop{0}(n,�0,�1) end
  • 8. ATS-extsolve using SMT solver #4ATS-extsolve using SMT solver #4ATS-extsolve using SMT solver #4ATS-extsolve using SMT solver #4ATS-extsolve using SMT solver #4 implement�main0(argc,�argv)�= { ��val�n�=�(if�(argc�>=�2) �����������then�g0string2int(argv[1])�else�10):�int ��val�n�=�g1ofg0(n) ��val�n�=�(if�n�>=�0�then�n�else�0):�intGte(0) ��val�()�=�println!�("fib(",�n,�")�=�",�fib(n)) } implement�main0(argc,�argv)�= { ��val�n�=�(if�(argc�>=�2) �����������then�g0string2int(argv[1])�else�10):�int ��val�n�=�g1ofg0(n) ��val�n�=�(if�n�>=�0�then�n�else�0):�intGte(0) ��val�()�=�println!�("fib(",�n,�")�=�",�fib(n)) } implement�main0(argc,�argv)�= { ��val�n�=�(if�(argc�>=�2) �����������then�g0string2int(argv[1])�else�10):�int ��val�n�=�g1ofg0(n) ��val�n�=�(if�n�>=�0�then�n�else�0):�intGte(0) ��val�()�=�println!�("fib(",�n,�")�=�",�fib(n)) } implement�main0(argc,�argv)�= { ��val�n�=�(if�(argc�>=�2) �����������then�g0string2int(argv[1])�else�10):�int ��val�n�=�g1ofg0(n) ��val�n�=�(if�n�>=�0�then�n�else�0):�intGte(0) ��val�()�=�println!�("fib(",�n,�")�=�",�fib(n)) } implement�main0(argc,�argv)�= { val�n�=�(if�(argc�>=�2) then�g0string2int(argv[1])�else 10):�int val�n�=�g1ofg0(n) val�n�=�(if�n�>=�0 then�n�else 0):�intGte(0) val�()�=�println!�("fib(",�n,�")�=�",�fib(n)) } $�patscc�-o�fib�fib.dats /home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554 (line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:� C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst (add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n (8879))))) $�patscc�-o�fib�fib.dats /home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554 (line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:� C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst (add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n (8879))))) $�patscc�-o�fib�fib.dats /home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554 (line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:� C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst (add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n (8879))))) $�patscc�-o�fib�fib.dats /home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554 (line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:� C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst (add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n (8879))))) $�patscc�-o�fib�fib.dats /home/kiwamu/src/ATS-Postiats/contrib/ATS-extsolve-z3/TEST/fib.dats:�554 (line=17,�offs=32)�--�556(line=17,�offs=34):�error(3):�unsolved�constraint:� C3NSTRprop(C3TKmain();�S2Eeqeq(S2Eapp(S2Ecst(fib);�S2Eapp(S2Ecst (add_int_int);�S2Evar(i(8880)),�S2Eintinf(1)));�S2Eapp(S2Ecst(fib);�S2Evar(n (8879)))))
  • 9. ATS-extsolve using SMT solver #5ATS-extsolve using SMT solver #5ATS-extsolve using SMT solver #5ATS-extsolve using SMT solver #5ATS-extsolve using SMT solver #5 ☆ But, z3 can type-check it!☆ But, z3 can type-check it!☆ But, z3 can type-check it!☆ But, z3 can type-check it!☆ But, z3 can type-check it! $�patscc�--constraint-ignore�-o�fib�fib.dats $�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i Hello�from�[patsolve_z3]! typechecking�is�finished�successfully! $�./fib�25 fib(25)�=�75025 $�patscc�--constraint-ignore�-o�fib�fib.dats $�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i Hello�from�[patsolve_z3]! typechecking�is�finished�successfully! $�./fib�25 fib(25)�=�75025 $�patscc�--constraint-ignore�-o�fib�fib.dats $�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i Hello�from�[patsolve_z3]! typechecking�is�finished�successfully! $�./fib�25 fib(25)�=�75025 $�patscc�--constraint-ignore�-o�fib�fib.dats $�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i Hello�from�[patsolve_z3]! typechecking�is�finished�successfully! $�./fib�25 fib(25)�=�75025 $�patscc�--constraint-ignore�-o�fib�fib.dats $�patsopt�-tc�--constraint-export�-d�fib.dats�│�../patsolve_z3�-i Hello�from�[patsolve_z3]! typechecking�is�finished�successfully! $�./fib�25 fib(25)�=�75025
  • 10. NPM package manager for ATS2 #1NPM package manager for ATS2 #1NPM package manager for ATS2 #1NPM package manager for ATS2 #1NPM package manager for ATS2 #1 ☆ There are many ATS2 packages at NPM.☆ There are many ATS2 packages at NPM.☆ There are many ATS2 packages at NPM.☆ There are many ATS2 packages at NPM.☆ There are many ATS2 packages at NPM. ☆ NPM is the package manager for JavaScript.☆ NPM is the package manager for JavaScript.☆ NPM is the package manager for JavaScript.☆ NPM is the package manager for JavaScript.☆ NPM is the package manager for JavaScript. ☆ https://www.npmjs.com/browse/keyword/ATS☆ https://www.npmjs.com/browse/keyword/ATS☆ https://www.npmjs.com/browse/keyword/ATS☆ https://www.npmjs.com/browse/keyword/ATS☆ https://www.npmjs.com/browse/keyword/ATS
  • 11. NPM package manager for ATS2 #2NPM package manager for ATS2 #2NPM package manager for ATS2 #2NPM package manager for ATS2 #2NPM package manager for ATS2 #2
  • 12. NPM package manager for ATS2 #3NPM package manager for ATS2 #3NPM package manager for ATS2 #3NPM package manager for ATS2 #3NPM package manager for ATS2 #3 ☆ How to create ATS package?☆ How to create ATS package?☆ How to create ATS package?☆ How to create ATS package?☆ How to create ATS package? ☆ Please read following articles:☆ Please read following articles:☆ Please read following articles:☆ Please read following articles:☆ Please read following articles: http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/DivideConquer/main.html http://ats-lang.sourceforge.net/EXAMPLE/EFFECTIVATS/GraphSearch-npm/main.html
  • 13. Better JavaScript support #1Better JavaScript support #1Better JavaScript support #1Better JavaScript support #1Better JavaScript support #1 ☆ ATS+Emscripten run on web browser.☆ ATS+Emscripten run on web browser.☆ ATS+Emscripten run on web browser.☆ ATS+Emscripten run on web browser.☆ ATS+Emscripten run on web browser. ☆ Command patsopt and atscc2js can run on web browser. ☆ Command patsopt and atscc2js can run on web browser. ☆ Command patsopt and atscc2js can run on web browser. ☆ Command patsopt and atscc2js can run on web browser. ☆ Command patsopt and atscc2js can run on web browser. ☆ It means that you can compile ATS code into JavaScript on your browser! ☆ It means that you can compile ATS code into JavaScript on your browser! ☆ It means that you can compile ATS code into JavaScript on your browser! ☆ It means that you can compile ATS code into JavaScript on your browser! ☆ It means that you can compile ATS code into JavaScript on your browser! ☆ Let's open following URL:☆ Let's open following URL:☆ Let's open following URL:☆ Let's open following URL:☆ Let's open following URL: http://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hellohttp://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hellohttp://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hellohttp://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hellohttp://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_fil=hello
  • 14. Better JavaScript support #2Better JavaScript support #2Better JavaScript support #2Better JavaScript support #2Better JavaScript support #2
  • 15. The other language support #1The other language support #1The other language support #1The other language support #1The other language support #1 ☆ ATS has following language backends:☆ ATS has following language backends:☆ ATS has following language backends:☆ ATS has following language backends:☆ ATS has following language backends: *�C�language *�Erlang *�JavaScript *�PHP *�Clojure *�Perl *�Python3 *�Scheme *�C�language *�Erlang *�JavaScript *�PHP *�Clojure *�Perl *�Python3 *�Scheme *�C�language *�Erlang *�JavaScript *�PHP *�Clojure *�Perl *�Python3 *�Scheme *�C�language *�Erlang *�JavaScript *�PHP *�Clojure *�Perl *�Python3 *�Scheme *�C�language *�Erlang *�JavaScript *�PHP *�Clojure *�Perl *�Python3 *�Scheme
  • 16. The other language support #2The other language support #2The other language support #2The other language support #2The other language support #2 ☆ Support in atscc2erl and atscc2scm for handling tail-call optimized code. ☆ Support in atscc2erl and atscc2scm for handling tail-call optimized code. ☆ Support in atscc2erl and atscc2scm for handling tail-call optimized code. ☆ Support in atscc2erl and atscc2scm for handling tail-call optimized code. ☆ Support in atscc2erl and atscc2scm for handling tail-call optimized code. ☆ Adding support for stream_vt in the following compilers: atscc2js, atscc2py3, atscc2scm, atscc2clj, atscc2php, atscc2pl. ☆ Adding support for stream_vt in the following compilers: atscc2js, atscc2py3, atscc2scm, atscc2clj, atscc2php, atscc2pl. ☆ Adding support for stream_vt in the following compilers: atscc2js, atscc2py3, atscc2scm, atscc2clj, atscc2php, atscc2pl. ☆ Adding support for stream_vt in the following compilers: atscc2js, atscc2py3, atscc2scm, atscc2clj, atscc2php, atscc2pl. ☆ Adding support for stream_vt in the following compilers: atscc2js, atscc2py3, atscc2scm, atscc2clj, atscc2php, atscc2pl.
  • 17. Session typesSession typesSession typesSession typesSession types セッション型チャネル:概要⼊門 (Session-typed�Channels:A�Brief�Introduction) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/ main.html セッション型チャネル:セッションを合成しよう! (Session-typed�Channels:Let�us�combine�sessions�together!) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/ main.html セッション型チャネル:概要⼊門 (Session-typed�Channels:A�Brief�Introduction) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/ main.html セッション型チャネル:セッションを合成しよう! (Session-typed�Channels:Let�us�combine�sessions�together!) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/ main.html セッション型チャネル:概要⼊門 (Session-typed�Channels:A�Brief�Introduction) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/ main.html セッション型チャネル:セッションを合成しよう! (Session-typed�Channels:Let�us�combine�sessions�together!) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/ main.html セッション型チャネル:概要⼊門 (Session-typed�Channels:A�Brief�Introduction) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/ main.html セッション型チャネル:セッションを合成しよう! (Session-typed�Channels:Let�us�combine�sessions�together!) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/ main.html セッション型チャネル:概要⼊門 (Session-typed�Channels:A�Brief�Introduction) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-1/ main.html セッション型チャネル:セッションを合成しよう! (Session-typed�Channels:Let�us�combine�sessions�together!) http://jats-ug.metasepi.org/doc/ATS2/EXAMPLE/EFFECTIVATS/ssntyped-channels-2/ main.html
  • 18. Syntax highlightingSyntax highlightingSyntax highlightingSyntax highlightingSyntax highlighting ☆ Pandoc☆ Pandoc☆ Pandoc☆ Pandoc☆ Pandoc https://github.com/jgm/skylighting/blob/master/xml/ats.xmlhttps://github.com/jgm/skylighting/blob/master/xml/ats.xmlhttps://github.com/jgm/skylighting/blob/master/xml/ats.xmlhttps://github.com/jgm/skylighting/blob/master/xml/ats.xmlhttps://github.com/jgm/skylighting/blob/master/xml/ats.xml ☆ DocBook☆ DocBook☆ DocBook☆ DocBook☆ DocBook https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/ MYTEXT/mytexting.dats https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/ MYTEXT/mytexting.dats https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/ MYTEXT/mytexting.dats https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/ MYTEXT/mytexting.dats https://github.com/githwxi/ATS-Postiats/blob/master/doc/BOOK/INT2PROGINATS/ MYTEXT/mytexting.dats
  • 19. Syntax: ifcase-expressions #1Syntax: ifcase-expressions #1Syntax: ifcase-expressions #1Syntax: ifcase-expressions #1Syntax: ifcase-expressions #1 (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ ifcase.dats�*) #include�"share/atspre_staload.hats" fun�acker{m,n:nat}�.<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�= ��(ifcase ���│�m�=�0�=>�n�+�1 ���│�n�=�0�=>�acker(m-1,�1) ���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1))) val�()�=�assertloc(acker(3,3)�=�61) fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�() (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ ifcase.dats�*) #include�"share/atspre_staload.hats" fun�acker{m,n:nat}�.<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�= ��(ifcase ���│�m�=�0�=>�n�+�1 ���│�n�=�0�=>�acker(m-1,�1) ���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1))) val�()�=�assertloc(acker(3,3)�=�61) fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�() (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ ifcase.dats�*) #include�"share/atspre_staload.hats" fun�acker{m,n:nat}�.<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�= ��(ifcase ���│�m�=�0�=>�n�+�1 ���│�n�=�0�=>�acker(m-1,�1) ���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1))) val�()�=�assertloc(acker(3,3)�=�61) fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�() (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ ifcase.dats�*) #include�"share/atspre_staload.hats" fun�acker{m,n:nat}�.<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�= ��(ifcase ���│�m�=�0�=>�n�+�1 ���│�n�=�0�=>�acker(m-1,�1) ���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1))) val�()�=�assertloc(acker(3,3)�=�61) fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�() (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ ifcase.dats�*) #include�"share/atspre_staload.hats" fun�acker{m,n:nat} .<m,n>.�(m:�int(m),�n:�int(n))�:�intGte(0)�= ��(ifcase ���│�m�=�0�=>�n�+�1 ���│�n�=�0�=>�acker(m-1,�1) ���│�_(*else*)�=>�acker(m-1,�acker(m,�n-1))) val�()�=�assertloc(acker(3,3)�=�61) fun�foo{i:nat}�(x:�int(i),�y:�int(i+1)):�void�=�()
  • 20. Syntax: ifcase-expressions #2Syntax: ifcase-expressions #2Syntax: ifcase-expressions #2Syntax: ifcase-expressions #2Syntax: ifcase-expressions #2 implement�main0�()�=�()�where�{ ��var�x:�int ��var�y:�int ��val�i�=�(2:�intGte(0)) ��val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=> ������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1) ������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1) ������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void ��val�()�=�foo(x,�y) ��val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y) } implement�main0�()�=�()�where�{ ��var�x:�int ��var�y:�int ��val�i�=�(2:�intGte(0)) ��val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=> ������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1) ������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1) ������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void ��val�()�=�foo(x,�y) ��val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y) } implement�main0�()�=�()�where�{ ��var�x:�int ��var�y:�int ��val�i�=�(2:�intGte(0)) ��val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=> ������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1) ������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1) ������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void ��val�()�=�foo(x,�y) ��val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y) } implement�main0�()�=�()�where�{ ��var�x:�int ��var�y:�int ��val�i�=�(2:�intGte(0)) ��val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=> ������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1) ������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1) ������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void ��val�()�=�foo(x,�y) ��val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y) } implement�main0�()�=�()�where�{ var�x:�int var�y:�int val�i�=�(2:�intGte(0)) val�()�=�(ifcase:�[i:nat]�(x:�int(i),�y:�int(i+1))�=> ������������│�i�=�0�=>�(x�:=�i;�y�:=�x+1) ������������│�i�=�1�=>�(x�:=�i;�y�:=�x+1) ������������│�_(*i�>=�1*)�=>�(x�:=�10;�y�:=�11)):�void val�()�=�foo(x,�y) val�()�=�println!�("x�=�",�x,�"�and�y�=�",�y) } $�patscc�ifcase.dats $�./a.out x�=�10�and�y�=�11 $�patscc�ifcase.dats $�./a.out x�=�10�and�y�=�11 $�patscc�ifcase.dats $�./a.out x�=�10�and�y�=�11 $�patscc�ifcase.dats $�./a.out x�=�10�and�y�=�11 $�patscc�ifcase.dats $�./a.out x�=�10�and�y�=�11
  • 21. Support templates, more #1Support templates, more #1Support templates, more #1Support templates, more #1Support templates, more #1 ☆ Supporting $tempenver in template implementation: This is a crucial addition in support of programming in ATS that may potentially be (very) deeply template-based!!! ☆ Supporting $tempenver in template implementation: This is a crucial addition in support of programming in ATS that may potentially be (very) deeply template-based!!! ☆ Supporting $tempenver in template implementation: This is a crucial addition in support of programming in ATS that may potentially be (very) deeply template-based!!! ☆ Supporting $tempenver in template implementation: This is a crucial addition in support of programming in ATS that may potentially be (very) deeply template-based!!! ☆ Supporting $tempenver in template implementation: This is a crucial addition in support of programming in ATS that may potentially be (very) deeply template-based!!! (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ tempenver.dats�*) #define�ATS_PACKNAME�"TEMPENVER" #include�"share/atspre_staload.hats" extern�fun{}�foo():�int extern�fun{}�bar1(int):�int extern�fun{}�bar2(int):�int (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ tempenver.dats�*) #define�ATS_PACKNAME�"TEMPENVER" #include�"share/atspre_staload.hats" extern�fun{}�foo():�int extern�fun{}�bar1(int):�int extern�fun{}�bar2(int):�int (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ tempenver.dats�*) #define�ATS_PACKNAME�"TEMPENVER" #include�"share/atspre_staload.hats" extern�fun{}�foo():�int extern�fun{}�bar1(int):�int extern�fun{}�bar2(int):�int (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ tempenver.dats�*) #define�ATS_PACKNAME�"TEMPENVER" #include�"share/atspre_staload.hats" extern�fun{}�foo():�int extern�fun{}�bar1(int):�int extern�fun{}�bar2(int):�int (*�https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/TESTATS/ tempenver.dats�*) #define�ATS_PACKNAME�"TEMPENVER" #include�"share/atspre_staload.hats" extern fun{}�foo():�int extern fun{}�bar1(int):�int extern fun{}�bar2(int):�int
  • 22. Support templates, more #2Support templates, more #2Support templates, more #2Support templates, more #2Support templates, more #2 implmnt{}�bar1(x)�=�bar2(x) implmnt{}�bar2(x)�=�if�x�>�0�then�foo()�+�bar1(x-1)�else�0 implement�main0(argc�,argv)�=�let ����implement{}�foo((*void*))�=�argc ����val�()�=�$tempenver(argc) ��in ����println!�("bar2(10)�=�",�bar2(10)) ��end implmnt{}�bar1(x)�=�bar2(x) implmnt{}�bar2(x)�=�if�x�>�0�then�foo()�+�bar1(x-1)�else�0 implement�main0(argc�,argv)�=�let ����implement{}�foo((*void*))�=�argc ����val�()�=�$tempenver(argc) ��in ����println!�("bar2(10)�=�",�bar2(10)) ��end implmnt{}�bar1(x)�=�bar2(x) implmnt{}�bar2(x)�=�if�x�>�0�then�foo()�+�bar1(x-1)�else�0 implement�main0(argc�,argv)�=�let ����implement{}�foo((*void*))�=�argc ����val�()�=�$tempenver(argc) ��in ����println!�("bar2(10)�=�",�bar2(10)) ��end implmnt{}�bar1(x)�=�bar2(x) implmnt{}�bar2(x)�=�if�x�>�0�then�foo()�+�bar1(x-1)�else�0 implement�main0(argc�,argv)�=�let ����implement{}�foo((*void*))�=�argc ����val�()�=�$tempenver(argc) ��in ����println!�("bar2(10)�=�",�bar2(10)) ��end implmnt{}�bar1(x)�=�bar2(x) implmnt{}�bar2(x)�=�if�x�>�0 then�foo()�+�bar1(x-1)�else 0 implement�main0(argc�,argv)�=�let implement{}�foo((*void*))�=�argc val�()�=�$tempenver(argc) in ����println!�("bar2(10)�=�",�bar2(10)) end $�patscc�tempenver.dats casper$�./a.out bar2(10)�=�10 casper$�./a.out�100 bar2(10)�=�20 $�patscc�tempenver.dats casper$�./a.out bar2(10)�=�10 casper$�./a.out�100 bar2(10)�=�20 $�patscc�tempenver.dats casper$�./a.out bar2(10)�=�10 casper$�./a.out�100 bar2(10)�=�20 $�patscc�tempenver.dats casper$�./a.out bar2(10)�=�10 casper$�./a.out�100 bar2(10)�=�20 $�patscc�tempenver.dats casper$�./a.out bar2(10)�=�10 casper$�./a.out�100 bar2(10)�=�20
  • 23. New parsing-combinator packageNew parsing-combinator packageNew parsing-combinator packageNew parsing-combinator packageNew parsing-combinator package ☆ Adding a parsing-combinator package for libats. ☆ Adding a parsing-combinator package for libats. ☆ Adding a parsing-combinator package for libats. ☆ Adding a parsing-combinator package for libats. ☆ Adding a parsing-combinator package for libats. ☆ Adding a parsing-combinator package for libatscc. ☆ Adding a parsing-combinator package for libatscc. ☆ Adding a parsing-combinator package for libatscc. ☆ Adding a parsing-combinator package for libatscc. ☆ Adding a parsing-combinator package for libatscc. ☆ It means following code?☆ It means following code?☆ It means following code?☆ It means following code?☆ It means following code? https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/ libats-/hwxi/parcomb https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/ libats-/hwxi/parcomb https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/ libats-/hwxi/parcomb https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/ libats-/hwxi/parcomb https://github.com/githwxi/ATS-Postiats/tree/master/npm-utils/contrib/ libats-/hwxi/parcomb
  • 24. ats-lang-club@googlegroups.comats-lang-club@googlegroups.comats-lang-club@googlegroups.comats-lang-club@googlegroups.comats-lang-club@googlegroups.com ☆ Welcome to the secret group!☆ Welcome to the secret group!☆ Welcome to the secret group!☆ Welcome to the secret group!☆ Welcome to the secret group! I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The� plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on� or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The� plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on� or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The� plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on� or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The� plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on� or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei I�have�just�created�the�ats-lang-club.�Membership�is�by�invitation�only.�The� plan�is�to�use�this�group�to�discuss�all�matters,�general�and�specific,�on� or�related�to�"evangelizing"�ATS.�Cheers!�--Hongwei ☆ They are discussing about the future of ATS language. ☆ They are discussing about the future of ATS language. ☆ They are discussing about the future of ATS language. ☆ They are discussing about the future of ATS language. ☆ They are discussing about the future of ATS language.
  • 25. AD: 簡約!? λカ娘 10AD: 簡約!? λカ娘 10AD: 簡約!? λカ娘 10AD: 簡約!? λカ娘 10AD: 簡約!? λカ娘 10 ☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b ☆ At 参照透明な海を守る会☆ At 参照透明な海を守る会☆ At 参照透明な海を守る会☆ At 参照透明な海を守る会☆ At 参照透明な海を守る会 ☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)☆ 第1章 IST(Internal Set Theory) ⼊門 (後編)☆ 第1章 IST(Internal Set Theory) ⼊門 (後編) ☆ 第2章 Coqダンジョン: 底抜けの壺の夢☆ 第2章 Coqダンジョン: 底抜けの壺の夢☆ 第2章 Coqダンジョン: 底抜けの壺の夢☆ 第2章 Coqダンジョン: 底抜けの壺の夢☆ 第2章 Coqダンジョン: 底抜けの壺の夢 ☆ 第3章 モナドとひも☆ 第3章 モナドとひも☆ 第3章 モナドとひも☆ 第3章 モナドとひも☆ 第3章 モナドとひも ☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド!☆ 第4章 ⽮澤にこ先輩と⼀緒にモナドモナド! ☆ 第5章 VeriFastチュートリアル☆ 第5章 VeriFastチュートリアル☆ 第5章 VeriFastチュートリアル☆ 第5章 VeriFastチュートリアル☆ 第5章 VeriFastチュートリアル
  • 26. License of photosLicense of photosLicense of photosLicense of photosLicense of photos *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr ��https://www.flickr.com/photos/exey/3960710978/ ��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr ��https://www.flickr.com/photos/exey/3960710978/ ��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr ��https://www.flickr.com/photos/exey/3960710978/ ��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr ��https://www.flickr.com/photos/exey/3960710978/ ��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Update�│�Model:�Viktoria�Derevtsova�│�Exey�Panteleev�│�Flickr ��https://www.flickr.com/photos/exey/3960710978/ ��Copyright:�Exey�Panteleev�/�License:�CC�BY�2.0