Какие C ++ [[атрибуты]] реализованы cheerp? - PullRequest
0 голосов
/ 20 июня 2020

В спецификации C ++ 11 определено [[attributes]], которое может использоваться для указания / влияния на поведение, определяемое реализацией. Cheerp поддерживает это для указания того, пишете ли вы код C ++, предназначенный для компиляции в код [[cheerp::genericjs]] или [[cheerp::wasm]]. Это приводит к тому, что ваш код C ++ компилируется в вывод .js или .wasm компилятора соответственно. (Верно?)

Мой вопрос: Какие атрибуты знает Cheerp и что они все делают?

До сих пор я видел следующие атрибуты:

[[cheerp::genericjs]]
[[cheerp::wasm]]
[[cheerp::asmjs]]
[[cheerp::client_layout]]
[[cheerp::static]]
[[cheerp::jsexport]]

1 Ответ

1 голос
/ 22 июня 2020

Те, которые предназначены для использования пользователями:

  • cheerp::genericjs: скомпилировать связанный элемент (определение класса / структуры, глобальное или функция) в JavaScript , используя модель объектной памяти

  • cheerp::wasm: скомпилируйте связанный элемент (определение класса / структуры, глобальное или функциональное) в WebAssembli OR asm. js, используя линейную память модель. cheerp::asmjs является псевдонимом cheerp::wasm и считается устаревшим (но сохранено для обратной совместимости). Фактический вывод (wasm или asm. js) зависит от флагов командной строки.

  • client::jsexport: экспортируйте связанный элемент (функцию или класс / структуру), чтобы его можно было использовать из внешнего JavaScript код

Другие упомянутые вами атрибуты существуют, но вам почти никогда не следует использовать их самостоятельно. Их значение таково:

  • cheerp::static: сообщить компилятору, что связанный метод клиентского класса - stati c (пример: Date.now()). Используется в реализации различных API-интерфейсов браузера
  • cheerp::client_layout: сообщить компилятору, что этот класс / структура имеет внешний макет, определенный во external JavaScript. Вам никогда не нужно использовать это, если вы наследуете свои клиентские классы от client::Object (что вам следует), потому что производные классы наследуют этот атрибут
...