Next: Contents     Up: bkuhn's Technical Writings  Previous: bkuhn's Technical Writings









CONSIDERATIONS ON PORTING PERL 
TO THE JAVA VIRTUAL MACHINE 





A thesis submitted to the 
Division of Research and Advanced Studies 
of the University of Cincinnati 


in partial fulfillment of the requirements for the degree of 


MASTER OF SCIENCE 


in the Department of Electrical and Computer Engineering and 
Computer Science 
of the College of Engineering 
2001 
by

Bradley M. Kuhn 
B.S., Loyola College In Maryland, 1995 



Committee Chair: John Franco, PhD.


Committee Approval


Unveristy of Cincinnati

I, Bradley M. Kuhn, herby submit as part of the requirements of the degree of:

MASTER OF SCIENCE 

in

The Department of Electrical and Computer Engineering and Computer Science

 It is entitled:

Considerations on Porting Perl to the Java Virtual Machine
Approved by:
Fred Annexstein
John Franco
Larry Wall
Hongwei Xi



Abstract



The Java Virtual Machine (JVM) is perhaps the most interesting aspect of the Java programming environment. Much attention has been placed on porting non-Java languages to the JVM. Such ports are useful since JVMs are now embedded in hardware devices, as well as in software applications such as web browsers. In addition, well designed JVM ports can utilize the JVM as a common object model for multiple languages, allowing larger applications to easily be written in and scripted with multiple programming languages.
This thesis presents a survey of possible approaches for porting non-Java languages to the JVM. The advantages and disadvantages of each approach are considered. Examples of JVM ports of other programming languages, such as Python, Scheme, and Tcl are presented and considered.
The focus, however, is a port of Perl to the JVM. The internals of the existing Perl implementation are discussed at length with examples. The perl front-end parser, lexer and intermediate representation (IR) are described in detail. The default Perl compiler back-end, called the Perl Virtual Machine (PVM), is considered and described.
Two approaches for porting Perl to the JVM are presented. The first approach reuses the existing perl front-end via Perl's B module to compile directly to JVM assembler (using Jasmin syntax). This approach is described and examples are given. The problems of mapping the PVM onto the JVM, the lack of generalization of the existing perl IR, and complications caused by the JVM bytecode verifier are introduced and explained.
The second approach massages the existing perl IR into the Kawa system's more generalized IR. This approach is much more successful than direct compilation, and reasons are given to make that case. Kawa's IR is presented, and an example of a Perl program compiled to Kawa's IR is given.
Finally, conclusions and lessons learned from this work are presented. A framework for the future work required to complete a Perl port to the JVM (via Kawa) is given. A brief comparison between the Kawa/JVM infrastructure and Microsoft's .NET/C# system is presented.







Dedication

I dedicate this work to my fiancée, Elizabeth A. McKeever. She indeed knows how to love a hacker--which is certainly not an easy task. Thanks, keever, for always reminding me there is a world outside of computer science.




Acknowledgements

First, I thank the USENIX Association for a student scholarship and stipend during the early research of this work. In addition, the http://www.ececs.uc.eduDepartment of Electrical and Computer Engineering and Computer Science provided me with a University Graduate Scholarship for much longer than I would have thought possible, and for that I am very grateful.
I would like to thank my committee for taking the time to read my thesis and listen to my defense. I give special thanks to Larry Wall for traveling so far to serve on my committee.
Linda Gruber, the ECECS graduate program coordinator, deserves special mention. Her relentless work to ensure that graduate students have what they need is an asset to the department.
I would also like to thank the other Canonical Hackers for their continuous support of my work and my ideas, even when I doubted them myself.
I thank also the Perl community in particular and the free software community in general. Without the plethora of free software that is available for Perl and Java, this work would not have been possible.
Finally, I am grateful for the Cosource system, and those who helped fund my software development through that system.




Contents
List of Figures
Introduction

The Java Virtual Machine

Purpose of the JVM
The JVM Class File
Code Segments in the JVM
Bytecode Verification and Security

Why Port Non-Java Languages to the JVM?

Hardware JVMs
Embedded Software JVMs
Language Integration via the JVM
The .NET Factor

Porting Challenges

General Challenges
Perl-Specific Challenges



Possible Approaches

JNI
Survey of Approaches

Implementation of a Language Interpreter in Java
Compilation from Source Language to Java
Direct Compilation to JVM Bytecode
Mapping Language Idioms onto the JVM

Which Approach for Perl?


Internals of perl

perl As a Compiler and Virtual Machine
The perl Intermediate Representation

The ``Defined'' Example
The ``Add and Print'' Example

Accessing the IR via B


First Approach--Direct Compilation

Using Jasmin Assembler
Data Type Support
Putting It Together with B
The ``Defined'' Example with B::JVM::Jasmin
Failure of this Method


Second Approach--Kawa Integration

A New Layer of Abstraction
The Kawa IR
The ``Add and Print'' Example with Kawa


Conclusions and Future Work
Bibliography

 Next: Contents     Up: bkuhn's Technical Writings  Previous: bkuhn's Technical Writings



Copyright © 2000, 2001 Bradley M. Kuhn.
Verbatim copying and distribution of this entire thesis is permitted in any medium, provided this notice is preserved.