[Laszlo-dev] compilation properties, options, and environment
Benjamin Shine
ben at laszlosystems.com
Mon Jan 15 12:44:11 PST 2007
On Jan 15, 2007, at 4:54 AM, P T Withington wrote:
> This is definitely a fragile area of the system that could be made
> better. It is in the state that it is because:
>
> a) It evolved over time to meet different needs
> b) The script and tag compiler were written as separate projects
> but need to share some info
Really? Fascinating. Can you tell me more of this history?
> c) The options are created in python and passed to java
Right, that's exactly where I'm getting confused, replacing that
python with java. It's done in a very dynamic-language way, but then
when we get into java we would like to be able to just check boolean
and (basically) enums explicitly. If we stayed in a dynamic language
the whole time, this structure would be less onerous.
It would be interesting to grep the code for "kludge" and "bleck" and
"argh" [1] and see where those emotion-words point to a coding
decision that can be improved in the light of changing requirements.
[1] See also http://osteele.com/archives/2005/12/aarg
>
> It would be great to see a proposal on how to straighten this out.
I will think about it in the background. Seems like it will need a
standalone figure-out-some-of-java-1.5's-language-features little
project first.
>
> Note that compile-time constants are extra special because they are
> used by the compiler to evaluate if statements at compile-time (its
> how our conditional compilation works) _and_ they get inserted into
> the output executable (for cases that could not be evaluated at
> compile time). Sometimes a compiler option exists solely for the
> convenience of setting several compile-time constants at once
> (e.g., --debug for LZX programs), while those constants may also be
> set individually (e.g., the debug LFC has only some of the
> constants that --debug would imply set).
Ah. What compile-time constants must be set?
>
> One of the messier aspects of the compile-time constants is the way
> we add a new runtime. There are too many places in the system that
> need to be touched to add a new runtime. Just cleaning up this
> would be a major accomplishment.
Oh good -- a business case for cleaning this up. :)
>
> On 2007-01-14, at 23:47 EST, Benjamin Shine wrote:
>
>>
>>
>>
>> The script compiler has two different collections-of-configuration-
>> data:
>> org.openlaszlo.sc.Compiler.options (compilerOptions)
>> and
>> constants (org.openlaszlo.sc.Compiler.COMPILE_TIME_CONSTANTS).
>> The map containing the constants is pushed into a single slot in
>> the options data structure, then pulled out when needed, and cast
>> to be a Map again. That is goofy.
>>
>> A same-same-but-different data structure is
>> CompilationEnvironment.properties, but that has to do with the tag
>> compiler, not the script compiler. Confusingly, these all
>> represent some of the same information and some different
>> information: whether to debug/profile and which runtime are
>> specified in all three of these data structures. This looks
>> confusing to me, and fragile.
>>
>> I can refactor this cleanly using java 1.5-dependent language
>> features -- collections, autoboxing, the for/in loop, type-safe
>> enums.
>>
>> Tucker, Jim, what do you think?
>> a) Not now
>> b) Let's see a more detailed proposal first
>> c) a & b
>>
>>
>>
>> Benjamin Shine
>> Software Engineer, Open Laszlo / Laszlo Systems
>> ben at laszlosystems.com
>>
>>
>>
>
Benjamin Shine
Software Engineer, Open Laszlo / Laszlo Systems
ben at laszlosystems.com
More information about the Laszlo-dev
mailing list