memo88の2020年ブックマークランキング

blog.sushi.money

やってみました。調べてないけど9割方セルクマ 😅

ブクマしてくださった方、ありがとうございます。

memo88の2020年ブックマークランキングベスト24(累計30ブックマーク)

# タイトル
1位 きしださんのかわいいリレーショナルデータベースをRubyで写経した - memo88
2位 リレー式論理回路シミュレータを自作して1bit CPUまで動かした - memo88
3位 Rubyで素朴な自作言語のコンパイラを作った - memo88
4位 LibreOffice Drawのodgファイルから図形の情報を抜き出して使う - memo88
5位 kairo-gokko 製作メモ - memo88
6位 Ruby/Racc: パースに失敗した位置(行、桁)を得る - memo88
7位 素朴な自作言語のコンパイラをGoに移植した - memo88
8位 kairo-gokko (35) 1bit CPU 2 - memo88
9位 kairo-gokko (34) 1bit CPU 1 - memo88
10位 素朴な自作言語のコンパイラをPHPに移植した - memo88
11位 HiveQL テスト 自動化 メモ - memo88
12位 kairo-gokko (33) Dフリップフロップ 2 - memo88
13位 DockerでDigdagサーバを動かす(クライアントの簡単な動作確認用、PostgreSQL不使用) - memo88
14位 素朴な自作言語のコンパイラをPerlに移植した - memo88
15位 素朴な自作言語のコンパイラをCに移植した - memo88
16位 失敗したタスクの情報をdigdagコマンドとシェルスクリプトで取得する - memo88
17位 Ubuntu 18.04にJupyter NotebookとIRubyをインストール(pyenv, rbenv を使用) - memo88
18位 hive.server2.enable.doAs がよく分からなかったので Apache Bigtop で調べてみた - memo88
19位 素朴な自作言語のコンパイラをJavaに移植した - memo88
20位 正規表現エンジン(ロブ・パイクのバックトラック実装)をRubyで写経した - memo88
21位 素朴な自作言語のコンパイラをTypeScript(Deno)に移植した - memo88
22位 素朴な自作言語のコンパイラをDartに移植した - memo88
23位 素朴な自作言語のコンパイラをC♭に移植した - memo88
24位 素朴な自作言語のコンパイラをPythonに移植した - memo88

generated by 年間ブックマークランキングジェネレーター

素朴な自作言語のコンパイラをGoに移植した


移植一覧に戻る


やっつけなので汚いです。ライフゲームコンパイルが通ったのでヨシ、というレベルのものです。

github.com


移植元

memo88.hatenablog.com

ベースになっているバージョン: tag:50 のあたり

(2021-06-20 追記) ステップ60 の修正まで反映しました

メモ

  • Go は 3, 4 年前にちょっとしたCLIツールを作った程度
  • C の後だとすごい楽ちん
  • メソッドも便利
  • ほんとは練習のためにもっとスライスを使いたかったけど、あまり使わないままできあがってしまった

今回の実験コーナー。

これまで Dart への移植 のときに set を不要にし、 Java への移植 のときに call を不要にし、 Perl への移植 のときに call_set を不要にしてきました。

今回はこれらを全部適用して、さらに Python への移植 のときにやった、 Ruby っぽい見た目への変更も加えました。

trial ブランチ でやってみました。

vgコードはこんな感じ。 var を除けばこれはもう Ruby ですね。

def calc_next_gen(current_val, count)
  # 注目しているセルの次世代の生死
  var next_val = 0;

  case
  when (current_val == 0)
    case
    when (count == 3)
      next_val = 1;
    end
  when (0 == 0)
    case
    when (count == 2)
      next_val = 1;
    when (count == 3)
      next_val = 1;
    end
  end
  
  return next_val;
end

def main()
  var w = 5; # 盤面の幅
  var h = 5; # 盤面の高さ

  # 初期状態の設定
  vram_set(w, 1, 0, 1);
  vram_set(w, 2, 1, 1);
  vram_set(w, 0, 2, 1);
  vram_set(w, 1, 2, 1);
  vram_set(w, 2, 2, 1);

  var gen_limit = 0;
  var gen = 1;
  while (gen != gen_limit)
    make_next_gen(w, h);
    replace_with_buf();
    gen = gen + 1;
  end
end