Panda — это интерпретатор сценарного языка, основанный на JavaScript, но без некоторых грамматических особенностей.
Panda представляет собой легковесный язык, предназначенный для использования как интерпретатор встроенной аппаратуры.
Panda легко изучается.
Для выполнения ваших скриптов вам потребуется интерпретатор; есть несколько способов получить его:
После вывода привлекательного (или не очень) логотипа интерпретатор начинает ждать ввода пользователя. Вы можете ввести команды на языке Panda или JavaScript, и интерпретатор будет выполнять парсинг, компиляцию в байткод, интерпретацию и вывод результата в терминал.
Если вы используете интерактивный интерпретатор Panda, то выходные данные будут примерно следующими:
$ panda/repl
>
cd ваш_путь_к_рабочему_пространству
git clone https://github.com/cupkee/panda.git
Перед сборкой Panda вам потребуются компилятор GCC и библиотека readline.Шаги сборки:
make example
./.../panda/build/example/repl
— это наш требуемый интерактивный интерпретатор.Как видно из вышеописанного, интерактивный интерпретатор является всего лишь демонстрационным приложением.
Вы можете использовать panda в своих проектах в качестве интерпретатора конфигураций, командной строки или других целей.
Мне крайне необходимы ваши отзывы о найденных ошибках, чтобы постоянно совершенствовать программу.
Вы можете отправить ошибки двумя способами:
Panda представляет собой урезанную версию интерпретатора JavaScript с базовой грамматикой, аналогичной JavaScript, что делает её простой в освоении.
var a, b, c;
var a = 0, b, c = 'hello';
Отличия вычислений в panda от стандартного JavaScript При выполнении арифметических операций с различными типами данных, pandas не производит преобразование типов и всегда возвращает NaN (не число).
Операторы
> 1 + 1
2
> (10 + 5) * 3 / 5
9
> 1, 2, 3, 5 + 6
11
> 1 > 2
false
> 'hello' + 'world'
"helloworld"
> 'a1' < 'b2'
true
> 'hello' + 1
NaN
> 1 * 'hello'
NaN
...
Условие if используется для выбора различных ветвей исполнения в зависимости от условия.
if (true) {
// всегда выполняется
} else {
// никогда не выполняется
}
if (a > 100) {
...
}
Цикл while используется для повторного выполнения блока кода до тех пор, пока условие истинно.
while(a++ < 100) {
...
}
Инструкция break используется для выхода из цикла.
Инструкция continue используется для пропуска текущего шага цикла и перехода к следующему шагу.
Инструкция return используется для выхода из функции и может указывать значение для возврата.
В pandas расширены возможности определения функций по сравнению со стандартным JavaScript.
function fn() {
// statements ...
}
// Анонимная функция
var fn = function () {
// statements ...
}
def
как псевдоним для функции
.def fn() {
// statements ...
}
// Анонимная функция
var fn = def () {
}
При определении однострочных функций можно не использовать {}
.
def fn() return 0;
var fn = def() return 1;
Panda поддерживает вызов функций сразу после их определения.
(def(x, y) {
...
return x + y;
})(100, 50); // return 150
Ключевое слово new
не поддерживается в panda, но оставлено для совместимости (не используйте его как имя переменной или функции).
Panda поддерживает закрытые области видимости.
var fn = (def(n) {
var c = n;
return def() return c++;
})(100);
fn() // 100
fn() // 101
Массивы и объекты в panda очень похожи на те же конструкции в JavaScript, однако доступна ограниченная функциональность методов.
Объект типа Buffer был заимствован из nodejs, полная реализация ещё не завершена.
Объект типа Date пока не реализован, но находится в планах.
Поддержка комплексных типов данных в panda продолжает развиваться, подробнее можно узнать из тестов и примеров кода (не волнуйтесь, они легко читаются). Вот несколько примеров использования составных объектов:
/* Пример массива */
var a = []; // Определяем пустой массив и присваиваем его переменной a
``````markdown
a.push(1);
a.push('hello');
a.length(); // 2
a[0]; // 1
a[1]; // 'hello'
a[2]; // undefined
a.shift(); // 1
a.length(); // 1
a.pop(); // 'hello'
a.length(); // 0
a[0]; // undefined
a.unshift('hi');
a.push('panda');
a.length(); // 2
a[0]; // 'hi'
a[1]; // 'panda'
Так как исходный текст был на английском языке, и все строки были уже переведены или являлись кодом, который не требует перевода, то изменения минимальны.```javascript a.forEach(def(value, index) { ... });
/* Пример объекта */ var o = {}; // Определяем пустой объект и присваиваем его переменной o
o.length(); // 0 o.a; // undefined o.a = 1; // 1 o.a; // 1 o['a']; // 1 o['a'] = 'hello'; // 'hello' o['a']; // 'hello' o.length(); // 1 o.forEach(def(key, value) { ... });
### Определение встроенных функций
Пожалуйста, обратитесь к коду в разделах `test` и `example`, он очень прост.
## Обзор и советы
Panda уже имеет основные характеристики библиотеки интерпретатора и легко используется в различных проектах для реализации интересных функций.
Однако стоит обратить внимание на следующие моменты:
1. Panda ещё находится в процессе развития, интерфейсы пока не достигли стабильного состояния, и будут продолжены обновления.
2. Panda был спроектирован с учётом ограниченных ресурсов встраиваемых процессоров, минимально требует 4 КБ оперативной памяти, но не прошёл хорошее тестирование при работе с большим объёмом памяти.
3. Внутри Panda реализован механизм управления памятью и сборка мусора, однако текущий алгоритм сборки мусора не оптимизирован для больших объёмов памяти, что может привести к увеличению времени выполнения сборки мусора при использовании большого количества памяти.
```4. Panda не зависит от уровня поддержки операционной системы, поэтому его интеграция в приложение является простым процессом, хотя продвинутые возможности ОС (например, многопоточность/многозадачность, обработка событий) должны быть учтены интегрированными разработчиками.5. Panda используется как интерпретатор в Cupkee (открытой системе управления для умных устройств), его особенности и прогресс разработки определяются требованиями купке.
## Поддержите развитие Panda
1. Используйте и сообщайте о найденных багах или новых требованиях к функционалу.
2. Отправляйте pull-requests для улучшения кода Panda.
3. Любое другое действие, которое вы считаете полезным для развития проекта.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )