Top / Alan蚀語仕様

Alan v0.31
Reference

Last updated: 2007-08-08
Created: 2004-12-11


by Fumisky Wells

はじめに

この曞は Alan の蚀語仕様を網矅したものです。 そのため、初心者にずっおは難しい個所があるかもしれたせんが、 気にしないでください。難しい郚分は埌から必芁に応じお参照すれば良く、 それで十分です。

逆に、茶垯以䞊の方(意味䞍明)は、蚀語仕様に関しおはある皋床把握しおいる 必芁はありたす。君は黒垯を目指せるか、なんおね。

CONTENTS

  1. 文法
    1. 倉数定矩文
    2. 挔算子匏
    3. 代入
    4. 代入(2)
    5. 単䜍数の増枛
    6. if
    7. for
    8. loop
    9. break
    10. 関数定矩
    11. enum定矩
    12. return
    13. 䟋倖凊理
    14. import文
    15. クラス定矩
  2. デヌタ型
    1. 基本型
      1. æ•Žæ•°åž‹
      2. 文字列型
      3. byte型
      4. 論理倀型
      5. 正芏衚珟型
      6. ファむル型
      7. 実数型
      8. void型
      9. 郚分文字列型
      10. files型
      11. type型
      12. err型
    2. コンテナ型
      1. 配列型
      2. リスト型
      3. map(連想配列)型
    3. クラス定矩
  3. 組蟌み関数
  4. 組蟌み倉数
  5. パッケヌゞ
    1. Math --数孊関係
    2. Net --ネットワヌク関係
    3. Time --時間・日付関係
    4. Filesys--ファむルシステム関係
  6. 制玄事項

文法

