Atscc2clj


#1

I am pleased to announce that
ATS code can now be compiled to Clojure (and then to JVM).

I include an example as follows.

Obviously, the generated Clojure code is not so-called idiomatic Clojure
code.
But it is really a lot safer than manually written Clojure code because the
source
of the code passes type-checking in ATS.

;;fun
(defn
fact[arg0]
(
with-local-vars
[
;;knd = 0
tmpret0 nil
tmp1 nil
tmp2 nil
tmp3 nil
;;var tmplab, tmplab_clj
] ;; with-local-vars
;; __patsflab_fact
(var-set tmp1 (ats2cljpre_gt_int0_int0 arg0 0))
(if @tmp1
(do
(var-set tmp3 (ats2cljpre_sub_int0_int0 arg0 1))
(var-set tmp2 (fact @tmp3))
(ats2cljpre_mul_int0_int0 arg0 @tmp2)
) ;; if-then
(do
1
) ;; if-else
)
) ;; end-of-with-local-vars
) ;; end-of-fun

Now I need to figure out how to write apps in Clojure :slight_smile: After that, we
should be able to write apps in ATS (via Clojure).

Cheers!


#2

Ported some old code for testing atscc2cli:

https://github.com/githwxi/ATS-Postiats-contrib/tree/master/projects/SMALL/GameOf24/ClojureOn Friday, July 15, 2016 at 10:59:26 AM UTC-4, gmhwxi wrote:

For the record, here is the directory for Atscc2clj:

https://github.com/githwxi/ATS-Postiats-contrib/tree/master/projects/MEDIUM/CATS-atsccomp/CATS-atscc2clj

There is a Makefile for generating atscc2clj. Also, some of the running
examples can be found at:

https://github.com/githwxi/ATS-Postiats-contrib/tree/master/projects/MEDIUM/CATS-atsccomp/CATS-atscc2clj/TEST

Clojure uses a rather peculiar way to support optimization of recursive
tail-calls. So far, ATS can only properly handle tail-call
optimization if the call is located not inside the body of a pattern
matching clause. Hopefully, this restriction can be removed
later…

On Thursday, July 14, 2016 at 5:15:35 PM UTC-4, gmhwxi wrote:

I am pleased to announce that
ATS code can now be compiled to Clojure (and then to JVM).

I include an example as follows.

Obviously, the generated Clojure code is not so-called idiomatic Clojure
code.
But it is really a lot safer than manually written Clojure code because
the source
of the code passes type-checking in ATS.

;;fun
(defn
fact[arg0]
(
with-local-vars
[
;;knd = 0
tmpret0 nil
tmp1 nil
tmp2 nil
tmp3 nil
;;var tmplab, tmplab_clj
] ;; with-local-vars
;; __patsflab_fact
(var-set tmp1 (ats2cljpre_gt_int0_int0 arg0 0))
(if @tmp1
(do
(var-set tmp3 (ats2cljpre_sub_int0_int0 arg0 1))
(var-set tmp2 (fact @tmp3))
(ats2cljpre_mul_int0_int0 arg0 @tmp2)
) ;; if-then
(do
1
) ;; if-else
)
) ;; end-of-with-local-vars
) ;; end-of-fun

Now I need to figure out how to write apps in Clojure :slight_smile: After that, we
should be able to write apps in ATS (via Clojure).

Cheers!


#3

Very nice!On Thu, Jul 14, 2016 at 5:15 PM, gmhwxi gmh...@gmail.com wrote:

I am pleased to announce that
ATS code can now be compiled to Clojure (and then to JVM).

I include an example as follows.

Obviously, the generated Clojure code is not so-called idiomatic Clojure
code.
But it is really a lot safer than manually written Clojure code because the
source
of the code passes type-checking in ATS.

;;fun
(defn
fact[arg0]
(
with-local-vars
[
;;knd = 0
tmpret0 nil
tmp1 nil
tmp2 nil
tmp3 nil
;;var tmplab, tmplab_clj
] ;; with-local-vars
;; __patsflab_fact
(var-set tmp1 (ats2cljpre_gt_int0_int0 arg0 0))
(if @tmp1
(do
(var-set tmp3 (ats2cljpre_sub_int0_int0 arg0 1))
(var-set tmp2 (fact @tmp3))
(ats2cljpre_mul_int0_int0 arg0 @tmp2)
) ;; if-then
(do
1
) ;; if-else
)
) ;; end-of-with-local-vars
) ;; end-of-fun

