Вроде как PHP встраиваемый

Вот, что ардуино иде не проглотит, так это русские буковки в коде.

А у нас - работает. Случайно узнал :slight_smile:

<?php

//require('HardwareSerial.php');

const Диодик = 2;

function Настроечки() {
  pinMode(Диодик, INPUT | OUTPUT);
}


function Цикл() {

  digitalWrite(Диодик, HIGH);
  delay(100);

  digitalWrite(Диодик, LOW);
  delay(100);
}

Настроечки();
Цикл();
?>

Потихоньку подтаскиваем фичи из PHP 7.x - сделал поддержку возвращаемых типов у функций и closures (лямбда-функций)

Можно писать по-старинке:

function MyFunc($arg) {
  ...
  return $ret;
}

А можно - с указанием типа (параметров и\или возвращаемого значения)

// int, как тип аргумента - это нестандартное расширение. это для обучающего проекта, чтобы детишки к типам привыкали сразу
// int, как возвращаемый тип (:int) - стандарт PHP 7.x
function MyFunc(int $arg) :int {
  ...
  return $ret;
}

Или так:

$col = 11

echo $col;

// Возвращаемый тип у анонимной функции + захват (capture) переменной
$g = function () use($col) :int {
  echo $col;
  return 0;
};


$g(); // Напечатает 11
$col = 10;
$g(); // Напечатает 11

Добавил тип void заодно

Ошибок нашел маленькую тележку, поисправлял. Одна - нехорошая, с памятью. Остальные - про синтаксис PHP.

Надо сделать еще , чтобы любую VM можно было прервать по желанию, не ждать, пока скрипт до конца доработает.

Архитектура простая - FreeRTOS задача обслуживает виртуальную PHP машину (Запускать можно несколько машин одновременно). Около 200кб на VM. Все аллокации, включая стек FreeRTOS задач запихал в PSRAM.

Показывать пока нечего - все на соплях и с костылями. Позже.

enum добавил. в PHP есть два вида - без значений и без типа И со значениями и типом. Типы - или строки или целые:

enum Hello {
  case Name1;
  case Name2;
  case Name3;
}

и

enum Hello: int {
  case Value1 = 1;
  case Value2 = 2;
}

А у нас - расширенный синтаксис.

Поддерживаются все типы. Поддерживаются типы вперемешку. Поддерживаются сложные неконстантные инициализаторы. Например:

enum z :int {
  case waka;          // 0  (auto)
  case bono;          // 1  (auto)
  case hello = '666'; // строка в числовом енуме, нет проблем
  case nex;           // 2  (auto)
  case ub = 10;       // 10
  case xen;           // 3  (auto)
  case ren = 'Hello ' . rand_str(3);           // 'Helloxyt'
}

Тип можно указываать, а можно не указывать. Если значение не задано, то компилятор подставит по своему усмотрению.

Можно через запятую, если значение задано:

enum Hello {
 case A = 1, B = 2, C = 3;
 case Z = 6.6;
}

И вообще, чем меньше вы делаете проверок в компиляторе, тем более удивительный синтаксис становится возможным :).

А вот и нет. Официальный PHP (Zend engine) сейчас один дядька портирует на ЕСПшки. Ну у него сам энжин требует 1.3МБ, плюс сам скрипт. Однопоточное все. А у нас многопоточное. Можно создавать и запускать множество виртуальных машин. Запускать по требованию, а скомпилировать - заранее. У нас на энжин нужно ровно в 10 раз меньше памяти, а на виртуалко примерно 200кб. в среднем. Блинкать можно с частотой 300кгц. :slight_smile: Официальный Zend это, конечно, круто.. но.. зачем? Laravel на нем запускать? Ну так в эмбеддед это не нужно. Проще взять малинку\помидорку или как их там и запустить стандартный ПХП на Линуксе.

У меня - хитрее план. Я хочу полноценную ардуиноподобную среду, но все чтобы делалось в браузере. И редактирование с компиляцией. Зачем? Затем, что язык простой и внезапно дает забесплатно мощный UI, который ваш браузер будет отрисовывать. Один скрипт будет и температуру измерять и хтмл вывод делать вам в браузер, например.

Одна проблема - современные ПХП - это 7 и 8 версия. А у меня - 5.3 (шестой небыло - провалили они перевод на UTF)

Приходится подтягивать язык до 7\8 версии насколько существующая архитектура позволяет. Сделал поддержку типов возвращаемых значений (в 5.3 не было синтаксиса такого). Сделал поддержку типов callable и специальный тип never , который принудительно вставляет опкод HALT, если детектируется возврат из такой функции. Сделал автокаст возвращаемого значения:

function test() :int {
  return '42';
}

вернет int, потому, что возвращаемый тип функции - int. Будет автоконверт. В стандартном PHP будет ошибка.

У нас есть Си\Си++ оверлоадинг, в PHP нет оверорадинга.

Отличия от оригинального PHP (где-то лучше, где-то хуже, где-то просто другой)

А пока я добавил enum, постарался его сделать Сишным, но вышло как вышло :).

жду когда можно будет сделать связку PHP + SQLite

Надеюсь, под новый год. Сейчас поддержки SQL вообще нет. Есть поддерка xml и json встроенна. А SQL надо будет пилить.

А какой у тебя предполагается сценарий использования?

Я спросил у чата жпт, какой SQL интерфейс чаще всего используется, он мне назвал два: PDO и SQLite3. На глазок SQLite3 проще реализовать, но PDO более распостранен.

ну нам же только к SQLite стучаться, так что не PDO!

Это меняет дело. Тогда шанс есть :). Авось, к новому году.