簡単なものから難しい(ず思われる)ものぞ、ずいう順番で Alan の 文法を説明したす。
  1. Alan のプログラムずは、匏の集たりです。
  2. 匏ずは䞋蚘を指したす
    1. 倉数定矩
    2. 挔算子匏
    3. 代入
    4. 代入(2)
    5. 単䜍数の増枛
    6. if
    7. for
    8. loop
    9. break
    10. 関数定矩
    11. enum定矩
    12. return
    13. import
    14. クラス定矩
    これが瀺すように、
    1. 定矩匏ず実行匏の順は任意です。 Perl ず同様、いきなりメむンプログラムを曞いたりできたす。 C/C++ のように必ず関数で囲う必芁はありたせん。 Java や Eiffel のように必ず Class で囲う必芁もありたせん。

      これは、孊習の容易さを目指したためです。小芏暡プログラム 数10行皋床 には、メむン関数定矩や トップクラス定矩はあたり重芁ではありたせん。 小芏暡プログラムにはそれなりの蚘述で枈たせる手軜さがあっおよい ず思いたす。

    2. たた、文ず匏の区別は無く、党お「匏」です。぀たり、 ifも loop も党お匏です。぀たり、倀を結果倀を持ちたす。 Ruby ず同様です。

  3. 倉数定矩は䞋蚘ずなりたす
    文法 型:倉数名 [=初期倀 ] {, 倉数名 [=初期倀 ]}
    䟋 int:x=3, y=10

    (NOTE: 䞊の文法の この色の郚分は、
    [... ] -- 省略可胜。
    {... } -- 回以䞊の繰り返し
    を衚すメタ文字です。そのほか、
    {...}+ -- 1回以䞊の繰り返し
    [0-9] -- 数倀(0..9)䞀文字
    [a-z] -- 小文字アルファベット(a..z)䞀文字
    ずいう衚珟もありたす。以䞋、同様です。)

    Fortran/Algol68/C/C++ ず同じ䌌た構文を採甚したした。ずいうのは、 英語、日本語で読んでも 巊から右に意味が通りやすいず思ったからです。 䟋えば、䞊の int:x = 3 は䞋蚘のように巊から右に読めたす。

    "Integer x is 3."
    「敎数 x は 3」

    コロンは、構文解析を簡単にするために぀けたした。

    これに察し Pascal 系の倉数宣蚀文は䞋蚘のようになりたす:

    x : integer
    これは数孊の
    x ∈ integer
    に䌌おいるのでこれだけを芋るず奜たれるかも知れないのですが、 初期倀をセットするずころで
    x : integer = 3;
    などずなっお 個人的には違和感を感じおたす(たあ慣れの問題かもしれたせんが)。

    Alan ずちょうど逆です。Pascal系蚀語を䜿甚されおいるず混乱する かもしれたせんが、Alanは俺蚀語なので他蚀語ずの䞀貫性は あたり考慮したせん。

    なお、C を蚭蚈した Denis Ritchie はその埌 Inferno ずいう分散 OS の蚘述蚀語 Limbo で、倉数宣蚀を Pascal 匏にしたそうです(!)。

    NOTE: 定矩ず宣蚀
    Alan では、倉数宣蚀ではなく倉数定矩ず呌ぶこずにしたす。 定矩ずは、ある文字 x が出おきた堎合、それが䜕かを定矩するもの。 宣蚀ずは、ある文字 x をここで䜿甚するず宣蚀するもの、ずいう違いがありたす。 関数の堎合は違いがはっきりしおいたす。 関数の定矩は C では int f(){...} で、関数の宣蚀は int f(); です。 埌者は、f を䜿甚する堎所で、「文字 f をこういう圢で䜿甚するよ」 ず宣蚀しおいるわけです。倉数の堎合、定矩ずも宣蚀ずもずれる わけなので、話を簡単にするために定矩ずいう衚珟に統䞀したした。

  4. 挔算子匏は䞋蚘ずなりたす優先順䜍順。䜎->高
    匏の皮類 説明
    A or B 論理和
    A and B 論理積
    not A 論理吊定
    A == B,
    (以䞋同様に)
    <>, <, <=, >, >=, in
    比范挔算子。順に、等しい、等しくない、小さい、 小さいか等しい、倧きい、倧きいか等しい、 集合に含たれる文字列がパタヌンにマッチする
    A | B パむプ
    A + B, A - B 和、差。+ は文字列の結合にも䜿甚。
    A * B, A / B, A mod B 積、商、剰䜙
    -A 単項マむナス
    A(匕数)
    A.メンバ
    関数呌び出し
    メンバ遞択
    1234 敎数リテラル
    "..." 文字列リテラル
    /regular expression/ 正芏衚珟リテラル
    倉数名, 関数名 倉数名, 匕数をずらない関数の呌出
    (匏) 括匧で囲った匏

    C の挔算子を基本ずしおいたすが、䞋蚘の点が異なっおいたす:

    メンバ遞択挔算子 '.' の巊蟺に、任意の匏が䜿甚できるようになりたした。

  5. 代入:
    文法 倉数 = 匏
    䟋
    a = a + 10
    s = s +  " (^_^)/"
    

    頻床の倚い代入文は、やはり Pascal系の := よりは C系の = が読みやすいず思い、こちらを採甚したした。 なお、C ずは異なり、代入は匏ではなく文です。 これにより、if 文などの条件匏に比范匏 a == b の぀もりで a = b ず曞いおしたう萜ずし穎はコンパむル時にチェックされたす。 (もっずも、bool型を導入したので、bool型以倖のデヌタ型であれば a = b を代入匏ずしおも if 文でチェックできるようにはなるのですが、 そこたではしおいたせん)。

  6. 代入(2):
    文法 倉数 += 匏;
    倉数 -= 匏;
    倉数 *= 匏;
    倉数 /= 匏;
    䟋
    a += 10
    s +=  " (^_^)/"
    

    C ず同様に、a = a + b の省略圢ずしお a += b ず 蚘述するこずができたす。

    加算ず同様、a -= b (a から b を匕く), a *= b (a に b を掛けた 結果を a に代入), a /= b (a/b の結果を a に代入) も 蚘述できたす。

  7. 単䜍数の増枛:
    文法 倉数++;
    倉数--;
    䟋 a++;
    a--;

    倉数を単䜍数(珟圚は党おのデヌタ型共に 1)だけ 増加(++) たたは枛少(--) させたす。

  8. if
    ifは、Modula-2 や Ruby ず同じ構造です。
    文法 if 条件匏 then 匏 {elsif 条件匏 then ... }[ else 匏 ] end
    䟋
    int:x = 3
    if x==0 then
       put("x is 0\n")
    elsif x==1 then
       put("x is 1\n")
    else
       put("x is other\n")
    end
    

    なお、ifは匏なので、䞊の䟋はこのようにも曞けたす:

    int:x = 3
    put(if x==0 then
          "x is 0\n"
        elsif x==1 then
          "x is 1\n"
        else
          "x is other\n"
        end
    )
    

  9. for文
    文法 for 型 倉数名 in 匏 { ,匏 } do 文 end
    䟋
    # for文䞭の 1,10 は、1 から 10 たでカりントする反埩子
    for int:i in 1, 10 do
       put(i)
    end
    
    反埩子を甚いた繰り返しは䞊のようなスタむルずなりたす。

    Ver0.09 では反埩子は䞋蚘の皮類をサポヌトしおいたす

    途䞭で for匏を脱出する堎合は break文を䜿甚したす。

    反埩子を䜿った方が簡単に繰り返しが蚘述できるので、たず for文を䜿うこずを考えお䞋さい。 それが無理な堎合は次の loop 文で察凊したす。

    for匏ず等䟡な loop匏は次のようになりたす。反埩子がどのように生成され 補助倉数 i ず䜜甚しおいるかが分かるかず思いたす:
    for int:i in 1, 10 do
       :
    end
    int.iter: I = int.iter.init(1, 10)
    int: i
    loop
       if not I.get(i) then break end
       :
    end
    

  10. loop
    loopは、繰り返し凊理を行う堎合に䜿いたす。
    文法 loop 文 end
    䟋
    # smile storm
    loop
       put("(^_^)/ ")
    end
    

    loopは、forでは察凊できない䞀般的な繰り返し凊理の堎合 に䜿うこずになりたす。
    forず同様、loopを脱出するには、埌で述べる breakを䜿甚したす。

    Alan では、繰り返しは forず loopの2぀だけです (*6)。 他の蚀語にあった、while、do...while、repeat...untilは、 すべお loopで察応できるので、文法的には数を絞りたした。 もちろん、whileを甚いるよりも loopを䜿甚した方が 若干冗長になりたすが、これは

    ちょっずした䟿利さのために文法を远加するよりも、芚えるこず を少なくする方を優先する
    ずいうトレヌドオフで決めおいたす。

  11. break
    文法 break
    䟋 break

    for匏、loop匏の脱出に䜿いたす。 Ver0.09 では、重の for か loop の脱出のみサポヌトしおいたす。

  12. 関数定矩は䞋蚘ずなりたす
    文法 戻倀型 : 関数名(パラメヌタ定矩) 匏 end
    䟋
    # 1からnたでの和を求める
    int: sum(int: n)
       if n==1 then
          1
       else
          n + sum(n-1)
       end
    end
    
    put(sum(100))
    

    戻り倀は 最埌の匏の倀ずなりたす。Perl, Ruby, shell などず同じです。

    関数の入れ子関数の䞭で曎に関数を定矩するこず。Nestは できたせん(*)。

    (*) この制玄により、スタックフレヌム(あるいはアクティベヌションレコヌド) が単玔になりたす。C/C++ ず Pascal の違いです。関数の入れ子は盎亀性の点では 矎しいのですが、それに䌎う実行時コストず利益を考え、Alan でも C/C++ ず同様 ずしたした。

    匕数の性質

  13. enum定矩
    文法: enum定矩 ::= enum { ID列 | enum定矩 }+ end
    䟋
    enum Family                     # type definition
      FATHER, MOTHER
      enum children
        BROTHER, ME, SISTER
      end
    end
    
    Family: f = Family.children.ME  # var definition
    
    put(f, "\n")                    # print
    
    if f == Family.FATHER then      # comparison
      put("father!\n")
    else
      put("not father!\n")
    end
    
    if f in Family.children then    # 'in' comparison
      put("child\n")
    else
      put("not child\n")
    end
    

    実䜓は32bit敎数ですが、敎数倀に文字を䞎えるこずで、 ゜ヌスの可読性を増すのが enumの目的です。 䞋蚘の特城がありたす:

    1. put() するず、敎数倀ではなく察応する文字列が印字されたす。
    2. ネストした enum 定矩で ID をグルヌプ化できたす。
    3. グルヌプに属するか吊かを 'in' 挔算子で実行できたす(䟋の f in Family.children 参照)。実䜓は bitmask 挔算です。
    4. 名前空間が C/C++ の enum ず異なり、段狭くなっおいたす。 たずえば enum Family FATHER, ... end ずあるず、必ず Family.FATHER ず指定しなくおはいけたせん(C/C++ では FATHER が Family ず同じ 名前空間内にある)。

    挔算子

    比范 ==, <>, in
    ==, < は ID同士の比范、in は IDず enumグルヌプずの間の比范に 甚いたす。

  14. return
    文法 return
    䟋 return
    関数から呌び出し偎に戻るずきは、関数の終りに至った時ず return文で戻る方法の皮類ありたす。

    return時の戻倀は、return 盎前の匏の倀ずなりたす。

    ぀たり、C/C++/Perl などのように "return 匏" ずは曞けたせん。 文法䞊矛盟が発生しおしたうため、"return 匏" は华䞋になりたした。

  15. 䟋倖凊理
    文法(単䞀匏) 通垞の単䞀匏 匏
    rescue拡匵した匏 匏 || ... [ else ... ] end
    䟋
    # file open に倱敗した堎合、メッセヌゞを出し、すぐ終了
    # (ただし、以䞋はあくたで䟋ずしお挙げたのであっお、この皋床の
    # ゚ラヌ凊理であれば rescue無しで枈たせた方がシンプルでしょう)
    
    void: f()
       file: f = "/etc/password" ||
          put("cannot open /etc/password\n")
          return
       end
       for str:s in f do
          put(s)
       end
    end
    
       f
    
    文法(耇合匏) 通垞の耇合匏 ... end
    rescue拡匵した耇合匏 ... { rescue { err型芁玠 } then ... } end
    䟋
    # loop䞭に発生した堎合ぞの察応
    loop
        #匏
    rescue then
        put("exitting loop...\n")
    end
    

    Alan では䟋倖凊理をサポヌトしたす。

    単䞀匏(endで終わらない匏。1+1など)での䟋倖凊理が Alan の意図する䟋倖凊理だず考えおいるので、たずこちらから 説明したす。

    Alan では、゚ラヌ凊理 = 䟋倖凊理、です。埓来の蚀語 (Cなど)の if 文による゚ラヌ凊理はそのたた Alan の ||挔算子や rescue句で曞ける、ず考えおください。

    「それでは埓来の蚀語の if文でのステヌタスチェックず倉わらないのでは」 ずいう疑問があるかもしれたせんね。 rescue句を曞かない堎合は、゚ラヌが発生したずきに自動的に それをナヌザに通知し、自動的に䞊䜍(ブロック・関数呌出し元)に 戻っおいく点が異なりたす。぀たり、rescue句がない堎合は、 䟋倖凊理をサポヌトしおいる蚀語(Ruby, Eiffel, Ada, C++, Java など) ず同様の動きをしたす。 この点、if文によるステヌタスチェックですず、ステヌタスチェックを 怠るず、゚ラヌが発生しおも無芖しお次を凊理しようずしたす。 この点が倧きな違いです。

    私の知る限り、Alan 以倖で単文レベルで䟋倖ハンドラが曞けるのは Ruby だけです(Lispはどうなんでしょうか?どなたか教えおください)。

    単䞀文に䟋倖凊理を付加する堎合、䟋倖凊理挔算子 '||' に続いお ... end たで蚘述しおください。 shell や Perl をご存じの方は、'||' に芪しみがあるかず思いたす。

    耇合匏( = endで終わる匏)の堎合、匏の終りを衚す end を、 rescue ... end に 拡匵し、゚ラヌ凊理を蚘述するこずで、そのブロック内で発生した ゚ラヌに察凊するこずができるようになりたす。

    たた、゚ラヌが発生した堎合にすぐに終了させたい堎合は rescue句も蚘述する必芁はありたせん。自動的に最䞊䜍たで ゚ラヌが䌝搬し、exit(1) したす。

    制玄事項

    1. retry はありたせん。
    2. v0.08 で採甚しおいた "Organised Panic" は廃止したした。 DbC に基づく Organised Panic が正しいのか、Ada/C++/Ruby 等、メゞャヌな蚀語の䟋倖凊理フロヌのほうが正しいのか、 未だに刀断が付きかねたすが、実装ずしおは rescue 句の 最埌に raise0() を発行するかどうかの違いだけなので、 今は䞡者を詊しおいる、ずいうずころです。 俺蚀語の利点かな?

    サンプルは、 R/src/tst/v0.03/4_exception/ をご芧䞋さい。

    ゚ラヌコヌド

    䟋倖(゚ラヌ)発生時、゚ラヌの識別のために enum err型の゚ラヌコヌドを 甚いおいたす。

  16. import
    文法 import パッケヌゞ名 [ 別名 ] { , パッケヌゞ名 [ 別名 ] }* end
    䟋1
    import
       Math
    end
    put(cos(0.0))
    
    䟋2
    import
       Math M
    end
    put(M.cos(0.0))
    

    importは、指定されたパッケヌゞを取り蟌みたす。 別名を指定しなかった堎合は、デフォルトでその パッケヌゞの䞭のシンボルをグロヌバル領域に取り蟌みたす。 䟋えば、䞊の䟋のように、real型を匕数にずりreal型の結果を返す 䞉角関数 cos は定矩ずしおは:

    real: Math.cos(real);
    ですが、"import Math end" 文で取り蟌んだ堎合、 Math ずいう名前空間はなくなっお cos(...) で䜿甚できるようになる、 ずいうこずです。これがデフォルトの動䜜です。

    名前の衝突を避けるために別名を぀けるこずもできたす。
    別名の䜿い方の䞀䟋ずしおは、 むンポヌトするパッケヌゞの数が倚くなり名前が衝突するような堎合、 倧文字のアルファベット文字で衝突を避けるようにしたす。 むメヌゞずしおは

    パッケヌゞを import文で手元にたぐり寄せ、 良く䜿うものにアルファベット文字を ぀けるこずで識別しやすくする
    ずいった感じです (ずいうか、「よく䜿うパッケヌゞに文字の識別子を䞎えおおく」 ずいう䜿い方をしたいためにこの構文を採甚しおみた、ずいうのが 真盞です。俺蚀語だからこういうこずも詊せるわけですね)。
    ここでは䟋ずしお文字ずしたしたが、もちろん、別名の長さは任意です。

    importはグロヌバル域で䜿甚したす。関数内や適圓なブロックの䞭で 宣蚀した堎合に䜕が起るかは䞍定です (すいたせん。゚ラヌずかもただ出ないず思いたす)。

    同じパッケヌゞの import を耇数回行った堎合䜕が起るかも䞍定です (ただ゚ラヌチェックしおいたせん)。

    importは宣蚀文で、それ自䜓䜕かを実行する、ずいうものではありたせん。

    珟圚提䟛しおいるパッケヌゞは䞋蚘です。 「名前空間を導入しおみたかった」か぀ 「wwwstat.al を蚘述するに必芁十分なもの」ずいう動機がたずありきなので、 党くもっお䞍十分なものに過ぎたせん m(__)m:

    Math 数孊関係
    Net ネットワヌク関係
    Time 時間・日付関係

    パッケヌゞをナヌザが定矩する機胜はただ提䟛できおいたせん。

    パッケヌゞの実装は今のずころ C++ で蚘述しお静的リンクする、ずいう原始的 な方法のみです。Python / Ruby / Perl のようなこずを提䟛できるかは ただ未定です。

    戻倀

    import も䞀応匏ですが戻倀はありたせん。぀たり void 型の戻倀、 ずいうこずです。

  17. → クラス定矩

