1 / 42

Smalltalk on the JVM By James Ladd object@redline.st redline.st @redline_st - ESUG 2011

Smalltalk on the JVM By James Ladd object@redline.st http://redline.st @redline_st - ESUG 2011. JVM Implementation Challenges. JVM Implementation Challenges:. JVM Unit of execution is a class. Sequence of bytes in class format Class is not an Object (more like data structure).

enan
Télécharger la présentation

Smalltalk on the JVM By James Ladd object@redline.st redline.st @redline_st - ESUG 2011

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Smalltalk on the JVMBy James Laddobject@redline.sthttp://redline.st@redline_st - ESUG 2011

  2. JVM Implementation Challenges

  3. JVM Implementation Challenges: JVM Unit of execution is a class Sequence of bytes in class formatClass is not an Object(more like data structure)

  4. JVM Implementation Challenges: JVM Unit of execution is a class Load ClassnewInstance()<init> called

  5. JVM Implementation Challenges: JVM loads classes with a Class Loader loadClass("java.lang.String")

  6. JVM Implementation Challenges: JVM loads classes with a Class Loader SmalltalkClassLoaderloadClass('Object') = Object.st

  7. JVM Implementation Challenges: JVM classes are namespaced java.lang, st.redlinePackage Must specify fully qualified name

  8. JVM Implementation Challenges: Calling methods is cumbersome Very static Must specify exact type

  9. JVM Implementation Challenges: Calling methods is cumbersome St/redline/ProtoObject(Ljava/lang/Object;)Ljava/lang/StringBuilder;

  10. JVM Implementation Challenges: Calling methods is cumbersome Luckily everything in Smalltalk is an Object (ProtoObject)

  11. JVM Implementation Challenges: Methods are part of a class Change class to change method

  12. Redline Smalltalk Internals

  13. Redline Smalltalk Internals Uses ANTLR Smalltalk.gPreProc.g

  14. Redline Smalltalk Internals Users ANTLR Jim Idle wrote pre-processorWill eventually make grammar skinnable

  15. Redline Smalltalk Internals Uses ObjectWeb ASM Bytecode class writing library

  16. Redline Smalltalk Internals Base of hierarchy is ProtoObject Java object that implements primitives Each primitive is a static Java method

  17. Redline Smalltalk Internals Base of hierarchy is ProtoObject Smalltalk Objects built using message sends to ProtoObject Compiler's job is to generate message sends

  18. Redline Smalltalk Internals Two other Java Objects ProtoMethod ProtoBlock

  19. Redline Smalltalk Internals Redline Java Class Loader SmalltalkClassLoaderSearches for source (.st file)

  20. Redline Smalltalk Internals Redline Java Class Loader Can use Smalltalk classes from Java

  21. Redline Smalltalk Internals Namespace support Modelled on Java PackagesFile path is package

  22. Redline Smalltalk Internals Namespace support st/redline/Object = st/redline package Each class has own 'set' of imports

  23. Redline Smalltalk Internals SmalltalkClassLoader Partitions applications within single JVM

  24. Redline Execution

  25. Redline Execution What happens when st.redline.Exampleis Executed?

  26. Redline Execution: executing st.redline.Example Invoke class from command line ./stic st.redline.Example

  27. Redline Execution: executing st.redline.Example Stic Creates instance of SmalltalkClassLoaderSets as context ClassLoader

  28. Redline Execution: executing st.redline.Example Stic Asks SmalltalkClassLoader to bootstrap Asks ProtoObject to resolve 'st.redline.Example'

  29. Redline Execution: executing st.redline.Example ProtoObject loads class Class.forName(“st.redline.Example”);

  30. Redline Execution: executing st.redline.Example SmalltalkClassLoader Checks cache – returns object if presentSearches source path for 'Example.st'ie: src/main/smalltalk/st/redline/Example.st

  31. Redline Execution: executing st.redline.Example SmalltalkClassLoader Invokes compiler on source file Resulting class loaded into JVM Instance created class.newInstance()

  32. Redline Execution: executing st.redline.Example Method newInstance() Runs Class <init> method <init> method contains message sends from Source

  33. Redline Execution: executing st.redline.Example Compiler Creates Java class to contain logic Class is subclass of ProtoObjectPackage is based on file path

  34. Redline Execution: executing st.redline.Example Compiler Creates <init> method, which is executed when instance created. Logic in 'st.redline.Example' is encoded as message sends: ProtoObject.primitiveSend(...)

  35. Redline Execution: executing st.redline.Example Compiler – Smalltalk Methods Methods are encoded as a message send to compile the method source. Because class doesn't exist yet.

  36. Redline Execution: executing st.redline.Example Method Compilation Methods are 1st class objects Subclass of ProtoMethodAdded to receivers method dictionary

  37. Redline Execution: executing st.redline.Example Method Compilation All Methods Objects have only 1 methodapplyTo(...)Contains logic embodied in Smalltalk method

  38. Redline Execution: executing st.redline.Example Block Compilation Blocks are 1st class objects Subclass of ProtoBlock

  39. Redline Execution: executing st.redline.Example Block Compilation Blocks instance created when used Have a Java applyTo(...) method^ semantics handled correctly

  40. Redline Demo

  41. Questions? Please visit: http://redline.st

More Related