2015/08/20


こんにちわ。Vim 使ってますか?使ってない?使いましょう。

2015年になっても Vim 使ってる人いるの?なんて人もいますが、よく考えて下さい。Vim だけで出版物が何冊もあるんですよ?Vim script は GitHub 上だと Go や R と同じくらい人気のあるプログラミング言語なんですよ?(出展: The RedMonk Programming Language Rankings: June 2015 – tecosystems)

新しいテキストエディタがどんどん出てきて、イケてないテキストエディタはどんどん消えるのに、Vim は未だに人気があるエディタなんですよ?Vim がそんなに根強いのには理由があると思いませんか?使うの難しくて Vim やめてしまったけど、もういちどチャレンジしたいと思いませんか?普段使ってる Vim をもっと便利にしたいと思いませんか?

今も尚進化し続けるテキストエディタ Vim の最新事情をもっと知りたいと思いませんか?

そんな皆さんの声にお答えするべく、技術評論社様の Software Design にて Vim の連載を開始させて頂ける事になりました。

Software Design|gihyo.jp … 技術評論社
http://gihyo.jp/magazine/SD

連載タイトルは

Vimの細道

となります。10月号からの連載となります。いやー力強いですねー。力こそパワーですね。

第1回目は Vim の歴史から Vim の人気の秘密を紐解き、なぜ Vim がそこまで人気のあるテキストエディタなのかをご紹介します。以降は Vim の最新事情や上級者テクニックを惜しげもなく紹介し、新しいプラグインの紹介等も行っていきたいと思います。つたない文章になるかもしれませんが、どうぞよろしくお願い致します。

Posted at by




golang 1.5 がリリースされました。

Go 1.5 is released - The Go Blog

Go 1.5 is released 19 August 2015 Today the Go project is proud to release Go 1.5, the sixth major s...

https://blog.golang.org/go1.5

内容かなり盛りだくさんです。その中でも目を引くのが internal パッケージです。

golang ではパッケージ内のシンボルを外部から参照可能にする為に名称の先頭を大文字にする必要があります。しかしながら、そうしてしまうと無関係のパッケージからも参照可能になってしまう問題がありました。

ライブラリパッケージを作っていて内部の共通関数を切り出したい、しかしながらライブラリ以外の物からは使わせたくない、そういう場合に internal を使います。

mattn/go15internal · GitHub
https://github.com/mattn/go15internal

このライブラリパッケージは、foo および bar からそれぞれ internal/hello にある Hello を呼び出していますが、これを外部から呼び出そうとすると以下の様にエラーとして扱ってくれます。

c:\dev\go\src\github.com\mattn\go15internal_main>go build -x
WORK=C:\Users\mattn\AppData\Local\Temp\go-build408769714
package github.com/mattn/go15internal_main
        imports github.com/mattn/go15internal/internal/hello: use of internal package not allowed

どんどん使っていきましょう。

Posted at by



2015/08/15


埋め込み向けで、C言語から呼べて API が小さい JavaScript エンジン v7 を見つけました。

cesanta/v7 · GitHub
https://github.com/cesanta/v7/

特徴としては

  • クロスプラットフォーム: Arduino から MS Windows まで、どこでも動く。
  • 小さい: コンパイルされたコアはわずか 40KB から 200KB。
  • シンプルで直観的な C/C++ API: 簡単に C/C++ の関数を JavaScript 環境へエクスポート出来る。
  • 標準: V7 は JavaScript 5.1 を実装し、Standard ECMA tests をパスする事を目指している。
  • パフォーマンス: V7 は非 JIT エンジンの中で最速を目指している。
  • 創造的に利用可能: V7 は、ハードウェア(SPI、UARTなど)、ファイル、暗号化、ネットワークといった補助ライブラリのAPIを提供する。
  • ソースコードは ISO C と ISO C++ に準拠している。
  • 非常に簡単な統合: プロジェクトに取り込むには単に v7.h と v7.c の2つのファイルをコピーするだけ。

v8duktape も良いのですが、v8 はどっしり構えないと書き出せないし、duktape も API がスタックマシン形式という誰得だったりするので、純粋にC言語から使えてしかも define だけでネットワークや暗号まで使えるなら、こりゃ使わない理由はない。試しにサンプルを書いてみた。

#include <v7.h>
#include <stdio.h>
#include <string.h>

static v7_val_t
js_neocomplete(struct v7 *v7, v7_val_t this_obj, v7_val_t args) {
  char buf[100], *p;
  p = v7_to_json(v7, this_obj, buf, sizeof(buf));
  puts(p);
  return v7_create_undefined();
}

int
main() {
  v7_val_t result;
  struct v7* v7 = v7_create();
  v7_val_t obj = v7_create_object(v7);
  v7_val_t arr = v7_create_array(v7);
#define V7_STR(v7, v) v7_create_string(v7, v, strlen(v), 1)
  v7_array_push(v7, arr, V7_STR(v7, "きさま!"));
  v7_array_push(v7, arr, V7_STR(v7, "まさか!"));
  v7_array_push(v7, arr, V7_STR(v7, "そのまさかだ!"));
  v7_array_push(v7, arr, V7_STR(v7, "フハハハハハ!"));
#undef V7_STR
  v7_set(v7, obj, "Shougo"60, arr);
  v7_set_method(v7, obj, "neocomplete", &js_neocomplete);
  v7_set(v7, v7_get_global_object(v7), "Shougo"60, obj);

  v7_exec(v7, &result, "Shougo.neocomplete()");
  v7_destroy(v7);
}

実行すると

{"Shougo":["きさま!","まさか!","そのまさかだ!","フハハハハハ!"]}

という文字が出力されます。

見てもらえると分かる通り、かなり直観的な操作で JavaScript のオブジェクトや配列や JSON 操作や、C言語関数の呼び出しが行えるようになっています。ただしライセンスは GPL v2 なので利用の際には注意が必要です。

Posted at by