[e-lang] Announcing development snapshot E 0.8.36i

Mark Miller erights at gmail.com
Fri Apr 28 22:10:24 EDT 2006

E 0.8.36i is available from <

This is not an official release or release candidate, but only a development
snapshot. It contains both the generalized guard pattern, which I hope to
kill, and the new experimental via pattern, which should replace it.
However, we can't kill the generalized guard pattern until we change various
expansions to use the via pattern instead. As of 0.8.36i, the only expansion
which has been converted is 'bind x'. I'll wait for feedback on this
proposal before converting the other expansions.

Once all the expansions are converted and the generalized guard pattern is
killed, then Kernel-E will correspond to the following abstract syntax.
Since Kernel-E has no angle brackets, for brevity, angle brackets are used
below for grouping and suffixed for quantification. Adapting a notation of
Dean's, "<x>**," means "zero or more x's separated by commas." "<x>++,"
means "one or more x's separated by commas." Expressions are "e", "e1",
etc.. Patterns are "p", "p1", etc.. The changes we are discussing in this
thread affect only the pattern productions.

e ::= String | Char | Integer | Float64                   # LiteralExpr
   |  e.verb(<e>**,)                                      # CallExpr
   |  e1; e2                                              # SeqExpr
   |  noun | &noun                                        #
   |  noun := e                                           # AssignExpr
   |  def p := e                                          # DefineExpr
   |  def p := (e1, e2)                                   # DefineExpr
   |  e =~ p                                              # MatchBindExpr
   |  {e}                                                 # HideExpr
   |  if (e1) {e2} else {e3}                              # IfExpr
   |  try {e1} catch p {e2}                               # CatchExpr
   |  try {e1} finally {e2}                               # FinallyExpr
   |  escape p1 {e1} <catch p2 {e2}>?                     # EscapeExpr
   |  <Comment>? def String <implements <e>++,>? script   # ObjectExpr
   |  meta.context()                                      # MetaContextExpr
   |  meta.getState()                                     # MetaStateExpr

p ::= <noun | &noun | _> <:e>?  # FinalPattern,SlotPattern,IgnorePattern
   |  [<p>**,]                  # ListPattern
   |  via (e) =~ p              # ViaPattern

script ::= matcher | {<method>* <matcher>*}
method ::= <Comment>? to verb(<p>**,) <:e1>? {e2}
matcher ::= match p {e}
verb ::= Ident | String
noun ::= Ident | ::String

The pattern productions for 0.8.35 were:

p ::= <noun | &noun | _> <:e>?  # FinalPattern,SlotPattern,IgnorePattern
   |  [<p>**,]                  # ListPattern
   |  p ? e                     # SuchThatPattern
Problem: Looses reasons for match-failure.

The pattern productions for 0.8.36h were:

p ::= <noun | &noun | _>        # FinalPattern,SlotPattern,IgnorePattern
   |  [<p>**,]                  # ListPattern
   |  p : e                     # GuardPattern
Problem: Can't require guard to be DeepFrozen.

The pattern productions of our earlier proposal which Chip reacted to were:

p ::= <noun | &noun | _>        # FinalPattern,SlotPattern,IgnorePattern
   |  [<p>**,]                  # ListPattern
   |  p : e                     # GuardPattern
   |  p via e                   # ViaPattern
Problem: GuardPattern and ViaPattern are confusingly similar.

I hope this helps to clarify the differences between the various options. If
anything here remains unclear, please ask.

Text by me above is hereby placed in the public domain

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.eros-os.org/pipermail/e-lang/attachments/20060428/fb99bd03/attachment.html 

More information about the e-lang mailing list