David Kastrup <d...@gnu.org> writes:

> So I don't think that throwing out _distinguishing_ selling points of
> Guile is necessarily doing you a favor.  And the transparency with
> which it integrates with its language environment and the fact that
> one can continue to use its evaluator and debugger even for the
> application for which it serves as an extension language, certainly is
> a selling point.

To illustrate, take a look at
<URL:http://nicolas.sceaux.free.fr/prelude/prelude.html>.  How likely do
you consider an average user to write and master such code?

I am currently writing on a report about recent changes in Lilypond, and
the code looks like the following (it does not work yet because
\parallelMusic is not implemented well enough):

ph = #(define-music-function (parser location p1 p2 p3 p4 p5)
       (ly:pitch? ly:pitch? ly:pitch? ly:pitch? ly:pitch?)
       #{ r8 $p3 16 $p4 $p5 $p3 $p4 $p5 |
          r16 $p2 8. ~ $p2 4 |
          $p1 2 |
       #})

\parallelMusic #'(high middle low)
{
        \oneVoice | \voiceOne | \voiceTwo |
        \ph c'   e'  g' c'' e''
        \ph c'   d'  a' d'' f''
        \ph b    d'  g' d'' f''
        \ph c'   e'  g' c'' e''
        \ph c'   e'  a' e'' a''
        \ph c'   d'  fis' a' d''
[...]
        \ph d    f   a c' f'  
        \ph g,   d   g b f' 
        \oneVoice | \change Staff = "down" \voiceOne | \voiceTwo |
        \ph c    e   g c' e'  
[...]

\score {
  \new PianoStaff
      <<
        \context Staff = "up" {
          << \high \\ \middle >>
          r8 f16 a c' f' c' a c' a f a f d f d
          r8 g'16 b' d'' f'' d'' b' d'' b' g' b' d' f' e' d'
          <e' g' c''>1 \bar "|."
        }
        \context Staff = "down" {
          \low
          << { r16 c8. ~ c4 ~ c2 r16 b,8. ~ b,4 ~ b,2 c1 }
             \\ { c,2 c, c, c, c,1 } >>
        }
      >>
  \midi { \tempo 4 = 80 }
  \layout { }
}


So what do you see: minimal Schemeishness, minimal complexity.  That's
something a user could actually hope to be writing and understanding.
And this "minimal Schemeishness" in spite of the music function \ph
being actually written in Scheme is exactly the result of making it
seamless and natural to pass in and out of Guile (including taking the
lexical environment or a simulation of it along) to the user.

If the user wanted to primordinarily deal with cryptic languages and
their own data structures and control mechanisms instead of something
approximating music notation, she would be using MusiXTeX.

You may consider this sort of seamless language integration unimportant
because apparently no project but Lilypond has managed approximating it
given the documentation of local-eval (and now substituting an emulation
of it), but at least Lilypond is not yet in the list of applications
trying to get away from Guile for the sake of its users.

-- 
David Kastrup


Reply via email to