Mystic#なブログ

MysticSLの後継言語、Mystic#について話します

とりあえずごめんなさいw

2010-12-19 11:59:12 | Mystic#
本業が…最近そんなんばっかだorz


えーと、コンパイラですがほとんど手をつけられていませんorz

ただ中止したわけではないので、気長に待ってくださればと…

お詫びになるかわかりませんが、ちょっと前に作りかけた(今は放置気味の)IDEでも
見て妄想してくださいw

VisualStudioアドインとして作れれば最高なんですが、そんな知識もないので
ゼロから見た目だけVSっぽいIDEを作ろうとしています。
しかしツールボックスやGUIデザイナで挫折中w


コードエディタ


新規プロジェクト


アセンブリの参照

びっくりした

2010-09-28 15:35:32 | Mystic#
某巨大掲示板の別言語のスレでなにやら名前が出ているようですが…
ここも捕捉されてしまったようです(;^ω^)嬉しいやら不安やら。


一応弁明しておきますが私は基本ROM専です。ので、それっぽい書き込みがあっても偽者です。
また私自身は積極的にこの言語を薦めることはしません。

前身のMysticSLともどもカス言語と言われましたが、まさにその通りだと思います。
むしろカス言語として名前が出るようになっただけでも喜ばしいことと思います。

カスでもいいから使ってみたいという人はコンパイラ準備できるまで少々お待ちいただければと…

Mystic# 紹介 その6

2010-08-10 13:41:14 | Mystic#
仕事が期をまたぐ忙しい時期に入ってしまった…
加えて引越しもあるのでコンパイラは10月下旬に入りそうですorz

その代わりといってはなんですが、Mystic#の新しい構文および拡張された構文、
およびオブジェクト指向に関する機能の一部の続きを1つ紹介します。

・プロパティ new!!
メソッドはそのオブジェクトが持つ機能の処理を行うものであるのに対し、
プロパティはオブジェクトの性質や状態を取得または設定するためのものです。
#class [TestClass]

#property [IsTest, *~getIsTest, , Boolean] As Global
#property [Items, Integer, *~getItems, *~setItems, String] As Global

Var String [_item{}] As Local

*~getIsTest
  Return [True]
MethodReturn

*~getItems
  Return [_item{Argument0}]
MethodReturn

*~setItems
  _item{Argument0} = PropValue
MethodReturn

#property ディレクティブが新たに追加され、プロパティ名から右へ
インデックス用引数の型、ゲッター、セッター、プロパティの型、となります。
ゲッターおよびセッターのどちらかを省略すると、書き込み専用・読み取り専用にできます。

上記のプロパティを使用する場合は以下のようなコードになります。
#program [test]

#method [Main, String{}, *~Main, Integer] As Global

*~Main
Var TestClass [tCls]
Var Boolean [isTest]
Var String [item]

  tCls = CreateObject[TestClass]
  
  isTest = tCls.IsTest //読み取り専用プロパティ
  
  item = tCls.Items{3} //インデックス付プロパティの取得
  item = item.Trim
  tCls.Items{4} = item //インデックス付プロパティへの設定
MethodReturn


Mystic# ちょっと休憩

2010-08-03 10:57:38 | Mystic#
Mystic#の開発なんですが、他にやることが多すぎて実はちょっと止まっています。

ですが公開要望がありましたので、コンパイラのみプレビュー版として
リリースしたいと思います。

正直まだ実装していない機能があったり、構文解析がヘタレで
ありえないコードを書くと意味不明なエラーを吐いたりと
不親切な点が多く残っていますが「ちゃんとしたコードを書けば」まともに動いてくれますw


公開時期についてですが、今本業が忙しいことと、外へ出すにはあまりに酷い部分を修正したい、
およびサンプルなんかを用意したいので、9月ごろを目処とします。
が、遅れたらすみませんorz

Mystic# 紹介 その5

2010-08-01 20:14:10 | Mystic#
前回更新から時間が経ってしまいました…
引き続き、Mystic#の新しい構文および拡張された構文の一部を紹介します。

今回からは、オブジェクト指向に関わる部分もご紹介します。

