[gPXE-devel] Control Flow (Flow of Control)
Shao Miller
Shao.Miller at yrdsb.edu.on.ca
Fri Mar 19 17:16:10 EDT 2010
I should have changed the subject title. Sorry!
Shao Miller wrote:
> Stefan Hajnoczi wrote:
>>
>> =Control Flow=
>>
>> ...Although the structured approach is more user-friendly, the low-level
>> approach is reasonably usable and meets our code size requirements to
>> fit into a 64 KB ROM more readily...
>>
>
> Personally, I'd like to see gPXE scripting Turing-complete. Then the
> user can implement their favourite video game, even if they can't use
> it as a video game. :) For the two constraints above:
> - User-friendly
> - Low cost-size cost
>
> We could potentially benefit by putting the code-size cost onus on the
> script. A "standard library" could be developed, which users
> _who_want_it_ can include it in their script or call it or whatever.
> Minimally, gPXE would then need just enough additions to allow for the
> scripting language itself to be usefully extended into a complete and
> user-friendly system.
>
> Something that might come in handy might be "aliases," where something
> can appear to be a command, but is really a substitution for something
> else. Here's a patch which provides such[1]. For example, you can do:
>
> gPXE> set echo echo
> gPXE> set hello hello
> gPXE> set __foo:hex ${echo:hex}:20:${hello:hex}
> gPXE> foo
> hello
>
> Then we might get into things like wanting to call/return and passing
> arguments. The point is that if you can extend the language from
> within the language, you can push the code size burden onto the script
> and not gPXE, but also provide a user-friendly interface (even
> different flavours!).
>
> A possible way to extend the language is by having a minimal
> "dot-language":
>
> gPXE> . +
> gPXE> . -
> gPXE> # Choose your stack
> gPXE> . working_setting
> gPXE> # Copy a setting (stack)
> gPXE> . from_setting to_setting
> gPXE> . command_to_define : expansion
> gPXE> . condition_setting ? true_command
> gPXE> . condition_setting ! else_command
>
> etc. My hope would be that parsing code cost could be minimized with
> something like, though extending the language from within the language
> is just an idea to share, not a recommendation.
>
>> ...I therefore support getting
>> if/goto into gPXE - it will allow a wider audience to do
>> boot.kernel.org-style magic.
>>
>
> Agreed. 'if' functionality can be roughly matched without being
> implemented in gPXE code, but is ugly and quirky, so an in-code
> implementation would be nice. I like yours, Stefan. :)
>
> - Shao Miller
>
> [1]
> http://git.etherboot.org/?p=people/sha0/gpxe.git;a=commitdiff;h=582e0eb41454b5ce15367fa39964369d9aa0aee9
>
>
More information about the gPXE-devel
mailing list