On Thu, Feb 9, 2012 at 9:38 AM, Ian Price <ianpric...@googlemail.com> wrote:
> l...@gnu.org (Ludovic Courtès) writes: > > > So, here’s a suggestion: let’s write neat hacks that integrate Guile > > with some other piece of software, preferably GNU packages. Examples > > include extending GCC or GDB extension in Guile, work on Mike’s > > Zile-on-Guile, enhanced Guile support in GNU Make, and Hurd file systems > > written in Guile. > As I said on #guile, I'd like to see someone (i.e not me :) hack scheme > evaluation into bash. > > Hack scheme evaluation into bash huh? I love that idea so much! And I spend some time to read Bash code, then I think there're two ways do go: The easy way is to write a loadable builtin command for Bash which can do the simple Scheme evaluation work with Guile core. And I finished it: git:// gitorious.org/nacre/big.git PS: 'BIG' for Bash Inner Guile If you want to load it, type: # enable -f ./big big then you may use big in bash: # big "(+ 1 1)" 2 or run a REPL # big Bash inner Guile interpreter! (define func (lambda (x) (+ 1))) ==> #<unspecified> (func 1) ==> 1 type Ctrl+D to quit. It's so easy that almost useless, one may use Guile REPL rather than BIG or 'guile -c' to eval expressions. But as Ludo said "a proof of concept". ;-) All I expected is the harder way. But I'm not quite familiar with Bash architecture, so I just provide some suggestions and wishes here: We may modify "parser.y" to add S-exp parsing, and eval it with Guile core. In the original way, if subshell failed to lookup function name, it return EXECUTION_FAILURE directly. I think there's a way to pass it to Guile core and evaluate it: # (+ 1 1) --> '+' is an invalid function --> pass "(+ 1 1)" to scm_eval_string If we can use S-exp in Bash, I think these would be interesting: x=5 echo "$((+ 1 ${x}))" ==> 6 echo "$((expt 2 ${x}))" ==> 32 Moreover, maybe modify the evaluator of Bash and transform "define" to define a variable in Bash? Then the namespace is unified in Bash, when Bash code passes exp into Guile, all variables within will be evaluated to the actual value and Guile will eval the exp. But I think that would bereave lexical scope of Scheme code. Anyone comment? > If you’re up to the challenge, you’re welcome to announce your intent > > here. On Feb. 16th, we’ll collect the list of neat hacks and let the > > world know! > As I also said on #guile, I picked gdbm for the gnu package I'm going to > integrate. I've already hacked somewhat useful bindings, but still more > to do. https://github.com/ijp/guile-gdbm if anyone is interested > > > PS: I personally intend to come up with a simple GCC plug-in interface > > for Guile. Let’s see how it goes… > I look forward to that. > > Come on guilers, that's two of us stepped up to the plate so far. What > are you, chicken? ;-) > > -- > Ian Price > > "Programming is like pinball. The reward for doing it well is > the opportunity to do it again" - from "The Wizardy Compiled" > >