組蟌み関数

void: put (...) # 印字関数
void: putf (str: fmt, ...) # 曞匏付き印字関数
void: putf (Fmt: fmt, ...) # 曞匏付き印字関数
str: get (int: len) # デヌタ取埗
substr: matched (int: i) # 正芏衚珟のパタヌンマッチ文字列取埗
void: exit # 匷制終了
void:
void:
void:
raise
raise
raise
(err, str)
(err)
(str)
# 䟋倖発生

void: put(...)

説明
任意の型の倉数を任意個数 stdout に印字したす。
戻り倀
-
䟋
str: name = "Wells"
put("Hello, ", name, "!\n")
SEE ALSO
putf()
BUG

str: get(int:len)

説明
暙準入力から指定の長さ len [byte] を文字列ずしお取埗したす。
戻り倀
取埗した文字列
䟋倖
VE_STR_TOO_LONG -凊理できる長さ(v0.15時点: 254byte)を 超えた文字列を取埗しようずしたした。
VE_EOF -ファむルの終りに達しおいた堎合。 EOFに達する盎前の堎合、通垞取埗した文字列の長さは len より 短くなりがちですが、この堎合ぱラヌではありたせん。 䞋蚘の䟋をご芧䞋さい。100byteづ぀取埗しおいたすが、 暙準入力のデヌタ長が 100で割りきれない堎合でも正しく 暙準出力にコピヌしおいたす。
䟋
# get を䜿った stdin から stdout ぞのコピヌ。
# あくたで䟋です。普通は stdin むタレヌタを䜿いたす。

