hmV8 (秀丸マクロ用 .NET Framework ライブラリ via V8 ECMAScript6)

  • 概要

    秀丸マクロを可能な限り、「ECMAScript6 V8エンジン」で記述可能とするためのライブラリです。

    • ECMAScript6で秀丸マクロ

      V8 エンジンによるECMAScript6内で、秀丸マクロの実行が可能です。
      又、「V8」⇔「秀丸マクロの各種変数やシンボル」が非常に手軽に行えるようになっています。

    • .NET Framework

      .NET Frameworkのライブラリが利用可能であるとともに、独自にC#等で制作した.dllも読み込み&利用可能です。
      ECMAScript標準ライブラリについては、V8本体に搭載しているもののみ利用可能です。注意してください。
      (各ブラウザが独自に提供しているものが利用できるわけではないということです)

    • 基本的にはhmJSの上位互換

      秀丸用に独自に設定されている関数などは、全て「秀丸マクロ用 .NET & ActiveXObject ライブラリ via JavaScript」と同じとなるため、
      解説は割愛しています。

    • TypeScriptで記述し、トランスパイルしても良い

      受け皿となっているものが、「Google V8 ECMAScript6系」ですので、TypeScriptからのトランスパイルとの相性が最高に高くなっています。
      TypeScriptはMicrosoft社が制作し(C#の作者と同じ人)、
      「Visual Studio、及び、Visual Studio Codeの標準サポート言語の1つ」であるとともに、
      「Googleの社内標準言語(C++、Java、JavaScript、Python、Go、TypeScript)の1つ」でもあります。

    • hmJSにあるActiveXObjectの特別な対応機能は無い

      ECMAScript6で記述していく、ということは、「古いJScriptではなく、新しいECMAScript6を優先した記述にしていこう」といったことですので、
      レガシー資産利用となるActiveXObjectの特別な対応はありません。

  • ダウンロード

    hmV8.zipファイル。ver 1.651
    └更新日 2017/11/10
    • ダウンロードした後、zipを「ブロック解除」必須

      当プログラムには「強い厳密な署名」が施してありますので、zipを解凍する際には、「ブロック解除」してください。
      もしくは、zipを解凍した後に、各々のdllに対して「ブロック解除」してください。
      ブロック解除しないまま、当プログラムを利用することは出来ません。

  • 動作環境

    • 秀丸

      秀丸エディタ ver8.66以上

    • Microsoft VC++ 再頒布可能パッケージ

      Visual Studio 2015 C++ ランタイム
      x86版をインストールしたことが無い方はインストールしてください。
      お手持ちのOSが64bitか32bitかには関わりなく、x86版のインストールが必要です。

    • Microsoft .NET

      .NET Framework 4.5以上。

    • 秀丸エディタ 64bit版について

      秀丸エディタ64bit版をご利用の方は、hmV8_x64.zipをダウンロードし、ファイルを差し替えてください。
      (又、この場合は、Microsoft VC++ 再頒布可能パッケージは、64bit版をインストールしてください。)

  • インストール

    • 秀丸エディタが32bit版の場合

      「hmV8.dll、ClearScript.dll、ClearScriptV8-32.dll、v8-ia32.dll、v8-base-ia32.dll」を秀丸エディタのディレクトリ内(hidemaru.exeと同じ場所)へと コピーする。

    • 秀丸エディタが64bit版の場合

      「hmV8.dll、ClearScript.dll、ClearScriptV8-64.dll、v8-x64.dll、v8-base-x64.dll」を秀丸エディタのディレクトリ内(hidemaru.exeと同じ場所)へと コピーする。

    • (原則的には、hidemaru.exeと同じ場所である必要があります。これは.NET FrameWorkのdllを動作させる仕組みに拠るためです。)
  • 各種説明は、hmJSとの差分のみ

    hmJSとhmV8は、ECMAScriptの「旧」と「新」という関係ですので、基本的にはhmV8はhmJSの上位の互換となります。
    このため、このhmV8では、hmJSに対する差分のみの情報を掲載しています。
    基本的な機能の説明等は、秀丸マクロ用 .NET & ActiveXObject ライブラリ via JavaScriptを参照してください。
    (繰り返しとなりますが、hmV8ではhmJSには存在するActiveXObjectに対する特別なサポート構文はありません。)

  • hmV8の意義

    • 新JavaScriptの基軸・ECMAScript6

      ECMAScript6によって、JavaScriptは、「古い設計思想の言語をむりくりこねくり回す」形から、
      「現代的な機能の多くを搭載した優れたプログラムが組みやすい言語」へと昇格し、
      オブジェクト指向、関数型、手続き型の、どれもを十分にサポートする言語へと成長しました。

      誰もが触れる機会が多くなっていくECMAScript6

      Web系のみならず、アプリやデスクトップ系にもECMAScriptはどんどん進出していっています。
      2020年ごろから各所で本格的に使われ初め、2024年頃には、「新規のJavaScriptはECMAScript6系で書くのが常識」といった流れになるのは間違いないところです。
      これまで以上に、ますます多くの人が「それほど深くは知らないが、ある程度なら書ける広く馴染みのある言語」としての地位を確立していくことでしょう。

      巨大なライブラリ

      ECMAScript6そのものは、ライブラリが極めて貧弱であるため、今やWindowsの共通ライブラリとも言える「.NET Framework」ライブラリを使用可能としました。
      このメリットはECMAScript6の唯一の大きな弱点を完全にカバーして余りあるため、とても大きいと言えるでしょう。

      秀丸独自の機能をECMAScript6の中で

      秀丸マクロの変数とECMAScript6の変数の値を自由にやりとり出来るとともに、ECMAScript6の中からも秀丸マクロを実行可能です。

  • 秀丸マクロファイルや「.js」ファイルの文字コード

    hmV8を利用する秀丸マクロファイルや、.jsファイルは、全て「utf8」の「BOM付き」を前提としています。
    但し、他の文字コードでのファイルも扱うことが可能です。

    詳細は、「hmJSの基礎中の基礎のAPI」の「SetCodePage」の項目を参照してください。

  • ソース例

    #JS = loaddll( hidemarudir + @"\hmV8.dll" );
    
    #_ = dllfuncw( #JS, "DoString", R"(
    
    // .NETアセンブリの読み込みが可能
    // "System.Windows.Forms"だけでも問題はない。
    lib = host.lib("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
    
    class MyForm {
        constructor(start) {
        }
    
        SetForm() {
            this.Forms = lib.System.Windows.Forms;
            this.frm= new this.Forms.Form();
            this.frm.Text = "こんにちわ";
        }
    
        SetButton() {
            this.btn = new this.Forms.Button()
            this.btn.Text = "クリック";
            this.btn.Left = 16;
            this.btn.Top = 16;
            this.btn.Tag = 0;
    
            // イベントハンドラも作れる
            this.btn.Click.connect(this.btn_Click);
            this.frm.Controls.Add(this.btn);
        }
    
        Show() {
            this.SetForm();
            this.SetButton();
    
            this.frm.ShowDialog();
        }
    
        btn_Click(sender, event) {
            let count = sender.Tag;
            count++;
            sender.Tag = count;
    
            // デバッグモニター用の関数
            hm.debuginfo("ボタンが押されたよ!!");
            hm.debuginfo(count.toString());
    
            // 秀丸マクロの「変数」とのやりとりも自由自在
            const filename2 = hm.Macro.Var('filename2'); // const filename2 = hm.Macro.Var['filename2']; と記述してもOK
            hm.debuginfo(filename2);
    
            // 秀丸マクロの「変数」とのやりとりも自由自在
            hm.Macro.Var('$count', count.toString() ); // hm.Macro.Var['$count'] = count.toString(); と記述してもOK
            // V8の中から秀丸マクロを一連のコマンドとして実行することも出来る。
            // ECMAScript6なら「テンプレートストリングス」が使えるのでちょうどよい
            hm.Macro.Eval( `
                // アウトプット枠へ出力
                #OP = loaddll("HmOutputPane.dll");
                #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $count);
                freedll(#OP);
            ` );
        }
    }
    
    
    var f = new MyForm(0);
    f.Show();
    
    )"
    );
    
    // V8から秀丸マクロへと書き込まれた変数は、当然秀丸マクロからも見える。
    message("ボタンは" + $count + "回クリックされました");
    
    freedll(#JS);
    
  • Google Chromeに搭載されている V8 エンジンとのバージョン比較

    ChromeのURLアドレスバーに「chrome://version」などと入力することにより、
    V8 エンジンのバージョンを知ることが出来ます。
    このバージョンと、v8-ia32.dll(もしくはv8-x64.dll)のバージョンとを比較すれば、
    どの程度バージョンが類似しているか(使用できる文法が一致するか)、概ね想像が出来るかと思います。

    V8のサイトを詳細に追えば、どのバージョンで何が実装されたのか追うことも不可能ではないですが、
    V8のソースコードは、年中途絶えることなく、数時間おきぐらいにReleaseバージョンが更新され続けていますので、
    V8のマニアでもない限り、追っても追いつかないため、無駄だと思われます。

  • 学習用のREPL(インタラクティブシェル)

    iv8.zipは上記hmV8.zipに含まれるClearScript.dll用に調整されたインタラクティブシェルとなります。
    「hmV8 x86 版 の一式」と同じフォルダ(原則、hidemaru.exeと同じフォルダ)に配置して使用すれば、
    「ClearScript + V8」の軽いトライ&エラーや機能確認がやりやすくなります。
    iv8.exeのライセンスは、hmV8+ClearScript と同じです。

  • ライセンス

    • hmV8

      hmV8は、Apache License 2.0となります。

      ソースの場所

      Githubにソースがあります。

    • ClearScript

      hmV8はClearScriptが利用されています。
      ClearScriptはMicrosoft Public License (MS-PL)ライセンスとなります。

      詳細は、https://clearscript.codeplex.com/を見てください。

    • V8

      V8は修正BSDライセンスとなります。また、V8自体も他のライセンス物を含んでいます。
      詳細はV8の公式 github等を参照してください。

      V8の公式Githubを見てください。