
Pocketlangは、Cで書かれた軽量(〜3000セミコロン)と高速オブジェクト指向の埋め込み可能なスクリプト言語です。15分以内に学習できるRuby FlasureのPython構文を備えています。コンパイラ、ByteCode VM、Runtimeを含む、セルフ記述名と同じように外部依存関係がゼロのスタンドアロン実行可能ファイルです。 Pocketlang VMは、別のホスティングプログラムに非常に簡単に埋め込むことができます。
Wren Languageと彼らの素晴らしい本のクラフト通訳者は、この言語を書くための参照として使用されました。
# Python like import statement.
from time import clock as now
# A recursive fibonacci function.
def fib ( n )
if n < 2 then return n end
return fib ( n - 1 ) + fib ( n - 2 )
end
# Prints all fibonacci from 0 to 10 exclusive.
for i in 0 .. 10
print ( "fib($i) = ${fib(i)}" )
end ブラウザでPocketLangを試すことができます。これは、emscriptenを使用してコンパイルされたVMのWebAssemblyビルドです。言語のWebAssemblyバージョンでは、一部の機能(入力、ファイル処理、相対インポートなど)が無効になり、メモリの割り当てが限られており、STDOUTコールが遅くなる可能性があることに注意してください。
Pocketlangドキュメントは、https://thakeenathees.github.io/pocketlang/でホストされています。これは、 docs/generate.pyの小さなpythonスクリプトによって生成されたdocsブランチから構築されています。ドキュメントはWIPであり、最新ではない可能性があることに注意してください。
Pocketlangは、動的なタイプを表現するためのメモリ効率的な方法であるNan-Boxingを使用しており、それらを処理することははるかに高速です。テールコールの最適化をサポートします。関数が呼び出しを返すと、Calleeは発信者のスタックフレームを再利用できます。これにより、メモリがO(n)からO(1)に最適化され、テール再帰の場合はスタックオーバーフローを完全に防止しますが、さらに速くなります。
以下のすべてのベンチマークは、Windows10(64bit)、Asus N552VX、Intel Core I7-6700HQ 2.6GHzで12GB Sodimm RAMで実行されました。言語バージョンは次のとおりです。ポケットラング(プレアルファ)、Wren V0.3.0、Python V3.7.4、Ruby V2.7.2。

ベンチマークの実行に使用されるソースファイルはtest/benchmarks/ディレクトリにあります。それらは、テストディレクトリの小さなPythonスクリプトを使用して実行されました。
依存関係なしで簡単にソースから構築できます。また、C99互換のコンパイラを除く追加の要件を構築できます。次のコマンドでコンパイルできます。
gcc -o pocket cli/*.c src/core/*.c src/libs/*.c -Isrc/include -lm -ldl
cl /Fepocket cli/*.c src/core/*.c src/libs/*.c /Isrc/include && rm *.obj
make
mingwを使用してWindowsでMakeファイルを実行するには、MSYS2またはCygwinから入手できるGNU makeツールが必要です。
scriptsbuild.bat
Visual Studio .NET Developerコマンドプロンプトからスクリプトを実行する必要はありません。MSVSインストールパスを検索してビルド環境をセットアップします。
src/includeを追加して、パスを含めます。Visual Studioプロジェクトファイルは、事前に生成できます。詳細については、スクリプト/READMEを参照してください。コンパイルできなかった場合は、問題を開いて報告してください。
Bob Nystrom。(2021) craftintenterpreters [オンライン] www.craftinterspreters.com/で入手可能(2021年1月アクセス)
マーク・W・ベイリー、ネイサン・C・ウェストン(2001年6月)技術報告。手続き言語での尾の再帰除去のパフォーマンスの利点[オンライン] http://cs.hamilton.edu/~mbailey/pubs/techreps/tr-2001-2.pdfで入手可能
Roberto Ierusalimschy、Luiz Henrique de Figueiredo、Waldemar Celes closures in Lua [PDF] https://www.cs.tufts.edu/~nr/cs257/archive/roberto-ierusalimschy/closures-draft.pdf
LeonardSchütz。(2020)ダイナミックタイピングとナンボクシング[オンライン] https://leonardschuetz.ch/blog/nan-boxing/で入手可能(2020年12月にアクセス)
Bob Nystrom。(2011) Pratt Parsers:http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/(2020年12月にアクセス)で簡単に[オンライン] Avaliableで簡単に作成された表現解析