スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Prev.    Category    Next 

C, Java, C#, JavaScript, Perl などに変換可能な Ć 言語

今回は C, Java, C#, JavaScript, Perl などに変換して使う Ć 言語について紹介します。

Ć の文字

まず、 "Ć" が読めないと思います。
私もよくわからないのですが、 Ć は acute(鋭い) アクセントのついた C で、 ポーランド語などのアルファベットらしいです。 読み方は "シ" っぽいです。
Unicode では U+0106 で、 HTML では Ć で表示できます。

Ć 言語とは

Ć 言語は Ć でソースを書いて、いろんな言語に変換して使うタイプの言語で、 移植性の高いライブラリーを作ることが目的です。
  • C 言語
  • Java
  • C#
  • JavaScript
  • ActionScript
  • Perl
  • D 言語
Ć 言語自体は C# で実装されており、 .NET framework や Mono 上で動作します。
構文も C# とほとんど一緒です。

特徴

Haxe との比較

似たタイプの言語としては Haxe があります。 変換可能な言語を Haxe と比較してみます。
言語 Ć 言語 Haxe
Web (クライアントサイド) JavaScript
Flash ○ (ActionScript) ○ (swf)
Native C 言語 X
C++ X
D 言語 X
仮想マシン(VM) C# △ (実験段階)
Java △ (実験段階)
NekoVM X
スクリプト言語 Perl X
PHP X
C と C++ のような違いはありますが、基本的に同じようなターゲットです。

NekoVM ではバイトコードを出力する点や Flash の生成コードなどでその特徴的がよくでていると思いますが、 Haxe の生成ファイルは人が読むことを想定していません。 それに対して Ć 言語では人が読みやすいコードを生成することが大きな違いです。

これは 2 つの思想的な違いから来ていると思います。
Haxe は Haxe さえ覚えておけば、生成言語を知らなくても、そのアプリを作れることを目的としており、 なるべく Haxe 内で完結させようとしています。
一方、 Ć 言語は特定のアルゴリズムの処理など部分的なライブラリーを作ることを目的としています。 そのためか、ファイル IO や GUI のモジュールもなく、Ć 言語だけで完結することは難しいでしょう。
Ć 言語は他の言語のラッパーであり、この辺は CoffeeScript に近いと思います。

ソースファイル

Ć 言語のソースファイルの拡張子には .ci を使用します。
コメントを含めて、日本語は使用できないようです。
/// Hello class
public class HelloCi
{
    /// Calculates sum of `a` and `b`.
    public static int Add(int a, int b)
    {
        return a + b;
    }

    /// Return greeting string.
    public static string GetMessage()
    {
        return "Hello, world!";
    }

    /// Contant sample
    public const string Version = "0.1";
}
これを C# に変換すると次のようになります。
// Generated automatically with "cito". Do not edit.

/// <summary>Hello class</summary>
public class HelloCi
{

        /// <summary>Calculates sum of <c>a</c> and <c>b</c>.</summary>
        public static int Add(int a, int b)
        {
                return a + b;
        }

        /// <summary>Return greeting string.</summary>
        public static string GetMessage()
        {
                return "Hello, world!";
        }
        /// <summary>Contant sample</summary>
        public const string Version = "0.1";
}
その他の言語への出力結果を含んだもう少し大きなサンプルは以下を見てください。 生成コードの読みやすさとして、次の特徴があります。
  • コメントを残す
  • 命名をなるべくそのまま使う
Ć 言語のソースに書いたコメントは JavaScript などの一部を除いて、 生成ファイルの方にも出力されます。
コメントのスタイルも生成言語に合わせてくれるので、 生成言語のドキュメントツールを使えば、ライブラリーのリファレンスなども生成できるようになっています。

また、この手のものは、文字に余分な文字を足したりして、シンボルの名前がかぶらないようにするものですが、 Ć 言語では、むしろ生成後の名前を予測できようにして、 生成コードとの連携をとれるようにしているようです。

インストールと使い方

インストール

ダウンロードページから最新版のバイナリーパッケージ (cito-X.X.X-bin.zip) をダウンロードします。 lang_ci_dl.png

ダウンロードしたファイルを適当なフォルダーに展開します。
後は、環境変数 Path にそのフォルダーを追加するか、フルパスで使用します。

コンパイル(変換)

変換には cito.exe を使用します。 書式は以下の形式です。
$ cito [OPTIONS] -o 出力ファイル 入力ファイル
  $ cito -o hello.cs hello.ci
  $ cito -o HelloCi.java hello.ci
出力形式は出力ファイルの拡張子で指定するか、 -l オプションで指定します。 詳細は --help オプションでヘルプを見て下さい。

標準の入出力が使えないとか -o がオプションなのに省略できないなど結構、使い勝手ににはツッコミどころが多いです。


もう一個ついてくる cipad.exe は一度に複数の言語への変換結果を表示するツールです。
おまけ的なツールなので、別に構わないのですが、こちらも使い勝手は悪いです。

lang_ci_cipad.png

Emacs の設定

残念ながら Ć 言語用の Emacs モードはまだ出ていないみたいです。(2013-06-19)
ただ、 C# 用のモードを使えば、結構代用できます。

C# 用のモードはパッケージがあり、 csharp-mode という名前です。これを選択してインストールします。
インストールすると *.cs のファイルを開くと、csharp-mode になります。 *.ci のファイルでも csharp-mode になるように ~/.emacs.d/init.el に以下の記述を追加します。
;; Ć 言語
(add-to-list 'auto-mode-alist '("\\.ci$" . csharp-mode))
C# 用で便利なように csharp-mode ではコメントで "/" を押したときに <summary> などを自動的に追加する機能があります。 これは Ć ではちょっと邪魔になります。
次の記述も追加すると、 *.ci では追加しないようになります。
 (add-hook 'csharp-mode-hook '(lambda ()
                               (if (string-match "\\.ci$" buffer-file-name)
                                   (local-set-key "/" 'c-electric-slash))))
また、 M-x compile でコンパイルした時、 cito のコンパイルエラーはエラー行をうまく認識してくれません。
以下の記述も追加するとエラー行を認識してジャンプ等ができるようになります。
 (require 'compile)
 (setq compilation-error-regexp-alist
       (append
        '(;; hello.ci(3): ERROR: Expected Id, got Slash
          ("^\\([^(]+\\)(\\([0-9]+\\)): \\(\\w+\\):" 1 2 3))
        compilation-error-regexp-alist))

感想

マルチ言語への変換としてみた場合、 Haxe と比べると Ć 言語は小粒です。 ただ、 生成コードの読みやすさなど、CoffeeScript のように軽いラッパーにはラッパーの良さもあります。
ただ、ライブラリーが全然ないのは、用途が限定されすぎてしまいます。 GUI は難しいとしても、 ファイル IO 、コレクションクラス、 点や矩形のような図形クラスといった基本的なもの欲しいところです。

JavaScript への変換だけを見れば、 "JavaScript はよく知らないけど、 C# はいつも使っている"という人にはいいかもしれません。 それでも、やっぱりライブラリーの機能は欲しいですが。

できたばかりの言語で、全体的にまだまだといった印象です。 ただ、狙いは面白いので、これからに期待したい言語です。


関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
15位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
2位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

09月 | 2017年10月 | 11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。