loop
   put(get(100)) ||
      break
   end
end
SEE ALSO
BUG

substr: matched(int:i)

説明
盎前のパタヌンマッチ匏でマッチした郚分文字列のうち、 i番目のものを返したす。
i = 0 は、マッチした郚分党䜓の文字列を返したす。
i = 1 は、1番目の正芏衚珟䞭のカッコ(...)で囲った郚分文字列を返したす。
以䞋同様で、i = matchednum - 1 たでが郚分文字列の添字ずなりたす。 i がそれ以倖の堎合、VE_REX_EXCEED_MATCHED_NUM 䟋倖が発生したす。
戻り倀
郚分文字列
䟋倖
VE_REX_EXCEED_MATCH_NUM マッチ郚分文字列の数がバッファを超えたした。 src/type/rex.h の V_REX_MATCH_NUM を増やしお再コンパむル しお䞋さい。
VE_REX_EXCEED_MATCHED_NUM matched(i) 呌出し時に、添字 i が範囲を超えたした。
䟋
"Hello, World!" in /[Hh](ello)/
put(matched(0), "\n")
put(matched(1), "\n")
SEE ALSO
rex.matched()
BUG

void: exit

説明
匷制的に凊理を䞭断したす。
戻り倀
-
䟋
put("Hi")
exit        # Hiだけ印字されおここで終了
put("Ho")

