本に存在するプログラミング言語:Monkey



Programming Language That Exists Books

背景紹介

タイトル:Monkey本にあるプログラミング言語
元のリンク

この記事を最初に読んだとき、噂の番組についての記事だと思いました。 「モンキー」と呼ばれるプログラミング言語はどのように存在するのでしょうか。ちょっと探してみたら、私は無知で、そんな言葉があります。タイトルの通り、これは本にあるプログラミング言語なので、知っている人はほとんどいません。



Androidシステムに付属のMonkeyプログラム、MonkeyRunnerなど、名前にMonkeysが含まれるプログラムもいくつかありますが、これらはこの記事で説明する概念ではありません。モンキーはJavaScriptに似た言語であり、なぜ人気がないのかは不明です。

この記事を読んだ後、Monkeyはまだ非常に新しい言語だと感じています。単独で実装する必要があります。学習者はそれをインタプリタ言語として実装できます。また、バイトコードと仮想マシンに基づいて構築することもできます。主に学習や勉強に使用できます。あなたがその言語を理解することができれば、あなたはあなた自身で新しい言語を発明するかもしれません!



モンキーとは?

Monkeyは、Goでのインタプリタの記述とGoでのコンパイラの記述を読んで自分で構築できるプログラミング言語です。

モンキーはあなたが読むことができるプログラミング言語です 「Goでインタプリタを書く」「Goでコンパイラを書く」 これらの2冊の本はあなた自身で猿の言語を構築することです。

現在、Monkey言語は正式に実装されていません。それは本の中に存在し、それを達成するのは完全にあなたと読者次第です。ツリーインタプリタとして、またはバイトコードコンパイラと仮想マシンとして実装できます。 (追加の理解:翻訳者は、これが、JSとしてのインタプリタ、またはJavaのような仮想マシンのバイトコードに基づいて、Monkeyによって作成されたプログラムがどのように機能するかを考えています。)



通常、Monkey言語で記述されたコードは次のようになります。

// numeric or mathematical expression... let version = 1 + (50 / 2) - (8 * 3) // ... string definition let name = 'The Monkey programming language' // ... Boolean definition let isMonkeyFastNow = true // ... array and hash map let people = [{'name': 'Anna', 'age': 24}, {'name': 'Bob', 'age': 99}]

関数を定義することもできます。

// User-defined functions... let getName = fn(person) { person['name'] } getName(people[0]) // => 'Anna' getName(people[1]) // => 'Bob' // and built-in functions puts(len(people)) // prints: 2

また、条件分岐、明示的または暗黙的な戻り値、再帰関数などがあります。これは、Monkeyで次のように記述できることを意味します。

let fibonacci = fn(x) { if (x == 0) { 0 } else { if (x == 1) { return 1 } else { fibonacci(x - 1) + fibonacci(x - 2) } } }

ただし、Monkeyの実装ごとに、その宝物はクロージャです。

// `newAdder` returns a closure that makes use of the free variables `a` and `b`: let newAdder = fn(a, b) { fn(c) { a + b + c } } // This constructs a new `adder` function: let adder = newAdder(1, 2) adder(8) // => 11

モンキースタンダード

「Goでインタプリタを書く」 2016年に公開された最新バージョンは、2019年にバージョン番号1.6でリリースされました。

Monkey標準の最初の本は、Monkeyの構文を定義し、ツリーインタープリターとして含める必要のある機能について説明しています。

  1. 数値、ブール、文字列、配列、およびハッシュマップ
  2. インタラクティブパーサーであるREPL(フルネーム:Read-eval-print-loop)
  3. 数式
  4. 1つのクラス以上の関数
  5. 内蔵機能
  6. 再帰的
  7. 閉鎖

失われた章:モンキーマクロシステム この本は、GoでMonkeyインタープリターを作成する方法を人々に教えるための無料のリポジトリとして2017年にリリースされました。それは次のように考えることができます 「Goでインタプリタを書く」 この本の第5章の内容は、前の4つの章に直接基づいており、本の最後にあるモンキー通訳を拡張しているためです。

失われた章:モンキーマクロシステム Elixirのマクロシステムと非常に緊密に連携する「全天候型」のLispスタイルのマクロシステムをMonkeyに追加しました。

「Goでコンパイラを書く」 2018年にリリースされ、最新バージョンは2019年に新しくなった1.1です。 「Goでインタプリタを書く」 この本は、文法を変更せず、新しい機能を追加しないため、同等です。これは、Monkeyの実装をトラバーサルツリーインタープリターからバイトコードコンパイラと仮想マシンに変更するだけです。言語をインタプリタ言語(JavaScriptなど)からバイトコード(Javaなど)に変換するのと似ています。

本の終わりから、速度が3倍以上増加することに加えて、Monkeyのパフォーマンスと動作は、本の最後にある「Write a InterpreterinGo」の説明と同じです。

世界中のサルファン

この本を読むとき、一部の読者は回り道をするのが好きです:異なる実装言語、いくつかの新機能、いくつかの文法の変更。この本に示されているコードはMITによってライセンスされているため、誰もが望むように独自のMonkey実装を作成し、世界中の人々に提示します。

これが私と共有するいくつかの面白くてかっこいいMonkey実装者です。
独自のバージョンのMonkeyを作成しましたか?私に知らせてください、ちょうど私に電子メールを送ってください、私の電子メールは:私@ thorstenball.com

その他の実装プロジェクト: