Entry tags:
Из всех искусств для нас важнейшим является JavaScript
Какие скриптовые языки самые распространённые? Перл сходит со сцены, Питон нынче повсюду, про PHP уже забыли, но оказывается, Javascript незримо присутствует в каждом линуксе и маке. Гляньте файл:
Это Джаваскрипт можно задействовать из Си программы. Есть документация. Понадобятся соответствующие include-файлы, для этого следует установить пакет нужной версии. Скажем, на последнем Дебиане это 6.0:
Это может быть libjavascriptcoregtk-4.0.so как выше, или *-4.1.so, или *-6.0.so, но какой-нибудь да отыщется. Потому что веб-браузеры в нём нуждаются.$ ls -l /usr/lib/*/libjavascriptcoregtk*.so* lrwxrwxrwx 1 root 36 Jan 6 04:34 /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18 -> libjavascriptcoregtk-4.0.so.18.25.14 -rw-r--r-- 1 root 30609392 Jan 6 04:34 /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18.25.14
Это Джаваскрипт можно задействовать из Си программы. Есть документация. Понадобятся соответствующие include-файлы, для этого следует установить пакет нужной версии. Скажем, на последнем Дебиане это 6.0:
Возьмём пример вычисления факториала:sudo apt install libjavascriptcoregtk-6.0-dev
Компилируем, запускаем:#include <stdio.h> #include <webkitgtk-6.0/jsc/jsc.h> const char code[] = "\ function factorial(n) {\ if (n === 0) {\ return 1;\ } else {\ return n * factorial(n - 1);\ }\ }\ \ factorial(10)"; int main() { // Create a new JavaScript virtual machine. JSCContext *vm = jsc_context_new(); // Evaluate arbitrary JavaScript code. JSCValue *result = jsc_context_evaluate(vm, code, -1); // Print the result. if (jsc_value_is_number(result)) { double value = jsc_value_to_double(result); printf("The result is: %f\n", value); } else { printf("The result is not a number.\n"); } // Deallocate resources. g_object_unref(result); g_object_unref(vm); }
На маке тоже работает, но интерфейс выглядит несколько по другому:$ cc demo.c -o demo `pkg-config --cflags --libs javascriptcoregtk-6.0` $ ./demo The result is: 3628800.000000
Запускаем:#include <stdio.h> #include <JavaScriptCore/JavaScriptCore.h> const char code[] = "\ function factorial(n) {\ if (n === 0) {\ return 1;\ } else {\ return n * factorial(n - 1);\ }\ }\ \ factorial(10)"; int main() { // Create a new JavaScript virtual machine. JSGlobalContextRef vm = JSGlobalContextCreate(NULL); // Evaluate arbitrary JavaScript code. JSStringRef script = JSStringCreateWithUTF8CString(code); JSValueRef result = JSEvaluateScript(vm, script, NULL, NULL, 0, NULL); // Print the result. if (JSValueIsNumber(vm, result)) { double value = JSValueToNumber(vm, result, NULL); printf("The result is: %f\n", value); } else { printf("The result is not a number.\n"); } // Deallocate resources. JSStringRelease(script); JSGlobalContextRelease(vm); }
$ cc demo.c -o demo -framework JavaScriptCore $ ./demo The result is: 3628800.000000
no subject
деякі декстопні аплікації (foliate, наприклад) написані суто на джаваскрипті gjs, використовуючи gtk віджети
шо цікаво, така аплікація не тягає зі собою 2^16 .js хфайлів, а динамічно імпортить їх з 1 байнарного gresource бандла, де, окрім .js, зберігаються всі айконки, .css і т.і.
no subject
no subject
але так, лінукс це їх основна тарґет в обоїх випадках
no subject
no subject
no subject
забагато бібліотек, як на мене. краще тоді quickjs (від автора ffmpeg) взяти, як потрібна embeddable скриптова мова
no subject
цiкаво, дякую
no subject
no subject
no subject
цього ніколи не існувало, не існує і навряд з'явиться
є стандарт--ecmascript (лише тому шо оракл тримає трейдмарка на ім'я джаваскрипт і не бажає його дарувати ком'юніті) і є 3 головні реалізації: spidermonkey (мозіловська найстаріша), епловська javascriptcore (у прикладі цього поста, але з Гноумівського порта вебкіта) і гооглівська v8
ecmascript еволюціонує доволі швидко, і всі 3х реалізації мають трохи різну відповідність стандарту; гооглівська зазвичай отримує найновіші фічі, а епловська завжди пасе задніх