void: raise(err, str)
void: raise(err)
void: raise(str)

説明
䟋倖を発生させたす。 errを省略した堎合(3番目のAPI)、゚ラヌコヌドずしお err.RUNTIME が 䜿甚されたす。
䟋
void: f()
  put(3)
  raise("error!")
  put(4)
end

  f

組蟌み倉数

ENV # 環境倉数
file: stdin # 暙準入力
file: stdins # 暙準入力あるいはコマンドラむンで指定したファむル矀
file: stderr # 暙準゚ラヌ出力

ENV

SYNOPSIS
str: ENV(str:var) #read
ENV(str:var) = val #write
説明
環境倉数をあたかも map[str] のようにアクセスする 組み蟌み倉数です。
䟋1
put(ENV("LANG"))
ENV("LANG") = "C"
䟋2
ENV を走査するむタレヌタも提䟛しおいたす。が、 environ(5) の wrapper でしかないので、"key=val" の倀しか取埗できたせん。 Perl の keys(ENV) に盞圓するようなこずはできたせん:
for str: env in ENV do
   put(env, "\n")
end
SEE ALSO
BUG

stdin

SYNOPSIS
file: stdin
説明
暙準入力を衚す組蟌みの倧域倉数です。 file 型です。
戻り倀
i番目の芁玠(文字列)
䟋
# 暙準入力を暙準出力にコピヌしたす

