How not to Design a Scripting Language
Paul Biggar
Department of Computer Science and StatisticsTrinity College Dublin
StackOverflow London, 28th October, 2009
How not to Design a Scripting Language Paul Biggar
How not to Design a Scripting Language
Paul Biggar
Department of Computer Science and StatisticsTrinity College Dublin
StackOverflow London, 28th October, 2009
About me
• PhD candidate, Trinity College Dublin• Topic: Compilers, optimizations, scripting languages.
PhD DissertationDesign and Implementation of an Ahead-of-time PHP Compiler
phc (http://phpcompiler.org)
How not to Design a Scripting Language Paul Biggar
1. means I justsubmitted
2. So that’s what thistalk is about
About me
• PhD candidate, Trinity College Dublin• Topic: Compilers, optimizations, scripting languages.
PhD DissertationDesign and Implementation of an Ahead-of-time PHP Compiler
phc (http://phpcompiler.org)
About me
• PhD candidate, Trinity College Dublin• Topic: Compilers, optimizations, scripting languages.
PhD DissertationDesign and Implementation of an Ahead-of-time PHP Compiler
phc (http://phpcompiler.org)
How not to Design a Scripting Language Paul Biggar
1. means I justsubmitted
2. So that’s what thistalk is about
3. Not much PHP
About me
• PhD candidate, Trinity College Dublin• Topic: Compilers, optimizations, scripting languages.
PhD DissertationDesign and Implementation of an Ahead-of-time PHP Compiler
phc (http://phpcompiler.org)
How not to design a scripting language
• Compilers• Scripting Languages
• Speed
How not to Design a Scripting Language Paul Biggar
1. really, this is a talkabout compilersand scriptinglanguages
How not to design a scripting language
• Compilers• Scripting Languages
• Speed
How not to design a scripting language
• Compilers• Scripting Languages
• Speed
How not to Design a Scripting Language Paul Biggar
1. Thats whats in theback of my head allthe time
How not to design a scripting language
• Compilers• Scripting Languages
• Speed
What is a scripting language?• Javascript• Lua• Perl• PHP• Python• Ruby
Common Features:• Dynamic typing• Duck typing• Interpreted by default• FFI via C API
How not to Design a Scripting Language Paul Biggar
1. well, no-oneactually has agood definition ofscripting language!
2. I’m not talkingabout Bash orPowershell or VB,or some littlelanguage youwrote last week
What is a scripting language?• Javascript• Lua• Perl• PHP• Python• Ruby
Common Features:• Dynamic typing• Duck typing• Interpreted by default• FFI via C API
What is a scripting language?• Javascript• Lua• Perl• PHP• Python• Ruby
Common Features:• Dynamic typing• Duck typing• Interpreted by default• FFI via C API
How not to Design a Scripting Language Paul Biggar
1. well, no-oneactually has agood definition ofscripting language!
2. I’m not talkingabout Bash orPowershell or VB,or some littlelanguage youwrote last week
3. exposing theirinternals
What is a scripting language?• Javascript• Lua• Perl• PHP• Python• Ruby
Common Features:• Dynamic typing• Duck typing• Interpreted by default• FFI via C API
Language implementation
• Interpreters: Easy, portable
• Compilers: Not too hard, sometimes portable,optimizations
NOT THE DRAGON BOOKEngineering a Compiler by Cooper/Torczon
Modern Compiler Implementation in X by Appel
• Just-in-time compilers: Very difficult, unportable, fastinterpreter.
How not to Design a Scripting Language Paul Biggar
1. Reads one line ata time (kinda)
2. hence used inmany scriptinglangs
Language implementation
• Interpreters: Easy, portable
• Compilers: Not too hard, sometimes portable,optimizations
NOT THE DRAGON BOOKEngineering a Compiler by Cooper/Torczon
Modern Compiler Implementation in X by Appel
• Just-in-time compilers: Very difficult, unportable, fastinterpreter.
Language implementation
• Interpreters: Easy, portable• Compilers: Not too hard, sometimes portable,
optimizations
NOT THE DRAGON BOOKEngineering a Compiler by Cooper/Torczon
Modern Compiler Implementation in X by Appel
• Just-in-time compilers: Very difficult, unportable, fastinterpreter.
How not to Design a Scripting Language Paul Biggar
1. Converts sourcecode into machinecode programs(kinda)
2. Lots of time tooptimize
Language implementation
• Interpreters: Easy, portable• Compilers: Not too hard, sometimes portable,
optimizations
NOT THE DRAGON BOOKEngineering a Compiler by Cooper/Torczon
Modern Compiler Implementation in X by Appel
• Just-in-time compilers: Very difficult, unportable, fastinterpreter.
Language implementation
• Interpreters: Easy, portable• Compilers: Not too hard, sometimes portable,
optimizations
NOT THE DRAGON BOOKEngineering a Compiler by Cooper/Torczon
Modern Compiler Implementation in X by Appel
• Just-in-time compilers: Very difficult, unportable, fastinterpreter.
How not to Design a Scripting Language Paul Biggar
1. 2 months, Joel,Dragon
2. For intermediateand advanced,there are alsomuch better books
Language implementation
• Interpreters: Easy, portable• Compilers: Not too hard, sometimes portable,
optimizations
NOT THE DRAGON BOOKEngineering a Compiler by Cooper/Torczon
Modern Compiler Implementation in X by Appel
• Just-in-time compilers: Very difficult, unportable, fastinterpreter.
Language implementation
• Interpreters: Easy, portable• Compilers: Not too hard, sometimes portable,
optimizations
NOT THE DRAGON BOOKEngineering a Compiler by Cooper/Torczon
Modern Compiler Implementation in X by Appel
• Just-in-time compilers: Very difficult, unportable, fastinterpreter.
How not to Design a Scripting Language Paul Biggar
1. Amazingoptimizations;Hotspot; dispatch,exceptions andarithmetic
2. Shockingly difficultto write
Language implementation
• Interpreters: Easy, portable• Compilers: Not too hard, sometimes portable,
optimizations
NOT THE DRAGON BOOKEngineering a Compiler by Cooper/Torczon
Modern Compiler Implementation in X by Appel
• Just-in-time compilers: Very difficult, unportable, fastinterpreter.
What’s right with scripting languages?
1 Elegant and well designed,2 High level of abstraction,3 Dynamic typing (and duck typing).
How not to Design a Scripting Language Paul Biggar
1. dont dwell here -I’m not here toconvince you
2. the bad things donttouch these
What’s right with scripting languages?
1 Elegant and well designed,2 High level of abstraction,3 Dynamic typing (and duck typing).
What’s right with scripting languages?
1 Elegant and well designed,
2 High level of abstraction,3 Dynamic typing (and duck typing).
How not to Design a Scripting Language Paul Biggar
1. dont dwell here -I’m not here toconvince you
2. the bad things donttouch these
3. Python, Ruby; JStoo in a certain way
What’s right with scripting languages?
1 Elegant and well designed,
2 High level of abstraction,3 Dynamic typing (and duck typing).
What’s right with scripting languages?
1 Elegant and well designed,2 High level of abstraction,
3 Dynamic typing (and duck typing).
How not to Design a Scripting Language Paul Biggar
1. dont dwell here -I’m not here toconvince you
2. the bad things donttouch these
3. get things done, asJoel would say
What’s right with scripting languages?
1 Elegant and well designed,2 High level of abstraction,
3 Dynamic typing (and duck typing).
What’s right with scripting languages?
1 Elegant and well designed,2 High level of abstraction,3 Dynamic typing (and duck typing).
How not to Design a Scripting Language Paul Biggar
1. dont dwell here -I’m not here toconvince you
2. the bad things donttouch these
3. avoids manyproblems inherentin Java, C# andC++: verbosity,type systems
What’s right with scripting languages?
1 Elegant and well designed,2 High level of abstraction,3 Dynamic typing (and duck typing).
What’s wrong with scripting languages?
Symptoms: Speed, Portability
Problem: Language designed for interpretersProblem: Language designed for one specific interpreter
• Run-time source code execution• Foreign Function Interface
How not to Design a Scripting Language Paul Biggar
1. portable to .Net,JVM, etc?
2. not fast means youcant use it as much
What’s wrong with scripting languages?
Symptoms: Speed, Portability
Problem: Language designed for interpretersProblem: Language designed for one specific interpreter
• Run-time source code execution• Foreign Function Interface
What’s wrong with scripting languages?
Symptoms: Speed, Portability
Problem: Language designed for interpreters
Problem: Language designed for one specific interpreter
• Run-time source code execution
• Foreign Function Interface
How not to Design a Scripting Language Paul Biggar
1. portable to .Net,JVM, etc?
2. not fast means youcant use it as much
What’s wrong with scripting languages?
Symptoms: Speed, Portability
Problem: Language designed for interpreters
Problem: Language designed for one specific interpreter
• Run-time source code execution
• Foreign Function Interface
What’s wrong with scripting languages?
Symptoms: Speed, Portability
Problem: Language designed for interpreters
Problem: Language designed for one specific interpreter
• Run-time source code execution• Foreign Function Interface
How not to Design a Scripting Language Paul Biggar
1. portable to .Net,JVM, etc?
2. not fast means youcant use it as much
What’s wrong with scripting languages?
Symptoms: Speed, Portability
Problem: Language designed for interpreters
Problem: Language designed for one specific interpreter
• Run-time source code execution• Foreign Function Interface
FFI
FFI
Foreign Function Interface based on CPython interpreter
• Access to C libraries• Script C applications using Python scripts• Rewrite hot code in C
How not to Design a Scripting Language Paul Biggar
1. define FFI2. glue code in C;
wrap things inpython datastructures; exposeinterpreterinternals
3. Works for allexcept JS - I’musing Python asexample
FFI
Foreign Function Interface based on CPython interpreter
• Access to C libraries• Script C applications using Python scripts• Rewrite hot code in C
FFI
FFI (good) implications
• Libraries not that slow• Can break out of Python for slow code.
How not to Design a Scripting Language Paul Biggar
FFI (good) implications
• Libraries not that slow• Can break out of Python for slow code.
FFI
FFI (bad) implications
• Language is allowed to be slow• Must break out of Python for speed.
How not to Design a Scripting Language Paul Biggar
1. nice things aboutpython are lost(high level, elegant
FFI (bad) implications
• Language is allowed to be slow• Must break out of Python for speed.
FFI
FFI (worse) implications
• Legacy issues
• Reimplementations
How not to Design a Scripting Language Paul Biggar
1. you cant changethe interpretermuch - it cant getfaster
FFI (worse) implications
• Legacy issues
• Reimplementations
FFI
FFI (worse) implications
• Legacy issues• Reimplementations
How not to Design a Scripting Language Paul Biggar
1. Jython,IronPython, PyPy,cant use the samecode
2. cant evenreimplement ownlanguage
3. by constrast, lookat JS
FFI (worse) implications
• Legacy issues• Reimplementations
FFI
FFI solution
Don’t expose yourself!
• Importing functions into Python with a Domain SpecificLanguage is good
• Only one way of FFI is better• Declarative is best
• Any reimplementation can reuse the same libraries withoutany modifications
• CPython itself can change without hassle
How not to Design a Scripting Language Paul Biggar
1. rule for life, really2. like pyrex, ctypes,
etc3. no implementation
specific code at all4. import functions
directly, andaccess them fromwithin Pythonwithout a line of C
5. Ruby libFFI
FFI solution
Don’t expose yourself!
• Importing functions into Python with a Domain SpecificLanguage is good
• Only one way of FFI is better• Declarative is best
• Any reimplementation can reuse the same libraries withoutany modifications
• CPython itself can change without hassle
FFI
FFI solution
Don’t expose yourself!
• Importing functions into Python with a Domain SpecificLanguage is good
• Only one way of FFI is better
• Declarative is best
• Any reimplementation can reuse the same libraries withoutany modifications
• CPython itself can change without hassle
How not to Design a Scripting Language Paul Biggar
1. rule for life, really2. like pyrex, ctypes,
etc3. for
reimplementation4. no implementation
specific code at all5. import functions
directly, andaccess them fromwithin Pythonwithout a line of C
6. Ruby libFFI
FFI solution
Don’t expose yourself!
• Importing functions into Python with a Domain SpecificLanguage is good
• Only one way of FFI is better
• Declarative is best
• Any reimplementation can reuse the same libraries withoutany modifications
• CPython itself can change without hassle
FFI
FFI solution
Don’t expose yourself!
• Importing functions into Python with a Domain SpecificLanguage is good
• Only one way of FFI is better• Declarative is best
• Any reimplementation can reuse the same libraries withoutany modifications
• CPython itself can change without hassle
How not to Design a Scripting Language Paul Biggar
1. rule for life, really2. like pyrex, ctypes,
etc3. no implementation
specific code at all4. import functions
directly, andaccess them fromwithin Pythonwithout a line of C
5. Ruby libFFI
FFI solution
Don’t expose yourself!
• Importing functions into Python with a Domain SpecificLanguage is good
• Only one way of FFI is better• Declarative is best
• Any reimplementation can reuse the same libraries withoutany modifications
• CPython itself can change without hassle
FFI
FFI solution
Don’t expose yourself!
• Importing functions into Python with a Domain SpecificLanguage is good
• Only one way of FFI is better• Declarative is best
• Any reimplementation can reuse the same libraries withoutany modifications
• CPython itself can change without hassle
How not to Design a Scripting Language Paul Biggar
1. rule for life, really2. like pyrex, ctypes,
etc3. no implementation
specific code at all4. import functions
directly, andaccess them fromwithin Pythonwithout a line of C
5. Ruby libFFI
FFI solution
Don’t expose yourself!
• Importing functions into Python with a Domain SpecificLanguage is good
• Only one way of FFI is better• Declarative is best
• Any reimplementation can reuse the same libraries withoutany modifications
• CPython itself can change without hassle
Compiled and interpreted models
Dynamic source code generation
• eval and dynamic include/import
• meta-programming
eval (mysql_read (...)[0]);
• .rc files
username = "myname"password = "mypass"server = "srv.domain.com"
• localization
$lang = ....;include ("localisation/locale.$lang.php");
How not to Design a Scripting Language Paul Biggar
1. Should be used forsource inclusion.But becausethey’re interpreted,they can be usedfor:
Dynamic source code generation
• eval and dynamic include/import
• meta-programming
eval (mysql_read (...)[0]);
• .rc files
username = "myname"password = "mypass"server = "srv.domain.com"
• localization
$lang = ....;include ("localisation/locale.$lang.php");
Compiled and interpreted models
Dynamic source code generation
• eval and dynamic include/import• meta-programming
eval (mysql_read (...)[0]);
• .rc files
username = "myname"password = "mypass"server = "srv.domain.com"
• localization
$lang = ....;include ("localisation/locale.$lang.php");
How not to Design a Scripting Language Paul Biggar
1. Should be used forsource inclusion.But becausethey’re interpreted,they can be usedfor:
Dynamic source code generation
• eval and dynamic include/import• meta-programming
eval (mysql_read (...)[0]);
• .rc files
username = "myname"password = "mypass"server = "srv.domain.com"
• localization
$lang = ....;include ("localisation/locale.$lang.php");
Compiled and interpreted models
Dynamic source code generation
• eval and dynamic include/import• meta-programming
eval (mysql_read (...)[0]);
• .rc files
username = "myname"password = "mypass"server = "srv.domain.com"
• localization
$lang = ....;include ("localisation/locale.$lang.php");
How not to Design a Scripting Language Paul Biggar
1. Should be used forsource inclusion.But becausethey’re interpreted,they can be usedfor:
Dynamic source code generation
• eval and dynamic include/import• meta-programming
eval (mysql_read (...)[0]);
• .rc files
username = "myname"password = "mypass"server = "srv.domain.com"
• localization
$lang = ....;include ("localisation/locale.$lang.php");
Compiled and interpreted models
Dynamic source code generation
• eval and dynamic include/import• meta-programming
eval (mysql_read (...)[0]);
• .rc files
username = "myname"password = "mypass"server = "srv.domain.com"
• localization
$lang = ....;include ("localisation/locale.$lang.php");
How not to Design a Scripting Language Paul Biggar
1. Should be used forsource inclusion.But becausethey’re interpreted,they can be usedfor:
Dynamic source code generation
• eval and dynamic include/import• meta-programming
eval (mysql_read (...)[0]);
• .rc files
username = "myname"password = "mypass"server = "srv.domain.com"
• localization
$lang = ....;include ("localisation/locale.$lang.php");
Compiled and interpreted models
Dynamic source code generation
We don’t even know the fullprogram source!!
How not to Design a Scripting Language Paul Biggar
1. go to next slidestraight away
Dynamic source code generation
We don’t even know the fullprogram source!!
Compiled and interpreted models
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){
s[i] = t[i];}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){
s[i] = t[i];}
alert ($(’li’).get(0).nodeName);alert ($(’li’)[0].nodeName);
How not to Design a Scripting Language Paul Biggar
1. self-perpetuatingcycle
2. shame, scriptinglanguages couldreally use staticanalysis
3. high-level meanshigh leveloptimizations? no
4. redundencyelimination - somecant be done byhand
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){s[i] = t[i];
}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){s[i] = t[i];
}
alert ($(’li’).get(0).nodeName);alert ($(’li’)[0].nodeName);
Compiled and interpreted models
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){
s[i] = t[i];}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){
s[i] = t[i];}
alert ($(’li’).get(0).nodeName);alert ($(’li’)[0].nodeName);
How not to Design a Scripting Language Paul Biggar
1. self-perpetuatingcycle
2. shame, scriptinglanguages couldreally use staticanalysis
3. high-level meanshigh leveloptimizations? no
4. redundencyelimination - somecant be done byhand
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){s[i] = t[i];
}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){s[i] = t[i];
}
alert ($(’li’).get(0).nodeName);alert ($(’li’)[0].nodeName);
Compiled and interpreted models
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){
s[i] = t[i];}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){
s[i] = t[i];}
alert ($(’li’).get(0).nodeName);alert ($(’li’)[0].nodeName);
How not to Design a Scripting Language Paul Biggar
1. self-perpetuatingcycle
2. shame, scriptinglanguages couldreally use staticanalysis
3. high-level meanshigh leveloptimizations? no
4. redundencyelimination - somecant be done byhand
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){s[i] = t[i];
}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){s[i] = t[i];
}
alert ($(’li’).get(0).nodeName);alert ($(’li’)[0].nodeName);
Compiled and interpreted models
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){
s[i] = t[i];}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){
s[i] = t[i];}
alert ($(’li’).get(0).nodeName);
alert ($(’li’)[0].nodeName);
How not to Design a Scripting Language Paul Biggar
1. self-perpetuatingcycle
2. shame, scriptinglanguages couldreally use staticanalysis
3. high-level meanshigh leveloptimizations? no
4. redundencyelimination - somecant be done byhand
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){s[i] = t[i];
}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){s[i] = t[i];
}
alert ($(’li’).get(0).nodeName);
alert ($(’li’)[0].nodeName);
Compiled and interpreted models
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){
s[i] = t[i];}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){
s[i] = t[i];}
alert ($(’li’).get(0).nodeName);
alert ($(’li’)[0].nodeName);
How not to Design a Scripting Language Paul Biggar
1. self-perpetuatingcycle
2. shame, scriptinglanguages couldreally use staticanalysis
3. high-level meanshigh leveloptimizations? no
4. redundencyelimination - somecant be done byhand
So they can’t be compiled (ahead-of-time)Downsides:
• Must use FFI for speed• Static analysis• Cool optimizations can’t happen
t = ...;for (i = 0; i < strlen(t); i++){s[i] = t[i];
}
t = ...;_temp = strlen(t);for (i = 0; i < _temp; i++){s[i] = t[i];
}
alert ($(’li’).get(0).nodeName);
alert ($(’li’)[0].nodeName);
Compiled and interpreted models
JIT compiled
Tracemonkey
http://hacks.mozilla.org/2009/07/tracemonkey-overview/
Type Analysis for Javascript
Simon Holm Jensen, Anders Møller and Peter ThiemannSAS ’09http://www.brics.dk/TAJS/
How not to Design a Scripting Language Paul Biggar
1. instead, they mustbe JIT compiled.We’ll still never getcool optimizations
2. worse, theresearch just getsus, at run-time,expensively,information wecould get atcompile-time.
JIT compiled
Tracemonkey
http://hacks.mozilla.org/2009/07/tracemonkey-overview/
Type Analysis for Javascript
Simon Holm Jensen, Anders Møller and Peter ThiemannSAS ’09http://www.brics.dk/TAJS/
Compiled and interpreted models
JIT compiled
Tracemonkey
http://hacks.mozilla.org/2009/07/tracemonkey-overview/
Type Analysis for Javascript
Simon Holm Jensen, Anders Møller and Peter ThiemannSAS ’09http://www.brics.dk/TAJS/
How not to Design a Scripting Language Paul Biggar
1. instead, they mustbe JIT compiled.We’ll still never getcool optimizations
2. worse, theresearch just getsus, at run-time,expensively,information wecould get atcompile-time.
JIT compiled
Tracemonkey
http://hacks.mozilla.org/2009/07/tracemonkey-overview/
Type Analysis for Javascript
Simon Holm Jensen, Anders Møller and Peter ThiemannSAS ’09http://www.brics.dk/TAJS/
Compiled and interpreted models
Fix at language design time
• No dynamic include; no eval.• Compile-time meta-programming
• .rc files• localization
How not to Design a Scripting Language Paul Biggar
1. do it like Perl, orC++
Fix at language design time
• No dynamic include; no eval.• Compile-time meta-programming
• .rc files• localization
Compiled and interpreted models
Fix at language design time
• No dynamic include; no eval.• Compile-time meta-programming• .rc files
• localization
How not to Design a Scripting Language Paul Biggar
1. sandbox them
Fix at language design time
• No dynamic include; no eval.• Compile-time meta-programming• .rc files
• localization
Compiled and interpreted models
Fix at language design time
• No dynamic include; no eval.• Compile-time meta-programming• .rc files• localization
How not to Design a Scripting Language Paul Biggar
1. With a compiledmodel, we know allthe files
Fix at language design time
• No dynamic include; no eval.• Compile-time meta-programming• .rc files• localization
Compiled and interpreted models
Doing it right
• Factor• compiled model• compile-time meta-programming• declarative FFI
How not to Design a Scripting Language Paul Biggar
1. unfortunatelychose a paradigmthat nobody knows:stack-based;whoops!
Doing it right
• Factor• compiled model• compile-time meta-programming• declarative FFI
Compiled and interpreted models
Open research problems
• Optimizing boxing• High-level optimizations• Combining ahead-of-time and JIT compilation
How not to Design a Scripting Language Paul Biggar
1. this is the shit weshould beresearching,instead of findingways aroundintracaibleproblems
2. javascript 10px3. table based4. should be trivial
Open research problems
• Optimizing boxing• High-level optimizations• Combining ahead-of-time and JIT compilation
Compiled and interpreted models
Conclusion
Design the next scriptinglanguage right
How not to Design a Scripting Language Paul Biggar
Conclusion
Design the next scriptinglanguage right