1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cupkee-panda

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение в Panda

Panda — это интерпретатор сценарного языка, основанный на JavaScript, но без некоторых грамматических особенностей.

Panda представляет собой легковесный язык, предназначенный для использования как интерпретатор встроенной аппаратуры.

Panda легко изучается.

Начало работы

Для выполнения ваших скриптов вам потребуется интерпретатор; есть несколько способов получить его:

  1. Запустите интерактивный интерпретатор Panda на Mac или PC (предварительно скомпилированный из исходного кода)
  2. Подключитесь через Mac или PC к оборудованию, работающему под управлением операционной системы CupkeeOS (этот метод позволяет непосредственно взаимодействовать с оборудованием; подробнее см. документацию по Cupkee)

После вывода привлекательного (или не очень) логотипа интерпретатор начинает ждать ввода пользователя. Вы можете ввести команды на языке Panda или JavaScript, и интерпретатор будет выполнять парсинг, компиляцию в байткод, интерпретацию и вывод результата в терминал.

Если вы используете интерактивный интерпретатор Panda, то выходные данные будут примерно следующими:

$ panda/repl
>

Сборка интерпретатора Panda

Получение исходного кода

cd ваш_путь_к_рабочему_пространству
git clone https://github.com/cupkee/panda.git

Сборка

Перед сборкой Panda вам потребуются компилятор GCC и библиотека readline.Шаги сборки:

  1. Через терминал перейдите в каталог исходного кода panda.
  2. Выполните команду make example.
  3. Обычно после этого в каталоге исходного кода panda появится подкаталог build, содержащий все собранные исполняемые файлы.
  4. /.../panda/build/example/repl — это наш требуемый интерактивный интерпретатор.

Использование panda в ваших проектах

Как видно из вышеописанного, интерактивный интерпретатор является всего лишь демонстрационным приложением.

Вы можете использовать panda в своих проектах в качестве интерпретатора конфигураций, командной строки или других целей.

Отправка ошибок

Мне крайне необходимы ваши отзывы о найденных ошибках, чтобы постоянно совершенствовать программу.

Вы можете отправить ошибки двумя способами:

  1. Создайте issue на GitHub (рекомендовано).
  2. Отправьте электронное письмо на адрес bug-report@cupkee.cn.

Базовое руководство по использованию

Panda представляет собой урезанную версию интерпретатора JavaScript с базовой грамматикой, аналогичной JavaScript, что делает её простой в освоении.

Поддерживаемые типы данных

  • undefined
  • NaN
  • boolean
  • number
  • string
  • array
  • object

Основные конструкции

Конструкция var - определение переменных

  1. Определение переменных a, b, c
var a, b, c;
  1. Определение переменных со значением
var a = 0, b, c = 'hello';

Конструкция выражений

  1. Отличия вычислений в panda от стандартного JavaScript При выполнении арифметических операций с различными типами данных, pandas не производит преобразование типов и всегда возвращает NaN (не число).

  2. Операторы

  • ++ -- () [] .
  • (унарные) - ~ !
    • / %
  • & | ^
  • << >>
  • < > >= <=
  • == !=
  • && ||
  • = += -= *= /= %= &= |= ^= <<= >>=
  • ? :
  • ,
  1. Примеры базовых выражений
> 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 используется для выбора различных ветвей исполнения в зависимости от условия.

if (true) {
    // всегда выполняется
} else {
    // никогда не выполняется
}

if (a > 100) {
    ...
}

Цикл while

Цикл while используется для повторного выполнения блока кода до тех пор, пока условие истинно.

while(a++ < 100) {
    ...
}

Инструкция break

Инструкция break используется для выхода из цикла.

Инструкция continue

Инструкция continue используется для пропуска текущего шага цикла и перехода к следующему шагу.

Инструкция return

Инструкция return используется для выхода из функции и может указывать значение для возврата.

Функции

В pandas расширены возможности определения функций по сравнению со стандартным JavaScript.

Определение функций

  1. Стандартное определение
function fn() {
  // statements ...
}

// Анонимная функция
var fn = function () {
  // statements ...
}
  1. Расширенная синтаксис pandaВ panda используется ключевое слово 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

Ключевое слово new не поддерживается в panda, но оставлено для совместимости (не используйте его как имя переменной или функции).

Закрытые области видимости (closure)

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
GPL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/cupkee-panda.git
git@api.gitlife.ru:oschina-mirror/cupkee-panda.git
oschina-mirror
cupkee-panda
cupkee-panda
master