for str:s in stdin do
    put(s)
end
SEE ALSO
BUG

stdins

SYNOPSIS
files: stdins
説明
Perl のダむダモンド挔算子 <> に盞圓する、 Alan の組蟌みグロヌバル倉数です。 反埩子ずしお䜿甚したす。

コマンドラむン匕数が䞎えられた堎合、そのファむルを順次 読み蟌みモヌドでオヌプンし、行行走査したす。

コマンドラむン匕数がない堎合は、stdin から読み蟌もうずしたす。

䟋
# Alan 版 cat

for str:s in stdins do
    put(s)
end
SEE ALSO
TBD
BUG
TBD

stderr

SYNOPSIS
file: stderr
説明
暙準゚ラヌ出力です。

組蟌み関数 put() ず同様のメンバ関数 stderr.put() が 䜿甚可胜です。

䟋
int: i = 100
stderr.put("NOTE: this is stderr output", "with any type of argument"
            , " i = ", i, "\n")
      
SEE ALSO
TBD
BUG
TBD

パッケヌゞ

限定的ですがパッケヌゞ(ずいうより珟状では名前空間)を導入したした。 import文も参照䞋さい。
  1. Math --数孊関係
  2. Net --ネットワヌク関係
  3. Time --時間・日付関係
  4. Filesys--ファむルシステム関係

制玄事項

Alan v の制玄事項を挙げたす。
  1. 正芏衚珟型(rex)
    1. 正芏衚珟は POSIX regex functions (regcomp(3)などをそのたた䜿甚しお 実珟しおいたすので、regex 以䞊のこずはできたせん。
    2. Alan 文字列は '\0' を蚱しおいたすが、正芏衚珟が regex ラむブラリによっお実珟されおいる関係䞊、 パタヌンマッチに関しおは文字列は '\0' はサポヌトされおいたせん。
  2. パッケヌゞはナヌザレベルではただ定矩できたせん。
  3. closure はありたせん。埓っお、Perl の s///eg, Rubyの gsub(//){...} 盞圓ができたせん。
  4. GC(Garbage Collection)はありたせん。 が、C++盞圓のコンストラクタ/デストラクタモデルに沿っおいるので、 GC盞圓ずたではいかなくずも、ある皋床ナヌザは資源管理を 意識しなくお枈むようにはなっおいたす。
  5. 他にも山ほど・・・。





//以䞊

Top / Alan蚀語仕様





Alan ver0.31