Jamaica looks interesting...probably a lot JVMScript could steal from 
it. Largely the reason I wrote JVMScript the way I did was to allow 
using it as an API (which I do in Duby) and because as an internal DSL 
you have all Ruby constructs to use as well. So defining a new macro is 
as simple as defining a Ruby method that calls the same opcode methods. 
Indeed, the "println" method I provide is just a sequence of calls to 
opcodes to do a println.

Looking forward to getting feedback from JVMScript users. I'm pushing 
for an initial release of both JVMScript and Duby soon.

Rastislav Kassak wrote:
> Jamaica from Judoscript is a bit similar but with more java-like
> syntax: http://www.judoscript.org/articles/jamaica.html.
> 
> It's build on top of ASM or BCEL, but I guess it's outdated as the
> last release is from 2005.
> 
> However, JVMScript looks much better. It's Ruby after all. :)
> Thanks Charlie, I'll try it.
> 
> On 10/14/08, René Jansen <[EMAIL PROTECTED]> wrote:
>> Hi Charlie,
>>
>> thanks for sharing this, it looks most useful. I downloaded and ran it; the
>> testcases run ok. I cannot figure out how to make it write MyClass.class;
>> please forgive me my Ruby-ignorance here. I removed the things I though to
>> be for the testcase only, and have it execute outside of a method. It
>> executes ok, but Erik Meijer would be very happy: there are no side-effects.
>> That I know of.
>>
>> best regards and thanks in advance.
>>
>> René.
>>
>>
>> On Fri, Oct 10, 2008 at 7:58 PM, Charles Oliver Nutter
>> <[EMAIL PROTECTED]> wrote:
>>
>>>
>>>
>>>
>>> René Jansen wrote:
>>>> Just a quick question: which assembler are you guys using for
>>>> experimentation? I find myself wanting to try out some things, but I am
>>>> in a bind between ooLong and Jasmin or maybe ASM. Is there an unofficial
>>>> official assembler, preferably something with macros (old s/370 bal
>>>> programmer that I am) and its own disassembler.
>>>>
>>>> I noticed there is a class called Assembler in the tools sources, is
>>>> this only usable from javac or is it addressable in any other way?
>>>>
>>>> If no disassembler goes with the package, I would prefer something that
>>>> is close enough to javap that I can write a small thingy to rearrange
>>>> its output into something that I can assemble - something that ASM can
>>>> but in a very verbose way.
>>>>
>>>> Please let me know what you use.
>>> I'm using ASM exclusively, but usually wrapped behind one of my own shims.
>>>
>>> Either this super-trivial shim that just exposes a method-per-opcode:
>>>
>>> http://is.gd/3RsP
>>>
>>> Or my unreleased Ruby DSL for ASM, "JVMScript":
>>>
>>> http://kenai.com/projects/jvmscript
>>>
>>> The latter is probably more interesting to you, but obviously has a
>>> dependency on JRuby. Perhaps that's not a problem for your toolchain.
>>>
>>> Here's a short sample:
>>>
>>>     builder =
>> Compiler::FileBuilder.build("somefile.source") do
>>>       package "org.awesome", "stuff" do
>>>         public_class "MyClass", object do
>>>           public_field "list", ArrayList
>>>
>>>           public_constructor string, ArrayList do
>>>             aload 0
>>>             invokespecial object, "<init>", [void]
>>>             aload 0
>>>             aload 1
>>>             aload 2
>>>             invokevirtual this, "bar", [ArrayList, string, ArrayList]
>>>             aload 0
>>>             swap
>>>             putfield this, "list", ArrayList
>>>             returnvoid
>>>           end
>>>
>>>           public_static_method "foo", this, string do
>>>             new this
>>>             dup
>>>             aload 0
>>>             new ArrayList
>>>             dup
>>>             invokespecial ArrayList, "<init>", [void]
>>>             invokespecial this, "<init>", [void, string, ArrayList]
>>>             areturn
>>>           end
>>>
>>>           public_method "bar", ArrayList, string, ArrayList do
>>>             aload 1
>>>             invokevirtual(string, "toLowerCase", string)
>>>             aload 2
>>>             swap
>>>             invokevirtual(ArrayList, "add", [boolean, object])
>>>             aload 2
>>>             areturn
>>>           end
>>>
>>>           public_method("getList", ArrayList) do
>>>             aload 0
>>>             getfield this, "list", ArrayList
>>>             areturn
>>>           end
>>>
>>>           public_static_method("main", void, string[]) do
>>>             aload 0
>>>             ldc_int 0
>>>             aaload
>>>             invokestatic this, "foo", [this, string]
>>>             invokevirtual this, "getList", ArrayList
>>>             aprintln
>>>             returnvoid
>>>           end
>>>         end
>>>       end
>>>     end
>>>
>>> - Charlie
>>>
>>>
>>>
>>>
>>
>>  >
>>
> 
> > 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "JVM 
Languages" group.
To post to this group, send email to jvm-languages@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jvm-languages?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to