![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Какие скриптовые языки самые распространённые? Перл сходит со сцены, Питон нынче повсюду, про 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
Date: 2025-02-21 00:16 (UTC)деякі декстопні аплікації (foliate, наприклад) написані суто на джаваскрипті gjs, використовуючи gtk віджети
шо цікаво, така аплікація не тягає зі собою 2^16 .js хфайлів, а динамічно імпортить їх з 1 байнарного gresource бандла, де, окрім .js, зберігаються всі айконки, .css і т.і.
no subject
Date: 2025-02-21 08:22 (UTC)no subject
Date: 2025-02-21 08:41 (UTC)але так, лінукс це їх основна тарґет в обоїх випадках