
Pocketlang - это легкий (~ 3000 полуколонов) и быстро ориентированный объект, встроенный язык сценариев, написанный на C. У него есть рубиновый синтаксис питона, который можно узнать в течение 15 минут. Включая компилятор, виртуальную машину Bytecode и время выполнения, это автономный исполняемый файл с нулевыми внешними зависимостями так же, как и самоописательное имя. Pocketlang VM может быть очень легко встроена в другую программу хостинга.
Язык Рена и их замечательные переводчики книги использовались в качестве ссылки на написание этого языка.
# 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 в своем браузере. Это сборка webassembly виртуальной машины, составленной с использованием emscripten. Обратите внимание, что в версии языка Webassembly некоторые функции (ввод, обработка файлов, относительный импорт и т. Д.) Имеют ограниченное распределение памяти, а вызовы STDOUT могут быть медленными.
Документация Pocketlang размещена по адресу https://thakeenathees.github.io/pocketlang/, которая построена из ветви docs , сгенерированного небольшим сценарием Python в docs/generate.py . Обратите внимание, что документации являются WIP и могут не обновлены.
Pocketlang использует Nan-Boxing, что является эффективным для памяти, чтобы представлять динамические типы, и дело с ними намного быстрее. Он поддерживает оптимизацию хвостовых вызовов. Когда функция возвращает вызов, Callee может повторно использовать кадр стека вызывающего абонента, это оптимизирует память от O (n) до O (1) и для хвостового рекурсивного, он полностью предотвратит StackOverflows, и все же она быстрее.
Все тесты, приведенные ниже, были выполнены на: Windows10 (64Bit), ASUS N552VX, Intel Core I7-6700HQ 2,6 ГГц с 12 ГБ Sodimm Ram. И языковые версии: Pocketlang (Pre-Alpha), 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
Чтобы запустить файл Make в Windows с помощью mingw , вам требуется make , который можно получить от MSYS2 или Cygwin.
scriptsbuild.bat
Вам не нужно запускать сценарий из командной строки Visual Studio .net Developer, он будет искать путь установки MSVS и настраивать среду сборки.
src/include , чтобы включить путь.Файлы проекта Visual Studio могут быть сгенерированы с помощью Premake, см. Scripts/Readme для получения дополнительной информации. Если вы не смогли скомпилировать его, сообщите нам, открыв вопрос.
Боб Нистрем. (2021 )
Марк У. Бейли, Натан С. Уэстон (июнь 2001 г.) Технический отчет. Преимущества производительности от удаления хвостовой рекурсии на процедурных языках [онлайн] доступны по адресу http://cs.hamilton.edu/~mbailey/pubs/techreps/tr-2001-2.pdf
Роберто Иерусалимсши, Луис Энрике де Фигейредо, Вальдемер Келес закрывает в Луа [PDF] по адресу https://www.cs.tufts.edu/~nr/cs257/archive/roberto-ierusalimschy/closures-draft.pdf (acksed 2022))))).
Leonard Schütz. (2020) Динамическое типинг и NAN Boxing [Online] Доступны по адресу https://leonardschuetz.ch/blog/nan-boxing/ (по состоянию на декабрь 2020 г.)
Боб Нистрем. (2011) Пратт Парсерс: Расположение выражения сделало простой [онлайн] охватываемым по адресу http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/ (по состоянию на декабрь 2020 г.)