Help us understand the problem. What is going on with this article?

他の言語に変換可能なプログラム言語 Zolang から Kotlin, Swift への変換を試す

More than 1 year has passed since last update.

Zolang でコードを1度記述すると、多数の言語に変換できるという目的で作られた言語のようです。
まだまだ作り途中っぽい。

例えば、Swift, TypeScript, JavaScript, Ruby のそれぞれで同一の Model を扱うようなユースケースを想定しているとのこと。

Install

Mac OS でのインストールは以下のコマンドでできます

$ curl -LO https://github.com/Zolang/Zolang/releases/download/0.1.12/zolang; mv zolang /usr/local/bin/; chmod +x /usr/local/bin/zolang
  • Install の確認
$ zolang


                   @@@     @
                  @###+@  `##
                @+++##+#+@+@@;
             `@++'#'#+##+#@#@;
             `#++++++####+##@;
 :::::::     #+#,...,######@@;    ;;          ;;     ;;     ;;     ';;;;
 ;;;;;;;    `'+'.::.,+;;;#+##;    ;;          :;     ;;     ;;     ;;;;;
 :::::;;    `;+':';,,+;#;####     ;;       .,,``,,`  ;;,,.  ;;   ,, ````
     .;;    `+;+....,####@##;     ;;       ,;;  ';`  ;;;;.  ;;   ;;
     .;;     +,'....@#######      ;;       ,;;  ';`  ;;;;.  ;;   ;;
   ';.       `.:...:.####@#;      ;;       ,;;;;;;`  ;;  `;;;;   ;;  ,;;
   ';.        +.,,.'@@#####       ;;       ,;;;;;;`  ;;  `;;;;   ;;  ,;;
 ..```        +..,..,######       ;;       ,;;  ';`  ;;     ;;   ;;  ,;;
 ;;           `.....,+####;       ;;       ,;;  ';`  ;;     ;;   :;  ,;;
 ;;            '....,#####        ;;.....  ,;;  ';`  ;;     ;;   .......
 ;;;;;;;       `.,.+:#@##;        ;;;;;;;  ,;;  ';`  ;;     ;;     ;;`
 :;;;;;;        +.,';#@##;        ';;;;;'  ,';  ';.  ;;     ';     ';`
                +...,###+
                 @..,###'
                  `',+'


Thanks for using Zolang 0.1.12
USAGE: zolang [ACTION]

    HELP: The Zolang CLI is the compiler and template manager for the Zolang programming language

    ACTIONS:
          init                Initializes a new Zolang project with a ./zolang.json and some example code.
          build               Compiles Zolang based on the settings specified in ./zolang.json
          watch               Runs compiler in hot-reload mode, observeing file changes for source files at paths specified in ./zolang.json

Zolang => Kotlin, Swift に変換

  • 作業ディレクトリの作成
$ mkdir  MyZolangProject
$ cd MyZolangProject
  • プロジェクトの作成
$ zolang init
Creating folder structure ...
Fetching templates ...
Cloning into 'ZolangTemplates'...
remote: Enumerating objects: 144, done.
remote: Counting objects: 100% (144/144), done.
remote: Compressing objects: 100% (94/94), done.
remote: Total 144 (delta 65), reused 101 (delta 39), pack-reused 0
Receiving objects: 100% (144/144), 17.84 KiB | 59.00 KiB/s, done.
Resolving deltas: 100% (65/65), done.



Done
  • config の設定( zolang.json )

以下はデフォルトのままです

{
  "buildSettings": [
    {
      "sourcePath": "./.zolang/src/",
      "stencilPath": "./.zolang/templates/swift",
      "buildPath": "./.zolang/build/swift",
      "fileExtension": "swift",
      "separators": {
        "CodeBlock": "\n"
      }
    },
    {
      "sourcePath": "./.zolang/src/",
      "stencilPath": "./.zolang/templates/kotlin",
      "buildPath": "./.zolang/build/kotlin",
      "fileExtension": "kt",
      "separators": {
        "CodeBlock": "\n"
      }
    }
  ]
}
  • %project_root%/.zolang/src/example.zolang を編集

文法は Zolang/Zolan の README にのってます

let i as number be 0

while (30 < i) {
  print(i)
  make i be i plus 1
}
  • build
$ zolang build
Compiling Zolang...
Compiling example.zolang to /path/to/MyZolangProject/.zolang/build/swift/example.swift
Finished compiling to /path/to/MyZolangProject/.zolang/build/swift/example.swift
Compiling example.zolang to /path/to/MyZolangProject/.zolang/build/kotlin/example.kt
Finished compiling to /path/to/MyZolangProject/.zolang/build/kotlin/example.kt
Success!

結果を確認

swift のコード

var i: Double = 0.0
while 30.0 > i {
    print(i)
    <<<<<<< HEAD
    i = i + 1.0

}

実行結果

<<<<<<< HEAD の部分はバグかな?削除して実行しました

0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
11.0
12.0
13.0
14.0
15.0
16.0
17.0
18.0
19.0
20.0
21.0
22.0
23.0
24.0
25.0
26.0
27.0
28.0
29.0

ideone での実行結果

kotlin のコード

var i: Double = 0.0
while (30.0 > i) {
    print(i)
    i = i + 1.0

}

こちらは <<<<<<< HEAD がなくて、そのまま実行できるかな・・・

prog.kt:2:1: error: expecting a top level declaration
while (30.0 > i) {
^
prog.kt:2:7: error: expecting a top level declaration
while (30.0 > i) {
      ^
prog.kt:2:8: error: expecting a top level declaration
while (30.0 > i) {
       ^
prog.kt:2:13: error: expecting a top level declaration
while (30.0 > i) {
            ^
prog.kt:2:15: error: expecting a top level declaration
while (30.0 > i) {
              ^
prog.kt:2:16: error: expecting a top level declaration
while (30.0 > i) {
               ^
prog.kt:2:18: error: expecting a top level declaration
while (30.0 > i) {
                 ^
prog.kt:2:18: error: function declaration must have a name
while (30.0 > i) {
                 ^

ideone での実行結果

無念・・・。

Kotlin 全く知らないので、誰かツッコミあればコメントお願いします。

雑感

まだまだ先が長そうですが、仕上がったら面白いかも?

tbpgr
Rubyを扱う人事(研修開発、エンジニア採用) Learning Designer。 tbpgr の読み方は(てぃーびー) 個人ブログでも色々と情報を垂れ流してます。 http://tbpgr.hatenablog.com/
http://tbpgr.hatenablog.com/
studist
「伝えることを、もっと簡単に」をミッションにビジュアルSOPマネジメントプラットフォームのBtoB SaaS「Teachme Biz」を開発・運営するスタートアップ
https://medium.com/studist-dev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away