秀丸マクロ用 .NET 系 プログラミング言語 対比表

hm.NET, hmPy, hmV8, hmJS, hmPS, hmRb 対比表

似たようなものが複数存在するため、対比表が必要かと思います。
ここでは「言語記述性能」「将来性」「.NETとの相性」「可搬性」「読み込み速度」で、
対比しています。

hm.NET/C#

トピック 評価点
インデックス
捕捉
言語 10 Windowsでは圧倒的、iOSやAndroidにおいてもそれなりの実装シェアを持つ、
新進気鋭でありながら国際規格にもなっている
C#によって実装することを主眼に置いています。
この言語と、それを取り巻く環境が、
非常に高い開発効率と生産性を持っていることは、
いうに及ばないでしょう。
将来性 9 C#が消える時は、Visual Studio系が消える時であり、
Windowsも消える時である、
と断言しても良いと思います。

ECMAScriptの将来性には一歩及ばないでしょうが、
現在のC#の、Microsoftのプッシュ具合と
デスクトップ・クロスプラットフォーム・クラウド・サーバー
での使用状況を考慮すると、
充分に高い将来性が確保されていると言えるでしょう。
.NET相性 10 .NETは「まずはC#で使いやすいのか」というように
C#で利用しやすいということを念頭に設計されています。
可搬性 10 hm.NET1つが、
「実行時のライブラリであり」
「実装時の参照兼入力補完ライブラリでもある」
といった構成になっています。
読み込み速度 10 他のhm**シリーズが、
スクリプト言語スコープを別途作成するのに対して、
これはそのようなものは作成しないため、
非常に速い読み込み速度となっています。

hmV8/ECMAScript6

トピック 評価点
インデックス
捕捉
言語 7 ECMAScript6 (Google V8 Engine) + α
言語そのものは、「強力」とまでは言えませんが、
ECMAScript6(ES2015)で、「現代的な言語としてはこの文法があった方がベター」
といった中核文法が一通り入ったため、 かなり書きやすくなりました。
組み込み言語としては、「必要な文法や機能は十分揃っている」という状態です。
将来性 10 「Perl, Ruby, Python, PHP」といった現行スクリプト言語にて記述されている多くの分野は、
長い目で見れば、将来はこのECMAScript6(2015~)へと差し替えられていくことは、疑いようもありません。

スクリプトだけではなく、C#、JAVAなどが担っている領域の一部も、
ECMAScript6(以降)で代替されていくことでしょう。

「基本文法とコアライブラリはECMAScript6系」、
各アプリは「拡張APIを提供」、
といった形が主流となっていくことが予想されます。

策定やエンジン実装の中心を担っているのは、Google, Microsoft, Apple, Mozillaですから、
年単位どころか、月単位で、主要プラットフォームの全てで全方位的にこの方向へと進んでいっています。
.NET相性 5 .NETのクラス等は利用できますが、
ECMAScript6のクラスと、.NETライブラリのクラスは別のものなので、
それほど相性が良いわけではありません。

継承「is-a」には出来ないため、.NETのライブラリは静的に利用するか、
もしくは、「has-a」にして組んでいくこととなります。
ちょうど、hmV8のトップページのサンプルがそのような形です。
可搬性 8 hmV8.dll、ClearScript***.dll
といった5つの構成で、
  • ECMAScript2019の文法全て
  • ECMAScript2019のライブラリ全て
  • .NETの多くのライブラリ
が使えるというのは、素晴らしい可搬性です。

5つファイルが必要というのが、「少しファイルが多めかな」といった程度でしょう。
読み込み速度 4 関連ファイルをNGenすることにより、
なんとか及第点の読み込み速度となります。
何もNGenしない場合は、かなり読み込み速度が遅いと言えます。

hmJS/JScript(=ECMAScript3)

トピック 評価点
インデックス
捕捉
言語 3 JScript 5.8 / ECMAScript3 + α
秀丸マクロの文法等に比べれば、かなりマシですが、
現代のスクリプト言語としては、 力不足感は否めません。
(より正確にはJavaScript3系のテクニックを使うと、バッドノウハウ的な記述になりやすい)
但し、組み込み言語として考えると、この程度の文法があれば十分である、という考え方もあります。
将来性 2 このhmJSは将来性を期待して採用するものではなく、
過去のJavaScriptやJScriptの記述を、出来るだけ利用しようといったものです。
.NET相性 4 .NETのクラス等は利用できますが、
ECMAScript3のプロトタイプでは、上手くクラスとしてまとめるのも難しいかと思います。
あまり相性が良いわけではありません。