・メソッドのオーバーロード new!!
オーバーロードとは、シグネチャ(引数の型や数といった、メソッドを構成する情報)が
異なる同名のメソッドを複数実装できることを言います。
従来はオーバーロード機能はなく、全ソースコード内のより後に記述されたメソッドのみが実際に使われるだけでした。
Mystic#ではオーバーロードをサポートします。

#program [Sample]

#method [Main, String, *~Main, Integer] As Global
#method [Test, *~Test_ov0] As Local
#method [Test, Integer, *~Test_ov1] As Local

*~Main
  
  Me.Test
  Me.Test [4]
  
  Console.ReadKey [True]
MethodReturn

*~Test_ov0
  Console.WriteLine ["引数なし"]
MethodReturn

*~Test_ov1
  Console.WriteLine ["引数は {0} です。", Argument0]
MethodReturn

尚、上記の例ではラベル名に _ov0 等と付けていますが、文法上特に意味はありません。
お好きな記述やコーディング規約で命名できます。

・コンストラクタ new!!
コンストラクタは、クラスのインスタンス生成(クラスの実体化)を行うための
特殊なメソッドです。特にコンストラクタを記述しない場合はデフォルトコンストラクタとして
引数無しで作成されます。

#class [TestClass]

#initialize [Integer, *~Init]

Var Integer [_test] As Local

*~Init
  _test = Argument0
MethodReturn

このクラスをインスタンス化するコードは次の通りです。
#program [Sample]

#method [Main, String, *~Main, Integer] As Global

*~Main
Var TestClass [tClass]

  tClass = CreateObject[TestClass, 3]

MethodReturn

#initialize ディレクティブは従来ではプログラム実行時に何より先に実行されるメソッドを宣言しましたが
Mystic#では全く別の意味(コンストラクタ)を持っていますので、誤用しないでください。


・クラスの継承 new!!
クラスの継承とは、既存のクラスの機能を引き継いで新しいクラスを作る機能のことです。

まず基本クラスを作成します。
#class [BaseClass]

#method [Test, *~Test] As Global

*~Test
  Console.WriteLine ["基本クラスのTestメソッドです。"]
MethodReturn


次に、このクラスに Test2 メソッドを追加した新たなクラスを作成します。
#class [DerivedClass]: Feat[BaseClass]

#method [Test2, Integer, *~Test2] As Global

*~Test2
  Console.WriteLine ["派生クラスの Test2 メソッドです。n渡された値は {0} です。", _
            Argument0]
MethodReturn

Feat キーワードで継承するクラス名を記述します。このキーワードは
同時にインタフェースの実装にも使用しますが、インタフェースの項で解説します。

・メソッドのオーバーライド new!!
従来はオーバーライドという名の全く異なる機能しかなく、オブジェクト指向とはほど遠いものでした。
Mystic#ではオブジェクト指向としてのオーバーライドをサポートします。

オーバーライドとはクラスを継承する際に使用するものなので、まず基本クラスを作成します。
#class [BaseClass]

#method [->Test, Integer, *~Test] As Global

*~Test
  Console.WriteLine ["基本クラスです。"]
MethodReturn

Test メソッド名の頭に -> という記号が付いているのに気付くと思います。
これは、継承した派生クラスに対しオーバーライドを許可するための修飾子です。

その他の言語のような、英単語になっていないため分かりづらいように思えますが
「このメソッドは他から乗っかられます」と言っているような記号のため、慣れれば非常にシンプルで分かりやすくなります。

次に派生クラスを作成します。
#class [DerivedClass] : Feat [BaseClass]

#method [Test->, Integer, *~Test] As Global

*~Test
  Console.WriteLine ["派生クラスです。"]
MethodReturn

こちらでは -> という記号がメソッド名の後ろに付いています。
「同名メソッドに乗っかります」という意味になります。

また、.NETのオブジェクト指向ではオーバーライドしたメソッドは必然的に
オーバーライドされるメソッドにもなります。

よってMystic#では以下のような(冗長的な)記述もできます。
#class [DerivedClass] : Feat [BaseClass]

#method [->Test->, Integer, *~Test] As Global

*~Test
  Console.WriteLine ["派生クラスです。"]
MethodReturn