shithub: mc

Download patch

ref: dc0295e0515bba0b24ff79266361c8cc93ea2a76
parent: 2212714411ce559905b48a82f81770995bd656a7
author: Ori Bernstein <ori@eigenstate.org>
date: Tue Dec 15 07:46:44 EST 2015

Update lang.txt a little bit.

--- a/doc/lang.txt
+++ b/doc/lang.txt
@@ -1,5 +1,6 @@
                     The Myrddin Programming Language
                               Jul 2012
+                          Updated Dec 2015
                             Ori Bernstein
 
 TABLE OF CONTENTS:
@@ -12,7 +13,10 @@
         3.3. Control Constructs and Blocks
         3.4. Expressions
         3.5. Data Types
-        3.6. Packages and Uses
+        3.6. Type Inference
+        3.7. Generics
+        3.8. Traits
+        3.9. Packages and Uses
     4. TOOLCHAIN
     5. EXAMPLES
     6. STYLE GUIDE
@@ -73,9 +77,6 @@
         if              while
 
 
-    At the current stage of development, not all of these keywords are
-    implemented within the language.[1]
-
     Literals are a direct representation of a data object within the source of
     the program. There are several literals implemented within the language.
     These are fully described in section 3.2 of this manual.
@@ -197,7 +198,7 @@
         or in the input character set for the compiler (generally UTF8).
         They share the same set of escape sequences as string literals.
 
-            eg: 'א', '\n', '\u1234'[3]
+            eg: 'א', '\n', '\u{1234}'
 
         Boolean literals are either the keyword "true" or the keyword
         "false".
@@ -255,8 +256,6 @@
         The control statements in Myrddin are similar to those in many other
         popular languages, and with the exception of 'match', there should
         be no surprises to a user of any of the Algol derived languages.
-        Where a truth value is required, any type with the builtin trait
-        'tctest' can be used in all of these.
 
         Blocks are the "carriers of code" in Myrddin programs. They consist
         of series of expressions, typically ending with a ';;', although the
@@ -278,18 +277,32 @@
                 std.put("The program never gets here")
             ;;
 
-        For statements begin with an initializer, followed by a test
-        condition, followed by an increment action. For statements run the
-        initializer once before the loop is run, the test each on each
-        iteration through the loop before the body, and the increment on
-        each iteration after the body. If the loop is broken out of early
-        (for example, by a goto), the final increment will not be run. The
-        syntax is as follows:
+        For statements come in two forms. There are the C style for loops
+        which begin with an initializer, followed by a test condition,
+        followed by an increment action. For statements run the initializer
+        once before the loop is run, the test each on each iteration through
+        the loop before the body, and the increment on each iteration after
+        the body. If the loop is broken out of early (for example, by a goto),
+        the final increment will not be run. The syntax is as follows:
 
             for init; test; increment
                 blockbody()
             ;;
 
+        The second form is the collection iteration form. This form allows
+        for iterating over a collection of values contained within something
+        which is iterable. Currently, only the built in sequences -- arrays
+        and slices -- can be iterated, however, there is work going towards
+        allowing user defined iterables.
+
+            for pat in expr
+                blockbody()
+            ;;
+
+        The pattern applied in the for loop is a full match statement style
+        pattern match, and will filter any elements in the iteration
+        expression which do not match the value.
+
         While loops are equivalent to for loops with empty initializers
         and increments. They run the test on every iteration of the loop,
         and exit only if it returns false.
@@ -469,7 +482,7 @@
                 lack of type, although for the sake of genericity, you can
                 assign between void types, return values of void, and so on.
                 This allows generics to not have to somehow work around void
-                being a toxic type.
+                being a toxic type. The void value is named `void`.
 
                 bool is a type that can only hold true and false. It can be
                 assigned, tested for equality, and used in the various boolean
@@ -577,7 +590,7 @@
                                                 named '@foo'.
 
 
-    3.6.
+    3.6. Type Inference:
 
         The myrddin type system is a system similar to the Hindley Milner
         system, however, types are not implicitly generalized. Instead, type
@@ -615,17 +628,21 @@
 
                 Char literals are of type 'char'
 
+            void            void
+
+                void is a literal value of type void.
+
             true            bool
             false           bool
 
                 true/false are boolean literals
 
-            123             $t::(tcint,tcnum,tctest)
+            123             $t::(integral,numeric)
 
                 Integer literals get a fresh type variable of type with
                 the constraints for int-like types.
 
-            123.1           $t::(tcfloat,tcnum,tctest)
+            123.1           $t::(floating,numeric)
 
                 Float literals get a fresh type variable of type with
                 the constraints for float-like types.
@@ -641,11 +658,11 @@
                 +           -               *               /               %
                 +=          -=              *=              /=              %
 
-            Number binops require the constraint 'tcnum' for both the
+            Number binops require the constraint 'numeric' for both the
 
         num-unary:
             -           +
-            Number binops require the constraint 'tcnum'.
+            Number binops require the constraint 'numeric'.
 
         int-binop:
             |           &               ^               <<              >>
@@ -823,9 +840,7 @@
 
 BUGS:
 
-[1] TODO: trait, default, protect,
 [2] TODO: exponential notation.
-[3] TODO: \uDDDD escape sequences not yet recognized
 [4] TODO: currently the only sequence literal implemented is the
           unindexed one