ラベル TypeScript の投稿を表示しています。 すべての投稿を表示
ラベル TypeScript の投稿を表示しています。 すべての投稿を表示

2016年9月9日金曜日

TS LISPソース

どうも、はざまです。
前回の記事で、TS LISPの紹介をしました。今回の記事は、そのTS LISPのソースを全掲載しようと思ったのですが、さすがに長くなりすぎる上に、一覧で見せられても、閲覧性が悪くなるだけなので、その役目はGithubに譲るとして、解説を軽くふわりとするだけに留めようと思います。
中身自体、TypeScriptのコンパイラのバージョンがまだ0.8.*だか、0.9.*の時代に書いたものなので、現在のコンパイラでコンパイルしたら、時代遅れ感が否めませんが、まあ参考になる箇所もあるでしょう。
まあ、解説と言っても、そのファイルが何をしているか概要を説明するだけの簡便なものです。人によっては煩わしく感じるかもしれませんが、お付き合いください。


  • Common.ts - IEnumeratorやDictionaryなど、.NET環境の実行環境で広く必要になる基本的なクラス群を独自定義しています。ただ、このソースを書いた時点のTypeScriptの制限で、ちょっと本物の.NET環境とは異なるメソッド定義になっている箇所があります。新しいTypeScript環境では、解消されているのかな
  • WebHelpers.ts - 見た目をコンソール状にする外部ライブラリ"jqconsole"のラッパと、同じ機能を持つクラスを独自定義しようとしているファイル。ただ、独自実装は、途中で力尽きてます( ;´Д`)
  • ErrorFactory.ts - 様々な種類の例外を投げる"例外ファクトリ"クラスを定義
  • Utils.ts - 全体で必要になる種々のユーティリティ関数群を定義
  • LispTypes.ts - LISPの実行環境となるクラス群を定義
  • Reader.ts - LISPのトークンを識別する文法解析器と"クォーサイクォート"と呼ばれる特殊形式の内部表現を行うクラスを定義
  • LispFunctions.ts - 基本的なLISP関数のネイティブ実装を定義
  • Interpreter.ts - 実際にLISPの処理を行うインタープリタ
  • Snippets.ts - LispFunctions.tsだけでは足りない、よく使われる関数やマクロをLISPとして定義し、文字列で保持するモジュール。load-sample関数で読み込めるS式もこの中に定義されてます
  • main.ts - インタープリタ自体のブートアップを行う処理が記載されている
以上が概要です。こんなほとんど中身のない記事ですが、参考に(?)していただけると光栄です。
今更、なんでこんな記事を書いたのかって怒る方もいらっしゃるかもしれませんね。その理由は、なんとなくとしかお答えできませんε-(´∀`; )

2016年9月7日水曜日

新技術と旧技術の融合

みなさん、ご無沙汰してます。はざまです。
今回は、以前何の目的で作ったかは忘れましたが、作成したLISP処理系の紹介です。といっても、実装内容自体は、完全に借用しているため、そのポーティング程度しか語ることはありません。
そのポーティング先となったのが、今やVisualStudioでも、正式にサポートされ、一線級で活躍していると思われる初期のTypeScriptです。まだ、コンパイラのバージョンが0.8.*だか、0.9.*時代に書いたものなので、今から見ると粗がある可能性も否めませんが、大筋は今の思想と合致しているはずなので、今回、紹介するに至った次第です。これを期に、今後、TypeScriptの記事を増やせていけたらいいな〜とか思ったり、思わなかったり。
Jsdo.itがTypeScriptに対応したとの話も聞くので、修正するなら参考実装もそれに合わせて変更する形になるでしょうかね。
そうそう、Web上で動くLISP実装としての活用もしていただけると、ありがたい限りです。

2012年10月9日火曜日

JavaScriptの救世主(?)

またまたお久しぶりです。はざまです。
先日、TypeScriptというものが発表されましたね。Microsoft製の型安全なJavaScriptのスーパーセットとのことですが、ネット上ではなんだか盛り上がってるようなので、自分も軽く触った所感でも記しておこうかと思います。

まず、シンタックスについてですが、現行のECMAScriptの要項を素直にそのまま実装した感じといったところでしょうか。型指定子は後置形式ですし、関数シグニチャもHaskellやScalaのような書き方になっています。そういえば、C++11ではこれと似たような関数シグニチャの書き方も出来ましたね。
次に互換性ですが、これは全く危惧する必要は無さそうです。というのも、Typescriptは一旦コンパイルしてしまえばプレーンJavaScriptに翻訳されるようですし、公式サイトにも既存のコード資産を有効活用できる旨がしっかり明記されています。ただ当然、それらのJavaScriptで記述されたコードはTypeScriptの恩恵を受けられないのが残念なところではありますが。(と思ったら、既存のJavaScriptのコードでも型情報を追加する方法はあるみたいですね。公式サイトにはNode.jsとjQueryの例が載っていました)
さていよいよ、TypeScriptの真髄とも言える機能に焦点を当てることにします。まず、名前からも推測できるように「型」が追加されたことで、プレーンJavaScriptでは実際に動かしてみるまで全く予想がつかなかった型不一致や型誤認によるありもしないプロパティーを参照するなどの凡ミスをコンパイル時に発見できるようになり、error-proofなコードが書きやすくなっています。さらに、型の追加による恩恵はこれだけにとどまらず、プレーンJavaScriptでは、コンテキストというものがほぼ存在せず、推測するべくもなかったコード補完機能がパワーアップして使いやすくなったり、随時変数の型が確認できるようになるなど生産性の向上が見込まれます。
また、TypeScriptでは(やはり見た目だけですが)クラスベースのオブジェクト指向が使えます。プレーンJavaScriptでも、ライブラリを使用すれば多少いびつながらもひと通りのOOPはできるので、必須とは言えないかもしれませんが、コードがすっきりするのでプログラマの意図をコードに載せやすくなると言えるでしょう。
その他にもモジュールやラムダ関数(JavaScriptには標準でクロージャーがついていますが、ここでいうラムダ関数は、どうやらほぼクロージャーの糖衣構文のようです。TypeScriptの開発者がC#も開発していたとのことなので、C#のラムダ関数を思い浮かべればイメージしやすいでしょう)もサポートされているようです。
そのへんについてはこれからいろいろいじってみて、後日改めて記事にすることにしましょうか。


まだまだ開発途上のTypeScript。いずれジェネリックプログラミングもサポートするとのことなので、JavaScriptといったらTypeScriptのことを指すことになる日が来るかもしれませんね。
でもその前に、IEでのHTML5やCSS3のサポート範囲を広げてくださいよ、Microsoftさん。


参照したサイト一覧:


※こちらの記事は、あくまで所感です。もしかしたら間違った記述も含まれているかもしれないので、100%鵜呑みにはしないでください。