[mailto:firstname.lastname@example.org] On Behalf Of
Sent: 30 June 2009 17:17
To: Wikimedia developers
Subject: [Wikitech-l] On templates and programming languages
As many folks have noted, our current templating system works
ok for simple things, but doesn't scale well -- even
moderately complex conditionals or text-munging will quickly
turn your template source into what appears to be line noise.
And we all thought Perl was bad! ;)
There's been talk of Lua as an embedded templating language
for a while, and there's even an extension implementation.
One advantage of Lua over other languages is that its
implementation is optimized for use as an embedded language,
and it looks kind of pretty.
An _inherent_ disadvantage is that it's a fairly rarely-used
language, so still requires special learning on potential
template programmers' part.
An _implementation_ disadvantage is that it currently is
dependent on an external Lua binary installation -- something
that probably won't be present on third-party installs,
meaning Lua templates couldn't be easily copied to
There are perhaps three primary alternative contenders that
don't involve making up our own scripting language (something
I'd dearly like to avoid):
Advantage: Lots of webbish people have some experience with
PHP or can easily find references.
Advantage: we're pretty much guaranteed to have a PHP
interpreter available. :)
Disadvantage: PHP is difficult to lock down for secure execution.
programming, including Wikipedia power-users.
Disadvantage: Server-side interpreter not guaranteed to be
present. Like Lua, would either restrict our portability or
would require an interpreter reimplementation. :P
Advantage: A Python interpreter will be present on most web
servers, though not necessarily all. (Windows-based servers
Wash: Python is probably better known than Lua, but not as
well as PHP or JS.
Disadvantage: Like PHP, Python is difficult to lock down securely.
Any thoughts? Does anybody happen to have a PHP
Would you want the interpreter to translate the template into PHP
array of opcodes first, so could dump that into APC/MemCache?