1. Mal هو مترجم Lisp مستوحى من Clojure
2. مال هي أداة تعليمية
يتم فصل كل تطبيق لـ mal إلى 11 خطوة إضافية ومكتفية بذاتها (وقابلة للاختبار) توضح المفاهيم الأساسية لـ Lisp. الخطوة الأخيرة قادرة على الاستضافة الذاتية (تشغيل تطبيق mal لـ mal). راجع دليل عملية صنع اللثغة.
خطوات صنع اللثغة هي:
كل خطوة من خطوات صنع اللثغة لها مخطط معماري مرتبط بها. يتم تمييز العناصر الجديدة لهذه الخطوة باللون الأحمر. إليك البنية النهائية بمجرد اكتمال الخطوة أ:
إذا كنت مهتمًا بإنشاء تطبيق ضار (أو مهتم فقط باستخدام mal لشيء ما)، فنحن نرحب بك للانضمام إلى Discord الخاص بنا. بالإضافة إلى دليل عملية make-a-lisp هناك أيضًا الأسئلة الشائعة حول mal/make-a-lisp حيث أحاول الإجابة على بعض الأسئلة الشائعة.
3. يتم تنفيذ Mal في 88 لغة (94 تطبيقًا مختلفًا و117 وضعًا لوقت التشغيل)
لغة | الخالق |
---|---|
آدا | كريس مور |
أدا رقم 2 | نيكولا بولينجويز |
جنو أوك | ميتسورو كاريا |
باش 4 | جويل مارتن |
الأساسية (C64 وQBasic) | جويل مارتن |
بي بي سي الأساسية V | بن هاريس |
ج | جويل مارتن |
ج #2 | دنكان واتس |
سي ++ | ستيفن ثيرلوال |
ج# | جويل مارتن |
تشاك | فاسيليج شنايدرمان |
كلوجر (كلوجر وكلوجرسكريبت) | جويل مارتن |
كوفي سكريبت | جويل مارتن |
اللثغة المشتركة | إقبال الأنصاري |
كريستال | Linda_pp |
د | دوف موريك |
دارت | هاري تيركلسن |
إكسير | مارتن إيك |
الدردار | جوس فان باكيل |
ايماكس ليسب | فاسيليج شنايدرمان |
إرلانج | ناثان فيدلر |
ES6 (ECMAScript 2015) | جويل مارتن |
و # | بيتر ستيفنز |
عامل | جوردان لويس |
فانتوم | دوف موريك |
الشمر | sogaiu |
رابعا | كريس هاوسر |
غنو غيل | مو لي |
غنو سمول توك | فاسيليج شنايدرمان |
يذهب | جويل مارتن |
رائع | جويل مارتن |
هاسكل | جويل مارتن |
هاكس (نيكو، بايثون، C++، وJS) | جويل مارتن |
هاي | جويل مارتن |
آيو | دوف موريك |
جانيت | sogaiu |
جافا | جويل مارتن |
جافا الكمأة (الكمأة / GraalVM) | مات ماكجيل |
جافا سكريبت (تجريبي) | جويل مارتن |
jq | علي محمد بور |
جوليا | جويل مارتن |
كوتلين | خافيير فرنانديز-إيفرن |
لاتيكس3 | نيكولا بولينجويز |
لايف سكريبت | جوس فان باكيل |
الشعار | دوف موريك |
لوا | جويل مارتن |
صنع جنو | جويل مارتن |
مال نفسها | جويل مارتن |
ماتلاب (جنو أوكتاف و MATLAB) | جويل مارتن |
مينيمال (الريبو، التجريبي) | جويل مارتن |
ناسم | بن دودسون |
نيم | دينيس فيلسينج |
كائن باسكال | جويل مارتن |
الهدف ج | جويل مارتن |
أوكامل | كريس هاوسر |
بيرل | جويل مارتن |
بيرل 6 | هنريك أورن سيجورسون |
PHP | جويل مارتن |
بيكوليسب | فاسيليج شنايدرمان |
رمح | دوف موريك |
بل/pgSQL (بوستغريسكل) | جويل مارتن |
بل/سكل (أوراكل) | جويل مارتن |
بوستسكريبت | جويل مارتن |
بوويرشيل | جويل مارتن |
مقدمة | نيكولا بولينجويز |
بيورسكريبت | com.mrsekut |
بايثون2 | جويل مارتن |
بايثون3 | جافين لويس |
آر بايثون | جويل مارتن |
ر | جويل مارتن |
مضرب | جويل مارتن |
ريكس | دوف موريك |
روبي | جويل مارتن |
روبي رقم 2 | ريان كوك |
الصدأ | جويل مارتن |
سكالا | جويل مارتن |
مخطط (R7RS) | فاسيليج شنايدرمان |
انحراف | دوف موريك |
مل القياسية | فابيان بيرجستروم |
سويفت 3 | جويل مارتن |
سويفت 4 | 陆遥 |
سويفت 6 | أوليغ مونتاك |
تي سي ال | دوف موريك |
تايب سكريبت | ماساهيرو واكامي |
فالا | سيمون تاثام |
VHDL | دوف موريك |
فيمسكريبت | دوف موريك |
فيجوال بيسك.نت | جويل مارتن |
البرنامج النصي فيجوال بيسك | شكرا جزيلا |
تجميع الويب (واسم) | جويل مارتن |
النمنمة | دوف موريك |
XSLT | علي محمد بور |
يوريك | دوف موريك |
منعرج | جوش توبين |
تم تقديم Mal علنًا لأول مرة في حديث خاطف في Clojure West 2014 (للأسف لا يوجد فيديو). انظر الأمثلة/clojurewest2014.mal للاطلاع على العرض التقديمي الذي تم تقديمه في المؤتمر (نعم، العرض التقديمي عبارة عن برنامج mal).
في Midwest.io 2015، قدم جويل مارتن عرضًا تقديميًا عن Mal بعنوان "الإنجاز مفتوح: طريق أفضل لتعلم اللغة". فيديو، شرائح.
في الآونة الأخيرة، قدم جويل عرضًا تقديميًا حول "إنشاء مترجم Lisp الخاص بك في 10 خطوات إضافية" في LambdaConf 2016: الجزء 1، الجزء 2، الجزء 3، الجزء 4، الشرائح.
إن أبسط طريقة لتشغيل أي تطبيق معين هي استخدام عامل الإرساء. يحتوي كل تطبيق على صورة عامل إرساء تم إنشاؤها مسبقًا مع تثبيت تبعيات اللغة. يمكنك تشغيل REPL باستخدام هدف مناسب في Makefile ذو المستوى الأعلى (حيث يكون IMPL هو اسم دليل التنفيذ وstepX هي الخطوة التي سيتم تشغيلها):
make DOCKERIZE=1 "repl^IMPL^stepX"
# OR stepA is the default step:
make DOCKERIZE=1 "repl^IMPL"
يتم الاحتفاظ بالتطبيقات التالية كمشاريع منفصلة:
تم تطوير تطبيق Ada باستخدام GNAT 4.9 على نظام دبيان. كما أنه يتم تجميعه دون تغيير على نظام التشغيل windows إذا كان لديك إصدارات Windows من git وGNAT و(اختياريًا). لا توجد تبعيات خارجية (لم يتم تنفيذ خط القراءة).
cd impls/ada
make
./stepX_YYY
تم تطوير تطبيق Ada الثاني باستخدام GNAT 8 وروابط مع مكتبة GNU readline.
cd impls/ada
make
./stepX_YYY
تم اختبار تنفيذ GNU awk لـ mal باستخدام GNU awk 4.1.1.
cd impls/gawk
gawk -O -f stepX_YYY.awk
cd impls/bash
bash stepX_YYY.sh
يستخدم تطبيق BASIC معالجًا مسبقًا يمكنه إنشاء تعليمات برمجية أساسية متوافقة مع كل من C64 BASIC (CBM v2) أو QBasic. تم اختبار وضع C64 باستخدام cbmbasic (الإصدار المصحح مطلوب حاليًا لإصلاح مشكلات إدخال الخط) وتم اختبار وضع QBasic باستخدام FreeBASIC.
قم بإنشاء كود C64 وتشغيله باستخدام cbmbasic:
cd impls/basic
make MODE=cbm stepX_YYY.bas
STEP=stepX_YYY basic_MODE=cbm ./run
قم بإنشاء تعليمات برمجية QBasic وتجميعها باستخدام FreeBASIC وتنفيذها:
cd impls/basic
make MODE=qbasic stepX_YYY.bas
make MODE=qbasic stepX_YYY
./stepX_YYY
شكرًا لستيفن سيريك على الإلهام الأصلي لهذا التنفيذ.
يمكن تشغيل تطبيق BBC BASIC V في مترجم براندي:
cd impls/bbc-basic
brandy -quit stepX_YYY.bbc
أو في ARM BBC BASIC V ضمن RISC OS 3 أو الأحدث:
*Dir bbc-basic.riscos
*Run setup
*Run stepX_YYY
يتطلب تنفيذ لغة C لـ mal المكتبات التالية (حزم lib وheader): glib، وlibffi6، وlibgc، وإما مكتبة libedit أو مكتبة GNU readline.
cd impls/c
make
./stepX_YYY
يتطلب تطبيق C الثاني لـ mal المكتبات التالية (حزم lib وheader): libedit، وlibgc، وlibdl، وlibffi.
cd impls/c.2
make
./stepX_YYY
يتطلب تنفيذ C++ لـ mal إنشاء g++-4.9 أو clang++-3.5 ومكتبة متوافقة مع readline. راجع cpp/README.md
لمزيد من التفاصيل:
cd impls/cpp
make
# OR
make CXX=clang++-3.5
./stepX_YYY
تم اختبار تطبيق C# لـ mal على Linux باستخدام برنامج التحويل البرمجي Mono C# (mcs) ووقت تشغيل Mono (الإصدار 2.10.8.1). كلاهما مطلوب لبناء وتشغيل تطبيق C#.
cd impls/cs
make
mono ./stepX_YYY.exe
تم اختبار تطبيق ChucK باستخدام ChucK 1.3.5.2.
cd impls/chuck
./run
بالنسبة للجزء الأكبر من تنفيذ Clojure يتطلب Clojure 1.5، ومع ذلك، لاجتياز جميع الاختبارات، مطلوب Clojure 1.8.0-RC4.
cd impls/clojure
lein with-profile +stepX trampoline run
sudo npm install -g coffee-script
cd impls/coffee
coffee ./stepX_YYY
تم اختبار التنفيذ باستخدام SBCL وCCL وCMUCL وGNU CLISP وECL وAllegro CL على Ubuntu 16.04 وUbuntu 12.04، راجع الملف التمهيدي لمزيد من التفاصيل. بشرط تثبيت التبعيات المذكورة، قم بما يلي لتشغيل التنفيذ
cd impls/common-lisp
make
./run
تم اختبار تنفيذ Crystal لـ mal باستخدام Crystal 0.26.1.
cd impls/crystal
crystal run ./stepX_YYY.cr
# OR
make # needed to run tests
./stepX_YYY
تم اختبار تطبيق D لـ mal باستخدام GDC 4.8. يتطلب مكتبة GNU readline.
cd impls/d
make
./stepX_YYY
تم اختبار تطبيق Dart باستخدام Dart 1.20.
cd impls/dart
dart ./stepX_YYY
تم اختبار تنفيذ Emacs Lisp لـ mal باستخدام Emacs 24.3 و24.5. في حين أن هناك عمليات تحرير أساسية جدًا لسطر القراءة ( <backspace>
وعمل Cd
، فإن Cc
تلغي العملية)، فمن المستحسن استخدام rlwrap
.
cd impls/elisp
emacs -Q --batch --load stepX_YYY.el
# with full readline support
rlwrap emacs -Q --batch --load stepX_YYY.el
تم اختبار تطبيق Elixir لـ mal باستخدام Elixir 1.0.5.
cd impls/elixir
mix stepX_YYY
# Or with readline/line editing functionality:
iex -S mix stepX_YYY
تم اختبار تنفيذ Elm لـ mal باستخدام Elm 0.18.0
cd impls/elm
make stepX_YYY.js
STEP=stepX_YYY ./run
يتطلب تنفيذ Erlang لـ mal إنشاء Erlang/OTP R17 وحديد التسليح.
cd impls/erlang
make
# OR
MAL_STEP=stepX_YYY rebar compile escriptize # build individual step
./stepX_YYY
يستخدم تطبيق ES6 / ECMAScript 2015 مترجم babel لإنشاء JavaScript متوافق مع ES5. تم اختبار الكود الذي تم إنشاؤه باستخدام Node 0.12.4.
cd impls/es6
make
node build/stepX_YYY.js
تم اختبار تنفيذ F# لـ mal على Linux باستخدام مترجم Mono F# (fsharpc) ووقت التشغيل Mono (الإصدار 3.12.1). يعد برنامج التحويل البرمجي mono C# (mcs) ضروريًا أيضًا لتجميع تبعية readline. الكل مطلوب لبناء وتشغيل تطبيق F#.
cd impls/fsharp
make
mono ./stepX_YYY.exe
تم اختبار تنفيذ عامل mal باستخدام العامل 0.97 (factorcode.org).
cd impls/factor
FACTOR_ROOTS=. factor -run=stepX_YYY
تم اختبار تطبيق Fantom لـ mal باستخدام Fantom 1.0.70.
cd impls/fantom
make lib/fan/stepX_YYY.pod
STEP=stepX_YYY ./run
تم اختبار تنفيذ Fennel لـ mal باستخدام إصدار Fennel 0.9.1 على Lua 5.4.
cd impls/fennel
fennel ./stepX_YYY.fnl
cd impls/forth
gforth stepX_YYY.fs
cd impls/guile
guile -L ./ stepX_YYY.scm
تم اختبار تطبيق Smalltalk لـ mal باستخدام GNU Smalltalk 3.2.91.
cd impls/gnu-smalltalk
./run
يتطلب تنفيذ Go لـ mal تثبيت go على المسار. تم اختبار التنفيذ باستخدام Go 1.3.1.
cd impls/go
make
./stepX_YYY
يتطلب تطبيق Groovy لـ mal تشغيل Groovy وقد تم اختباره باستخدام Groovy 1.8.6.
cd impls/groovy
make
groovy ./stepX_YYY.groovy
يتطلب تطبيق Haskell إصدار برنامج التحويل البرمجي ghc 7.10.1 أو إصدار أحدث وكذلك حزم Haskell parsec وreadline (أو خط التحرير).
cd impls/haskell
make
./stepX_YYY
يتطلب تطبيق Haxe لـ mal إصدار Haxe 3.2 لتجميعه. يتم دعم أربعة أهداف Haxe مختلفة: Neko وPython وC++ وJavaScript.
cd impls/haxe
# Neko
make all-neko
neko ./stepX_YYY.n
# Python
make all-python
python3 ./stepX_YYY.py
# C++
make all-cpp
./cpp/stepX_YYY
# JavaScript
make all-js
node ./stepX_YYY.js
تم اختبار تطبيق Hy لـ mal باستخدام Hy 0.13.0.
cd impls/hy
./stepX_YYY.hy
تم اختبار تطبيق Io لـ mal باستخدام إصدار Io 20110905.
cd impls/io
io ./stepX_YYY.io
تم اختبار تطبيق Janet لـ mal باستخدام الإصدار 1.12.2 من Janet.
cd impls/janet
janet ./stepX_YYY.janet
يتطلب تنفيذ Java لـ mal إنشاء maven2.
cd impls/java
mvn compile
mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY
# OR
mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY -Dexec.args="CMDLINE_ARGS"
سيتم تشغيل تطبيق Java هذا على OpenJDK، ولكن يمكن تشغيله بشكل أسرع بما يصل إلى 30 مرة على GraalVM بفضل إطار عمل Truffle. لقد تم اختباره باستخدام OpenJDK 11 وGraalVM CE 20.1.0 وGraalVM CE 21.1.0.
cd impls/java-truffle
./gradlew build
STEP=stepX_YYY ./run
cd impls/js
npm install
node stepX_YYY.js
يتطلب تطبيق Julia لـ mal جوليا 0.4.
cd impls/julia
julia stepX_YYY.jl
تم اختباره مقابل الإصدار 1.6، مع الكثير من الغش في قسم الإدخال/الإخراج
cd impls/jq
STEP=stepA_YYY ./run
# with Debug
DEBUG=true STEP=stepA_YYY ./run
تم اختبار تطبيق Kotlin لـ mal باستخدام Kotlin 1.0.
cd impls/kotlin
make
java -jar stepX_YYY.jar
تم اختبار تطبيق LaTeX3 لـ mal باستخدام pdfTeX 3.141592653-2.6-1.40.24.
الاستضافة الذاتية بطيئة للغاية بالنسبة لأي مهلة معقولة، وتتعطل في الخطوة 4، على ما يبدو بسبب القيود المضمنة.
يجب على أي شخص يعمل على ذلك إلغاء التعليق على السطرين من خيارات التصحيح (البطيئة) في ملف الخطوة، وتصدير DEBUG=1 (للحصول على مخرجات أكثر مما تقبله الاختبارات).
تم اختبار تطبيق LiveScript لـ mal باستخدام LiveScript 1.5.
cd impls/livescript
make
node_modules/.bin/lsc stepX_YYY.ls
تم اختبار تطبيق الشعار الخاص بـ mal باستخدام UCBLogo 6.0.
cd impls/logo
logo stepX_YYY.lg
تم اختبار تنفيذ Lua لـ mal باستخدام Lua 5.3.5 ويتطلب التنفيذ تثبيت luarock.
cd impls/lua
make # to build and link linenoise.so and rex_pcre.so
./stepX_YYY.lua
يتضمن تشغيل تطبيق mal لـ mal تشغيل الخطوة A لأحد التطبيقات الأخرى وتمرير خطوة mal للتشغيل كوسيطة سطر أوامر.
cd impls/IMPL
IMPL_STEPA_CMD ../mal/stepX_YYY.mal
cd impls/make
make -f stepX_YYY.mk
تمت كتابة تطبيق NASM لـ mal لنظام التشغيل x86-64 Linux، وتم اختباره باستخدام Linux 3.16.0-4-amd64 وNASM الإصدار 2.11.05.
cd impls/nasm
make
./stepX_YYY
تم اختبار تطبيق Nim لـ mal باستخدام Nim 1.0.4.
cd impls/nim
make
# OR
nimble build
./stepX_YYY
تم إنشاء تطبيق Object Pascal لـ mal واختباره على Linux باستخدام إصدار مترجم Free Pascal 2.6.2 و2.6.4.
cd impls/objpascal
make
./stepX_YYY
تم إنشاء تطبيق Objective C لـ mal واختباره على Linux باستخدام clang/LLVM 3.6. كما تم بناؤه واختباره على نظام التشغيل OS X باستخدام Xcode 7.
cd impls/objc
make
./stepX_YYY
cd impls/ocaml
make
./stepX_YYY
تم اختبار تطبيق MatLab باستخدام GNU Octave 4.2.1. وقد تم اختباره أيضًا باستخدام إصدار MATLAB R2014a على Linux. لاحظ أن MATLAB منتج تجاري.
cd impls/matlab
./stepX_YYY
octave -q --no-gui --no-history --eval "stepX_YYY();quit;"
matlab -nodisplay -nosplash -nodesktop -nojvm -r "stepX_YYY();quit;"
# OR with command line arguments
octave -q --no-gui --no-history --eval "stepX_YYY('arg1','arg2');quit;"
matlab -nodisplay -nosplash -nodesktop -nojvm -r "stepX_YYY('arg1','arg2');quit;"
miniMAL هو مترجم Lisp صغير يتم تنفيذه بأقل من 1024 بايت من JavaScript. لتشغيل تطبيق miniMAL لـ mal، يلزمك تنزيل/تثبيت مترجم miniMAL (الذي يتطلب Node.js).
cd impls/miniMAL
# Download miniMAL and dependencies
npm install
export PATH=`pwd`/node_modules/minimal-lisp/:$PATH
# Now run mal implementation in miniMAL
miniMAL ./stepX_YYY
يجب أن يعمل تطبيق Perl 5 مع Perl 5.19.3 والإصدارات الأحدث.
للحصول على دعم تحرير سطر readline، قم بتثبيت Term::ReadLine::Perl أو Term::ReadLine::Gnu من CPAN.
cd impls/perl
perl stepX_YYY.pl
تم اختبار تطبيق Perl 6 على Rakudo Perl 6 2016.04.
cd impls/perl6
perl6 stepX_YYY.pl
يتطلب تنفيذ PHP لـ mal واجهة سطر أوامر php للتشغيل.
cd impls/php
php stepX_YYY.php
يتطلب تطبيق Picolisp libreadline وPicolisp 3.1.11 أو إصدار أحدث.
cd impls/picolisp
./run
تم اختبار تطبيق Pike على Pike 8.0.
cd impls/pike
pike stepX_YYY.pike
يتطلب تنفيذ PL/pgSQL لـ mal خادم PostgreSQL قيد التشغيل (تبدأ صورة عامل الإرساء "kanaka/mal-test-plpgsql" تلقائيًا خادم PostgreSQL). يتصل التنفيذ بخادم PostgreSQL وينشئ قاعدة بيانات باسم "mal" لتخزين الجداول والإجراءات المخزنة. يستخدم البرنامج النصي المجمع الأمر psql للاتصال بالخادم ويكون افتراضيًا للمستخدم "postgres" ولكن يمكن تجاوز ذلك باستخدام متغير البيئة PSQL_USER. يمكن تحديد كلمة مرور باستخدام متغير البيئة PGPASWORD. تم اختبار التنفيذ باستخدام PostgreSQL 9.4.
cd impls/plpgsql
./wrap.sh stepX_YYY.sql
# OR
PSQL_USER=myuser PGPASSWORD=mypass ./wrap.sh stepX_YYY.sql
يتطلب تنفيذ PL/SQL لـ mal خادم Oracle DB قيد التشغيل (تبدأ صورة عامل الإرساء "kanaka/mal-test-plsql" تلقائيًا تشغيل خادم Oracle Express). يتصل التنفيذ بخادم Oracle لإنشاء الأنواع والجداول والإجراءات المخزنة. قيمة تسجيل الدخول الافتراضية لـ SQL*Plus (اسم المستخدم/password@connect_identifier) هي "system/Oracle" ولكن يمكن تجاوز ذلك باستخدام متغير البيئة ORACLE_LOGON. تم اختبار التنفيذ باستخدام Oracle Express Edition 11g Release 2. لاحظ أن أي تحذيرات بشأن اتصال SQL*Plus (انتهاء صلاحية كلمة مرور المستخدم، وما إلى ذلك) سوف تتداخل مع قدرة البرنامج النصي المجمّع على الاتصال بقاعدة البيانات.
cd impls/plsql
./wrap.sh stepX_YYY.sql
# OR
ORACLE_LOGON=myuser/mypass@ORCL ./wrap.sh stepX_YYY.sql
يتطلب تنفيذ PostScript لـ mal تشغيل Ghostscript. لقد تم اختباره مع Ghostscript 9.10.
cd impls/ps
gs -q -dNODISPLAY -I./ stepX_YYY.ps
يتطلب تنفيذ PowerShell لـ mal لغة البرنامج النصي PowerShell. لقد تم اختباره باستخدام PowerShell 6.0.0 Alpha 9 على Linux.
cd impls/powershell
powershell ./stepX_YYY.ps1
يستخدم تطبيق Prolog بعض البنيات الخاصة بـ SWI-Prolog، ويتضمن دعم readline وقد تم اختباره على Debian GNU/Linux مع الإصدار 8.2.1.
cd impls/prolog
swipl stepX_YYY
يتطلب تطبيق PureScript إصدار برنامج التحويل البرمجي spago 0.20.2.
cd impls/purs
make
node ./stepX_YYY.js
يستخدم هذا التطبيق ميزات python2 فقط، ولكنه يتجنب عدم التوافق مع python3.
يتم التحقق من هذا التنفيذ بحثًا عن النمط والأنواع (flake8، pylint، mypy). ويبلغ عن جميع الأخطاء مع التفاصيل. إنه يوضح التكرارات، والديكورات، والأدوات الوظيفية، وخرائط السلسلة، وفئات البيانات، والاستبطان، وبيانات المطابقة، وتعبيرات التخصيص.
يجب أن يكون لديك rpython في طريقك (مضمن مع pypy).
cd impls/rpython
make # this takes a very long time
./stepX_YYY
يتطلب تنفيذ R لـ mal تشغيل R (r-base-core).
cd impls/r
make libs # to download and build rdyncall
Rscript stepX_YYY.r
يتطلب تطبيق Racket لـ mal تشغيل مترجم/مترجم Racket.
cd impls/racket
./stepX_YYY.rkt
تم اختبار تطبيق Rexx لـ mal باستخدام Regina Rexx 3.6.
cd impls/rexx
make
rexx -a ./stepX_YYY.rexxpp
cd impls/ruby
ruby stepX_YYY.rb
تنفيذ روبي الثاني مع الأهداف التالية:
Mal
cd impls/ruby.2
ruby stepX_YYY.rb
يتطلب تنفيذ الصدأ لـ mal إنشاء مترجم الصدأ وأداة البناء (البضائع).
cd impls/rust
cargo run --release --bin stepX_YYY
تثبيت scala وsbt (http://www.scala-sbt.org/0.13/tutorial/Installing-sbt-on-Linux.html):
cd impls/scala
sbt 'run-main stepX_YYY'
# OR
sbt compile
scala -classpath target/scala*/classes stepX_YYY
تم اختبار تنفيذ مخطط MAL باستخدام Chibi-Scheme 0.10 وKawa 3.1.1 وGauche 0.9.6 وCHICKEN 5.1.0 وSagittarius 0.9.7 وCyclone 0.32.0 (إصدار Git) وFoment 0.4 (إصدار Git). يجب أن تكون قادرًا على تشغيله على تطبيقات R7RS المطابقة الأخرى بعد معرفة كيفية تحميل المكتبات وضبط Makefile
run
البرنامج النصي وفقًا لذلك.
cd impls/scheme
# chibi
scheme_MODE=chibi ./run
# kawa
make kawa
scheme_MODE=kawa ./run
# gauche
scheme_MODE=gauche ./run
# chicken
make chicken
scheme_MODE=chicken ./run
# sagittarius
scheme_MODE=sagittarius ./run
# cyclone
make cyclone
scheme_MODE=cyclone ./run
# foment
scheme_MODE=foment ./run
تم اختبار تطبيق Skew لـ mal باستخدام Skew 0.7.42.
cd impls/skew
make
node stepX_YYY.js
يتطلب تطبيق ML القياسي لـ mal تنفيذ SML97. يدعم Makefile Poly/ML، وMLton، وMoscow ML، وقد تم اختباره باستخدام Poly/ML 5.8.1، وMLton 20210117، وMoscow ML الإصدار 2.10.
cd impls/sml
# Poly/ML
make sml_MODE=polyml
./stepX_YYY
# MLton
make sml_MODE=mlton
./stepX_YYY
# Moscow ML
make sml_MODE=mosml
./stepX_YYY
يتطلب تنفيذ Swift 3 لـ mal مترجم Swift 3.0. لقد تم اختباره باستخدام Swift 3 Preview 3.
cd impls/swift3
make
./stepX_YYY
يتطلب تنفيذ Swift 4 لـ mal مترجم Swift 4.0. لقد تم اختباره مع إصدار Swift 4.2.3.
cd impls/swift4
make
./stepX_YYY
يتطلب تنفيذ Swift 5 لـ mal مترجم Swift 5.0. لقد تم اختباره مع إصدار Swift 5.1.1.
cd impls/swift6
swift run stepX_YYY
يتطلب تطبيق Tcl لـ mal تشغيل Tcl 8.6. للحصول على دعم تحرير سطر readline، قم بتثبيت tclreadline.
cd impls/tcl
tclsh ./stepX_YYY.tcl
يتطلب تنفيذ TypeScript لـ mal مترجم TypeScript 2.2. لقد تم اختباره باستخدام Node.js v6.
cd impls/ts
make
node ./stepX_YYY.js
تم اختبار تطبيق Vala لـ mal باستخدام برنامج التحويل البرمجي Vala 0.40.8. سوف تحتاج إلى تثبيت valac
و libreadline-dev
أو ما يعادلهما.
cd impls/vala
make
./stepX_YYY
تم اختبار تطبيق VHDL لـ mal باستخدام GHDL 0.29.
cd impls/vhdl
make
./run_vhdl.sh ./stepX_YYY
يتطلب تنفيذ Vimscript لـ mal تشغيل Vim 8.0.
cd impls/vimscript
./run_vimscript.sh ./stepX_YYY.vim
تم اختبار تطبيق VB.NET لـ mal على Linux باستخدام برنامج التحويل البرمجي Mono VB (vbnc) ووقت تشغيل Mono (الإصدار 2.10.8.1). كلاهما مطلوب لبناء وتشغيل تطبيق VB.NET.
cd impls/vb
make
mono ./stepX_YYY.exe
تم اختبار تطبيق VBScript لـ mal على نظام التشغيل Windows 10 1909. يمكن أن يساعدك install.vbs
في تثبيت المتطلبات (.NET 2.0 3.0 3.5). إذا لم تقم بتثبيت .NET 2.0 3.0 3.5
، فسوف تظهر لك نافذة للتثبيت. إذا قمت بتثبيت ذلك بالفعل، فلن يفعل شيئًا.
cd implsvbs
install.vbs
cscript -nologo stepX_YYY.vbs
تتم كتابة تطبيق WebAssembly بلغة Wam (لغة WebAssembly Macro) ويتم تشغيله تحت العديد من عمليات التضمين المختلفة غير المرتبطة بالويب (أوقات التشغيل): العقدة، Wasmtime، Wasmer، Wax، Wace، Warpy.
cd impls/wasm
# node
make wasm_MODE=node
./run.js ./stepX_YYY.wasm
# wasmtime
make wasm_MODE=wasmtime
wasmtime --dir=./ --dir=../ --dir=/ ./stepX_YYY.wasm
# wasmer
make wasm_MODE=wasmer
wasmer run --dir=./ --dir=../ --dir=/ ./stepX_YYY.wasm
# wax
make wasm_MODE=wax
wax ./stepX_YYY.wasm
# wace
make wasm_MODE=wace_libc
wace ./stepX_YYY.wasm
# warpy
make wasm_MODE=warpy
warpy --argv --memory-pages 256 ./stepX_YYY.wasm
تمت كتابة تطبيق XSLT لـ mal باستخدام XSLT 3 وتم اختباره على Saxon 9.9.1.6 Home Edition.
cd impls/xslt
STEP=stepX_YY ./run
تم اختبار تنفيذ Wren لـ mal على Wren 0.2.0.
cd impls/wren
wren ./stepX_YYY.wren
تم اختبار تطبيق Yorick لـ mal على Yorick 2.2.04.
cd impls/yorick
yorick -batch ./stepX_YYY.i
تم اختبار تنفيذ Zig لـ mal على Zig 0.5.
cd impls/zig
zig build stepX_YYY
يحتوي المستوى الأعلى Makefile على عدد من الأهداف المفيدة للمساعدة في تطوير التنفيذ واختباره. يوفر هدف help
قائمة بالأهداف والخيارات:
make help
يوجد ما يقرب من 800 اختبار وظيفي عام (لجميع التطبيقات) في دليل tests/
. تحتوي كل خطوة على ملف اختبار مطابق يحتوي على اختبارات خاصة بتلك الخطوة. يطلق أداة اختبار runtest.py
تنفيذ خطوة Mal ثم يغذي الاختبارات واحدة تلو الأخرى للتنفيذ ويقارن قيمة الإخراج/الإرجاع بقيمة الإخراج/الإرجاع المتوقعة.
make test
make "test^IMPL"
# e.g.
make "test^clojure"
make "test^js"
make "test^stepX"
# e.g.
make "test^step2"
make "test^step7"
make "test^IMPL^stepX"
# e.g
make "test^ruby^step3"
make "test^ps^step4"
mal
باعتباره تطبيق الاختبار واستخدام متغير MAL_IMPL
لتغيير لغة المضيف الأساسية (الافتراضي هو JavaScript): make MAL_IMPL=IMPL "test^mal^step2"
# e.g.
make "test^mal^step2" # js is default
make MAL_IMPL=ruby "test^mal^step2"
make MAL_IMPL=python3 "test^mal^step2"
make "repl^IMPL^stepX"
# e.g
make "repl^ruby^step3"
make "repl^ps^step4"
stepA
: make "repl^IMPL"
# e.g
make "repl^ruby"
make "repl^ps"
mal
باعتباره تطبيق REPL واستخدم متغير التكوين MAL_IMPL
لتغيير لغة المضيف الأساسية (الافتراضي هو JavaScript): make MAL_IMPL=IMPL "repl^mal^stepX"
# e.g.
make "repl^mal^step2" # js is default
make MAL_IMPL=ruby "repl^mal^step2"
make MAL_IMPL=python3 "repl^mal"
تحذير: اختبارات الأداء هذه ليست صالحة إحصائيًا وليست شاملة؛ أداء وقت التشغيل ليس هدفًا أساسيًا لـ mal. إذا توصلت إلى أي استنتاجات جدية من اختبارات الأداء هذه، فيرجى الاتصال بي بشأن بعض العقارات الرائعة المطلة على المحيط في كانساس والتي أرغب في بيعها لك بسعر رخيص.
make "perf^IMPL"
# e.g.
make "perf^js"
make "perf"
make "stats^IMPL"
# e.g.
make "stats^js"
يحتوي كل دليل تنفيذ على ملف Dockerfile لإنشاء صورة عامل إرساء تحتوي على جميع التبعيات لهذا التنفيذ. بالإضافة إلى ذلك، يحتوي ملف Makefile ذو المستوى الأعلى على دعم لتشغيل هدف الاختبارات (والأداء والإحصائيات وrepl وما إلى ذلك) داخل حاوية عامل إرساء لهذا التنفيذ عن طريق تمرير "DOCKERIZE=1" في سطر أوامر الإنشاء. على سبيل المثال:
make DOCKERIZE=1 "test^js^step3"
تحتوي التطبيقات الحالية بالفعل على صور عامل إرساء تم إنشاؤها ودفعها إلى سجل عامل الإرساء. ومع ذلك، إذا كنت ترغب في إنشاء صورة عامل إرساء أو إعادة بنائها محليًا، فإن Makefile ذو المستوى الأعلى يوفر قاعدة لبناء صور عامل الإرساء:
make "docker-build^IMPL"
ملحوظات :
make DOCKERIZE=1 "repl^IMPL"
قبل أن تتمكن من تشغيل الاختبارات لأن تبعيات وقت التشغيل تحتاج إلى التنزيل لتجنب انتهت مهلة الاختبارات. يتم تنزيل هذه التبعيات إلى ملفات نقطية في الدليل /mal بحيث تستمر بين عمليات التشغيل. Mal (make-a-lisp) مرخص بموجب MPL 2.0 (رخصة Mozilla العامة 2.0). راجع LICENSE.txt لمزيد من التفاصيل.