継承「is-a」には出来ないため、.NETのライブラリは静的に利用することになるかと思います。
ちょうど、hmJSのトップページのサンプルがそのような形です。
可搬性 10 hmJS.dll
というたった1つのファイルだけで
  • ECMAScript3の文法ほぼ全て
  • ECMAScript3のライブラリ全て
  • .NETの多くのライブラリ
が使えるというのは、可搬性としては完璧です。
読み込み速度 9 hmJS.dll単体なので、かなり読み込み速度が速いです。
hmJS.dllをNGenすると、さらに速くなります。

hmPy/IronPython

トピック 評価点
インデックス
捕捉
言語 8 Python2.7 + α
リスト機構を重視しつつ、バランスが取れた言語です。
変数に「記号」も極力付きませんし、「.」で区切りは統一しており、
「new」といった記述も不要であり、 記述に迷いが生じないため、とても優れています。
将来性 5 IronPythonは2021/01/16現在も更新され続けているため、まだ生存しているプロジェクトです。
すでにIronPython 3.x系開発も以前より進んでいるため、やがてリリースされることでしょう。

IronPythonは、.NET Frameworkが利用可能なスクリプト言語としては唯一、
Visual Studioで複数のバージョンに渡って正式といってもよいポジションでサポートされている言語です。
(Visual Studio 2019においても、インストール時にpython関連にチェックを入れるだけでIronPythonもサポートされます)
.NET相性 8 IronPythonは、Dynamic Language Runtimeを利用して作られた言語として
最も時間と人員が割かれた言語であり、DLRを最も活かした言語はIronPython
だと断言して良いでしょう。

既存のスクリプト言語の中で、.NETと非常に高いレベルで融合に成功した言語はPythonのみある。
と断言できるほどです。

hmPyのトップページの秀丸8.66以上の場合サンプルで、
その.NET Frameworkとの融合性の高さ、記述の自然さがみて取れます。
IronPythonに匹敵するのは、F#スクリプト、それらを超えるのは、C#スクリプトのみでしょう。
可搬性 4 IronPython本体のインストールが必要となるため、低めの得点となります。
しかし、その甲斐あって
  • Python2.7系の文法全て
  • .NETの多くのライブラリ
  • IronPythonに移植されたPython標準ライブラリの多くのもの
という非常に有利な構成を利用可能となります。
読み込み速度 6 hmPy.dllとIronPython系の本体の各種dllをNGenすることにより、
それなりの読み込み速度が確保できます。

hmRb/IronRuby

トピック 評価点
インデックス
捕捉
言語 8 Ruby1.9 + α
全てがオブジェクト、正規表現、クラス機構、各種文法、関数型要素など
言語として強力な要素が満載です。
将来性 2 IronRubyがすでに更新されていないため、
将来性は乏しいと言えるでしょう。

本家Rubyとの文法のかい離も年々大きくなっていくことは疑いの余地がありません。
Rubyそのものとして捉えるよりも、
「概ねRubyとそっくりな文法が使え、文法がFinalFixされた秀丸マクロの代替言語」
として捉えることをお勧めします。

但し、.NET Frameworkライブラリに目を向けると、より新しいバージョンの.NETライブラリであっても
クラス継承のレベルで利用可能であるため、
「文法こそ変化しないが、ライブラリは更新され、クラス継承といった深いレベルでも利用可能」と言えますので、
最低限の将来性は確保できています。
.NET相性 7 .NETのクラス等は利用できるだけではなく、継承なども可能です。
.NETのクラスとRubyのクラスは本来は異質なものなのですが、
ある程度は上手くカバリングされています。

Ruby表記の文字列と、.NETのString型が自動で上手く変換されないシーンや、
.NETのオブジェクトとRubyオブジェクトのBINDが上手く機能しない等、
IronPythonに比べると、「.NETとの融合の度合い」では劣ります。
hmRbのトップページのサンプルでも、そのことがみて取れます。
可搬性 8 hmRb, IronRuby.Libraries.dll
の2つのファイルで、
  • Ruby1.9系の文法全て
  • .NETの多くのライブラリ
