MacでNimの事始め

世間的にはGoな感じなんだが、Nimの方がいいなーわかりやすいなーとおもったので、メモ。

Macではbrewでインストールできるので、brewで。

$ brew install nim

$ nim
Nim Compiler Version 0.18.0 [MacOSX: amd64]
Copyright (c) 2006-2018 by Andreas Rumpf

nimで簡単にコード書いてみる

# Hello.nim

echo('Hello Nim!')

これでコンパイルかけて実行する

$ nim c Hello.nim 

出来上がったファイルで実行する

$ ./Hello
Hello Nim!

めちゃ簡単

ちなみに、jsにもコンパイルできる

$ nim js Hello.nim

jsは、コンパイルするとnimcacheというディレクトリ配下にjsファイルが作られる

中身をみると…

/* Generated by the Nim Compiler v0.18.0 */
/*   (c) 2018 Andreas Rumpf */

var framePtr = null;
var excHandler = 0;
var lastJSError = null;
if (typeof Int8Array === 'undefined') Int8Array = Array;
if (typeof Int16Array === 'undefined') Int16Array = Array;
if (typeof Int32Array === 'undefined') Int32Array = Array;
if (typeof Uint8Array === 'undefined') Uint8Array = Array;
if (typeof Uint16Array === 'undefined') Uint16Array = Array;
if (typeof Uint32Array === 'undefined') Uint32Array = Array;
if (typeof Float32Array === 'undefined') Float32Array = Array;
if (typeof Float64Array === 'undefined') Float64Array = Array;

function toJSStr(s_15403) {
            var len = s_15403.length-1;
    var asciiPart = new Array(len);
    var fcc = String.fromCharCode;
    var nonAsciiPart = null;
    var nonAsciiOffset = 0;
    for (var i = 0; i < len; ++i) {
      if (nonAsciiPart !== null) {
        var offset = (i - nonAsciiOffset) * 2;
        var code = s_15403[i].toString(16);
        if (code.length == 1) {
          code = "0"+code;
        }
        nonAsciiPart[offset] = "%";
        nonAsciiPart[offset + 1] = code;
      }
      else if (s_15403[i] < 128)
        asciiPart[i] = fcc(s_15403[i]);
      else {
        asciiPart.length = i;
        nonAsciiOffset = i;
        nonAsciiPart = new Array((len - i) * 2);
        --i;
      }
    }
    asciiPart = asciiPart.join("");
    return (nonAsciiPart === null) ?
        asciiPart : asciiPart + decodeURIComponent(nonAsciiPart.join(""));



}

function rawEcho() {
              var buf = "";
      for (var i = 0; i < arguments.length; ++i) {
        buf += toJSStr(arguments[i]);
      }
      console.log(buf);
}

function makeNimstrLit(c_15003) {
            var ln = c_15003.length;
    var result = new Array(ln + 1);
    var i = 0;
    for (; i < ln; ++i) {
      result[i] = c_15003.charCodeAt(i);
    }
    result[i] = 0; // terminating zero
    return result;



}
var nimvm_6539 = false;
var nim_program_result = 0;
var globalRaiseHook_12005 = [null];
var localRaiseHook_12010 = [null];
var outOfMemHook_12013 = [null];
rawEcho(makeNimstrLit("Hello Nim!"));

いやー。これ、人の手でメンテできるのかな?