This stuff is amazing.

The big question for me is how this relates to macros. This sounds
like a metaprogramming ability, where instead of changing the source
code, you are changing the implementation layer.

Here is a concrete use case I'm interested in: optimizing algorithms.
I have some set of algorithms that needs such-and-such operations to
be as fast as possible. Can I create a VM that is tailored for that?
For example, tailor a VM around core.logic. Or would this be a silly
thing to do?


On Thu, Feb 9, 2012 at 7:26 AM, Timothy Baldridge <tbaldri...@gmail.com> wrote:
>> Will clojure-py allow us to write our own VM's using clojure?
>
> TL/DR: yes
>
> Long version: RPython simply is a restriction on what bytecodes can do
> in a given set of branches in a python program. So the cool thing
> about RPython is, you define a main(argv[]) function, and then point
> the PyPy translator at that function. Any code touched by that
> function must conform to the RPython restrictions. But any code used
> to generate that function can use standard Python.
>
> So writing a RPython program is very much possible in clojure-py.
>
> However the restrictions of RPython start to manifest themselves a bit
> more in clojure-py. For instance most of clojure.core will be totally
> useless to you. RPython states that "any function can take one and
> only one type for each argument". This means that the following code
> will not compile via RPython.
>
> (defn foo [x] x)
>
> (print (foo 1))
> (print (foo "2"))
>
> Now, the way we get around this is by wrapping everything:
>
> (defprotocol W)
>
> (deftype W_int [x]
>    W
>    (toString [self] x.__str__))
>
> (deftype W_string [x]
>    W
>    (toString [self] x.__str__))
>
> Now we can do what we want:
>
> (defn foo [x] (.toString x))
>
> (print (foo (W_int. 1)))
> (print (foo (W_string "2")))
>
> I'm hoping Macros and the like will help us get around allot of these
> issues, but still, it's going to take some knowledge of how RPython
> works to get clojure-py to work with it.
>
> Timothy
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to