が使えるというのは、素晴らしい可搬性です。

それに加えて、IronRuby 1.1.3をインストールしておけば、
IronRubyに添付されている標準ライブラリも利用可能ですので、
かなり良い感じでバランスが取れています。
読み込み速度 8 hmRb.dllとIronRuby.Libraries.dllをNGenすることにより、
十分速い読み込み速度となります。

hmLN/NeoLua

トピック 評価点
インデックス
捕捉
言語 4 Lua 5.3 + α
Lua自体はシンプルな言語であり、多くの機能を「テーブル」で代替します。
直接クラス機構を持たないため、JavaScript3系、5系と似たようなテクニックで
疑似的にクラス的なものを構築していくこととなりますが、
.NETのクラス群を正面から受け止めるには、文法が不足しています。
将来性 4 Luaという言語は現在進行形でよく利用されている言語です。
言語自体がシンプルであるため、ソースさえ手元にあれば、異なる.NET系列への移植も容易です。
.NET相性 4 .NETのクラス等は利用できますが、
Lua自体はクラスを持たないため、上手くクラスとしてまとめるのも難しいかと思います。
本来はあまり相性が良いわけではありません。
継承「is-a」には出来ないため、.NETのライブラリは静的に利用することになるかと思います。
ちょうど、C#で作ったdllの読み込みの「8.66以降の場合」のサンプルが
利用形態の中心となることでしょう。

又、.NET FrameworkのICollection等、配列などは0から始まることを想定しているのに対して、
Luaの配列は1から始まるため、ここも少々ネックです。

一方、NeoLuaでは、それ以外の部分で相性をなんとかカバーするための工夫が施されているため、
「複雑なアルゴリズムを組まなければそれほど問題は露見しない」というところです。
可搬性 10 hmLN.dll
というたった1つのファイルだけで
  • Lua5.3系のほぼ全て
  • Lua5.3系のうち、極めて頻繁に良く利用されるライブラリ(コルーチン等は除去されている)
  • .NETの多くのライブラリ
が使えるというのは、可搬性としては完璧です。
読み込み速度 10 他のC#等で作成したライブラリを読み込むで、値を出し入れする、
という点に特化して制作したものであるので、
ファイルは単体である上、かなり読み込み速度が速いです。
hmLN.dllをNGenすると、さらに速くなります。

hmPS/PowerShell

トピック 評価点
インデックス
捕捉
言語 7 PowerShell
PowerShellはWindows10では標準のシェルスクリプトであり、
・他のプログラムをいとも簡単に呼び出せるシェルとしての性質
・.NETプログラムであれば、オブジェクトベースのコマンドレットとなる機能、
・旧型のテキストベースのコマンドもシームレスに扱うことが可能。
・クラス機構や継承もあるとともに、名前空間などもあります。
・関数志向型を思わせるようなリスト処理もこなせます。
標準シェルとしては、機能的に十分な言語だと言え、エディタの組み込み言語としても
適性が高いと言えそうです。
将来性 9 Windows Vista あたりから細々と使われてきた印象ですが、
Microsoft Windows10でいよいよ、cmd.exeに替わる標準のシェルスクリプトという立場になったため、
今後は必然的に利用者が増えて、ノウハウも蓄積されていくことでしょう。
.NET相性 8 .NETのクラスなどを利用することが想定された作りとなっています。
また、PowerShellのコマンドレット自体、
.NET FrameworkのC#での制作を念頭に置かれていると考えてよいでしょう。
.NETのクラスを継承することも出来ます。
可搬性 10 hmPS.dll
というたった1つのファイルだけで
  • PowerShellの文法のほとんど全て(組み込みPowerShellではごく一部制限がある)
  • .NETの多くのライブラリ
が使えるというのは、可搬性としては完璧です。
読み込み速度 4 デフォルトだと初動が遅い!! 遅すぎる!! といった印象ですが
hmPS.dllやPowerShell系の.dllをNGenすると結構マシな速度となり、
hmV8をNGenするよりも速く起動するようになります。