Now I need to figure out how to write apps in Clojure :slight_smile: After that, we
should be able to write apps in ATS (via Clojure).

Cheers!


You received this message because you are subscribed to the Google Groups
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to ats-lang-user...@googlegroups.com.
To post to this group, send email to ats-lan...@googlegroups.com.
Visit this group at https://groups.google.com/group/ats-lang-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/ats-lang-users/401b2ea7-b5af-4805-8ba8-1d5b30b7c899%40googlegroups.com.

Brandon Barker
brandon...@gmail.com


#4

For the record, here is the directory for Atscc2clj:

https://github.com/githwxi/ATS-Postiats-contrib/tree/master/projects/MEDIUM/CATS-atsccomp/CATS-atscc2clj

There is a Makefile for generating atscc2clj. Also, some of the running
examples can be found at:

https://github.com/githwxi/ATS-Postiats-contrib/tree/master/projects/MEDIUM/CATS-atsccomp/CATS-atscc2clj/TEST

Clojure uses a rather peculiar way to support optimization of recursive
tail-calls. So far, ATS can only properly handle tail-call
optimization if the call is located not inside the body of a pattern
matching clause. Hopefully, this restriction can be removed
later…On Thursday, July 14, 2016 at 5:15:35 PM UTC-4, gmhwxi wrote:

I am pleased to announce that
ATS code can now be compiled to Clojure (and then to JVM).

I include an example as follows.

Obviously, the generated Clojure code is not so-called idiomatic Clojure
code.
But it is really a lot safer than manually written Clojure code because
the source
of the code passes type-checking in ATS.

;;fun
(defn
fact[arg0]
(
with-local-vars
[
;;knd = 0
tmpret0 nil
tmp1 nil
tmp2 nil
tmp3 nil
;;var tmplab, tmplab_clj
] ;; with-local-vars
;; __patsflab_fact
(var-set tmp1 (ats2cljpre_gt_int0_int0 arg0 0))
(if @tmp1
(do
(var-set tmp3 (ats2cljpre_sub_int0_int0 arg0 1))
(var-set tmp2 (fact @tmp3))
(ats2cljpre_mul_int0_int0 arg0 @tmp2)
) ;; if-then
(do
1
) ;; if-else
)
) ;; end-of-with-local-vars
) ;; end-of-fun

Now I need to figure out how to write apps in Clojure :slight_smile: After that, we
should be able to write apps in ATS (via Clojure).

Cheers!


#5

With all the Java classes being available, it is really really pleasant :)On Thursday, July 14, 2016 at 5:19:03 PM UTC-4, Brandon Barker wrote:

Very nice!

On Thu, Jul 14, 2016 at 5:15 PM, gmhwxi <…> wrote:

I am pleased to announce that
ATS code can now be compiled to Clojure (and then to JVM).

I include an example as follows.

Obviously, the generated Clojure code is not so-called idiomatic Clojure
code.
But it is really a lot safer than manually written Clojure code because
the
source
of the code passes type-checking in ATS.

;;fun
(defn
fact[arg0]
(
with-local-vars
[
;;knd = 0
tmpret0 nil
tmp1 nil
tmp2 nil
tmp3 nil
;;var tmplab, tmplab_clj
] ;; with-local-vars
;; __patsflab_fact
(var-set tmp1 (ats2cljpre_gt_int0_int0 arg0 0))
(if @tmp1
(do
(var-set tmp3 (ats2cljpre_sub_int0_int0 arg0 1))
(var-set tmp2 (fact @tmp3))
(ats2cljpre_mul_int0_int0 arg0 @tmp2)
) ;; if-then
(do
1
) ;; if-else
)
) ;; end-of-with-local-vars
) ;; end-of-fun

Now I need to figure out how to write apps in Clojure :slight_smile: After that, we
should be able to write apps in ATS (via Clojure).

Cheers!


You received this message because you are subscribed to the Google
Groups
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send
an
email to ats-lang-user...@googlegroups.com.
To post to this group, send email to ats-lan...@googlegroups.com.
Visit this group at https://groups.google.com/group/ats-lang-users.
To view this discussion on the web visit

https://groups.google.com/d/msgid/ats-lang-users/401b2ea7-b5af-4805-8ba8-1d5b30b7c899%40googlegroups.com.


Brandon Barker