On 7/2/21 9:33 AM, Sean Anderson wrote:
On 7/2/21 7:03 AM, Wolfgang Denk wrote:
Dear Sean,

In message <20210701061611.957918-3-sean...@gmail.com> you wrote:
This is the LIL programming language [1] as originally written by Kostas
Michalopoulos <badsec...@runtimeterror.com>. LIL is a stripped-down TCL
variant. Many syntax features are very similar to shell:

Do you have a list of the exact differencec between LIL and a
standard shell?

For a partial list, see

[1] https://github.com/Forty-Bot/lil/commits/master

Whoops, looks like I completely misread what you were asking here. I
don't have an exhaustive list of differences, but here are some similar
things expressed in both languages:

sh                              tcl

foo=bar                         set foo bar
echo $foo                       echo $foo

if [ 1 -gt 2 ]; then            if {1 > 2} {
        echo a                          echo a
else                            } {
        echo b                          echo b
fi                              }

foo() {                         proc foo {first second} {
        echo $1 $2                      echo $first $second
}                               }

for file in $(ls *.c); do       foreach file [glob *.c] {
        echo $file                      echo $file
done                            }

fact() {
        if [ $1 -eq 0 ]; then
                echo 1
        else
                echo $(($1 * $(fact $(($1 - 1)))))
        fi
}

                                proc fact {n} {
                                        if {$n} {
                                                expr {$n * [fact [expr {$n - 
1}]]}
                                        } {
                                                return 1
                                        }
                                }

Hopefully this gives you a bit of a feel for the basic differences.

--Sean


I wonder, if we deviate from standard shell syntax anyway, we could
also have a look at lua, for example?

I also looked at lua (see the cover letter), but I rejected it based on
size constraints (eLua was around the size of U-Boot itself).

Because of how often the shell is used to debug things, I wanted the
candidate I picked to have similar syntax to the existing shell. For
example,

     load mmc ${mmcdev}:${mmcpart} $loadaddr $image

is a valid command in both Hush and LIL. Compare with lua, which might
express the above as

     load("mmc", mmcdev .. ":" .. mmcpart, loadaddr, image)

which I think is a much larger deviation from existing syntax.

--Sean

Reply via email to