LINUX.ORG.RU

Встраиваемый язык

 , ,


1

5

Посоветуйте язык для встраивания. Нужно что-то попроще. Выбираю между Quickjs, mujs, scheme-s7, guile, lua, python, tcl. Или что бы ещё получше, хуже. Питон довольно медленный. js v7 не могу собрать просто, поэтому исключил это как неблагоприятный прогноз. Тикль довольно замороченно встраивать. Луа тоже что-то мне не нравится. Какие бы варианты ещё. От языка мне нужно немного, арифметика да работа со строками, не сложная.



Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от mrjaggers

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

конечно задачу надо знать. К «хочу встроить somelang» добавляется куча требований к собственно somelang. Системные (а чего у вас там с тредами и eventloop), эксплутационными (как там с библиотеками, они есть или придётся самому собирать и поддерживать), юридическими (ничему ли не противоречат лицензии) и так далее.

помимо того что somelang должен быть хоть чуть-чуть известен, а автор «встраивания» должен его знать как отче наш

MKuznetsov ★★★★★
()
Ответ на: комментарий от token_polyak

Потребуется библиотека на 5.4 в программе с статически вшитой lua 5.1 то либо библиотека использоваться не будет, либо будет адаптирована.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Опрос покажет лишь то, против чего и выступаю - общепринятость на лоре неправильного толкования. Здесь надо курить происхождение и признаки этой субкультуры, а не в лексикографическую демократию играться.

token_polyak ★★★★★
()
Ответ на: комментарий от token_polyak

Напиши статью (в толксах) о том как правильно ибо если ты не раскрываешь свои мысли, то они ничего не значат так как тайную суть понимаешь лишь ты один. Перевернув просто всё с ног на голову и назвав истиной.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Это не «мои мысли», это и есть истина, которую я мечу перед лорчанами, переворачивая с головы на ноги.

А ведь достаточно бы им было прочитать первоисточник, иншалла

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

ОК, теперь серъезно. Спорить не люблю, зато люблю дурачится, но кажется, что пришло время узнать меру.

Значит. Хипстерами с 40-х годов называли любителей самых модных и непривычных веяний в музыке, моде, итп. Так что здесь я промахнулся. НО: отчетливо наблюдяется такое явление, когда новым, непривычным веянием, а также способом быть нетакимкаквсе, становится внезапно откопанная технология, одежда, аксессуар, и так далее. Именно поэтому так много голубоволосых сжвшников угорает по ретрокомпьютингу, восьмибитным консолям, грампластинкам и кассетам. И все они принадлежат при этом к хипстерам, вополощат хипстериаду в жизнь двояким образом: гнаются за новым и модным, голубыми волосами и веганским бранчем из фудтрака, одновременно - ради выпендрежа - демонстрируют интерес к старому. В какой-то момент это стало одной из неотъемлимых частей этой субкультуры.

Образно - сравни дачников и «урбан фармеров».

token_polyak ★★★★★
()
Ответ на: комментарий от monk

Да, видел эти тесты. Но у меня в приложении разницы практически нет (а с учетом того, что в guile нормально распараллелилось, то разница в 4 раза в его пользу).

Puzan ★★★★★
()
Ответ на: комментарий от MKuznetsov

во-во. поэтому задача дергать Си из скриптоязыка гораздо более «проста», и стОит делать именно так, если задача явно не диктует противоположное.

mrjaggers
()

арифметика да работа со строками

AWK?

splinter ★★★★★
()
Ответ на: комментарий от Puzan

а с учетом того, что в guile нормально распараллелилось, то разница в 4 раза в его пользу

А это открытый проект? Мне было бы интересно попытаться оптимизировать версию на racket по образу версии для guile.

Мне не казалось, что racket/place заметнее тормозит, чем другие реализации многопоточности.

monk ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Зависит от ситуации если выполнение скриптов критично к скорости то берут luajit. Выбор есть всегда, либо скорость, либо фичи. Хотя и обычный lua довольно шустрый

Обычный lua сосёт по скорости у всех. LuaJIT был «передовым» 15 лет назад. С тех пор jit запилили во все приличные языки. Современная нода на реальных задачах рвёт этот ваш luajit как тузик грелку и при этом имеет нормальный синтаксис и все удобства.

пруфы

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Взял второй тест и запустил у себя

dron@gnu:~$ GET https://raw.githubusercontent.com/hanabi1224/Programming-Language-Benchmarks/main/bench/algorithm/binarytrees/1.lua > 1.lua
dron@gnu:~$ GET https://raw.githubusercontent.com/hanabi1224/Programming-Language-Benchmarks/main/bench/algorithm/binarytrees/1.js > 1.js
dron@gnu:~$ time nodejs 1.js
stretch tree of depth 7	 check: 255
64	 trees of depth 4	 check: 1984
16	 trees of depth 6	 check: 2032
long lived tree of depth 6	 check: 127

real	0m0,289s
user	0m0,240s
sys	0m0,013s
dron@gnu:~$ time luajit 1.lua 
stretch tree of depth 7	 check: 255
64	 trees of depth 4	 check: 1984
16	 trees of depth 6	 check: 2032
long lived tree of depth 6	 check: 127

real	0m0,009s
user	0m0,008s
sys	0m0,001s
dron@gnu:~$
dron@gnu:~$ time lua5.4 1.lua 
stretch tree of depth 7	 check: 255
64	 trees of depth 4	 check: 1984
16	 trees of depth 6	 check: 2032
long lived tree of depth 6	 check: 127

real	0m0,005s
user	0m0,005s
sys	0m0,001s
dron@gnu:~$
dron@gnu:~$ nodejs --version
v18.12.1
dron@gnu:~$ luajit -v
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2022 Mike Pall. https://luajit.org/
dron@gnu:~$ lua5.4 -v
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
dron@gnu:~$

Что-то там не то. Phenom2 X6

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от mrjaggers

во-во. поэтому задача дергать Си из скриптоязыка гораздо более «проста», и стОит делать именно так, если задача явно не диктует противоположное.

задача «дёргать Си из скриптов» требует иного подхода к проектированию. В смысле когда большой приклад на скриптах а на Cи только специфичные вещи.

А все привыкли делать «толстое приложение с большим стейтом» и сильными связями. В силу привычки методы проектирования, отладки даже придумки/замысла именно такие, что вариант скрипты-как-плагины-расширения понятнее и проще в реализации.

MKuznetsov ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Что-то там не то. Phenom2 X6

там всё то..там node - ей ещё стартовать надо, а не только скрипты тарабанить

MKuznetsov ★★★★★
()

njs посмотри, правда нет (еще нет) BigInt, сборщика мусора тоже нет.

drsm ★★
()
Ответ на: комментарий от MKuznetsov

Там кучка функций на си, вся программа, на 5000 строк приблизительно(для меня это много много много). пускай будет в ней еще интерпртатор скриптов, скрипты будут вызываться извне (от всяких кнопок), будут там чет вычислять, и в итоге скриптуха всеравно вызывает из программки функции си. нужен слой, для быстрого писания функционала(на этой скриптухе)(между кнопками и си функциями програмки). ну и тут вариантов накидали, ЛОР торт.

nionio35
() автор топика
Ответ на: комментарий от bread

Хипстер это позер. Понты это разновидность позерства. Унижение другого человека без основания это разновидность позерства. Все хипстеры в душе.

kolpakchi
()
Ответ на: комментарий от monk

А это открытый проект?

Пока не выкладывал, но будет.

Мне не казалось, что racket/place заметнее тормозит

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

У futures другая проблема - не много операций подходят под определение «“Safe” parallel execution». Например, если я делю вектор между фьючерами, то это unsafe и фьючеры блокируются, т.е. ждут друг друга. Внутри фьючера нельзя создать вектор и вернуть наружу - это тоже unsafe. А если делать списками, то получаются тормоза на создании списка и теряется весь профит от многопоточности. Пробовал варьировать размер списка и кол-во фьючеров, не помогает.

Ну а ракетные треды - они вообще не треды.

Возможно, я что-то упустил. Если хочешь, попробуй ускорить простую задачу: посчитать магнитуду 10-20 миллионов комплексных чисел. Числа готовы, находятся в векторе или списке. Результат сохранить в новый вектор или список.

В guile эта задача на отлично решилась с помощью futures - ускорилось в несколько раз сообразно количеству процессоров.

Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 1)

Для маленького набора команд можно flex+bison попробовать.

necromant ★★
()

Тебе самому писать скрипты или людям отдавать? Если второе бери lua и не устраивай головняк.

UPD: ну или жаваскрипт, да.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от Puzan

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

Так передавай shared-flvector, shared-fxvector, shared-bytes. Ты же на guile небось между потоками не через сокет данные гоняешь.

У futures другая проблема

Тут да. Это больше академическая приблуда.

monk ★★★★★
()
Ответ на: комментарий от nionio35

Там кучка функций на си, вся программа, на 5000 строк приблизительно(для меня это много много много). пускай будет в ней еще интерпртатор скриптов, скрипты будут вызываться извне (от всяких кнопок), будут там чет вычислять, и в итоге скриптуха всеравно вызывает из программки функции си. нужен слой, для быстрого писания функционала(на этой скриптухе)(между кнопками и си функциями програмки). ну и тут вариантов накидали,

без обид, но с такими формулировками - лучше ничего не трогать :-)

как-то поуважительнее стоит к своему-же софту относится..«скриптуха в кучку функций» заведомое фиаско

MKuznetsov ★★★★★
()
Ответ на: комментарий от Puzan

В guile эта задача на отлично решилась с помощью futures - ускорилось в несколько раз сообразно количеству процессоров.

Попробуй так:

(define (test2 v)
  (define N (vector-length v))
  (define r (make-vector N))
  (define (proc i)
    (when (< i N)
      (vector-set! r i (magnitude (vector-ref v i)))
      (proc (+ 4 i))))
  (map
   touch
   (list
    (future (lambda () (proc 0)))
    (future (lambda () (proc 1)))
    (future (lambda () (proc 2)))
    (future (lambda () (proc 3)))))
  r)

Потоки параллельно работают.

monk ★★★★★
()

На WASM смотрели?

trex6 ★★★★★
()
Ответ на: комментарий от MKuznetsov

Да, у вас с выражением мысли все норм, четко и гладко. Но ктож ее будет трогать? Проект личный, в целом рассчитано на гиков аудиторией в три человека примерно. Поэтому туды можно и лисп вмонтировать. Да, и ещё я документацию не пишу, потому что нет времени.

nionio35
() автор топика
Ответ на: комментарий от nionio35

Да, и ещё я документацию не пишу, потому что нет времени.

и не в коем случае не комментируйте код. Это моветон :-)

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Да, это излишняя многословность. Никчему.

nionio35
() автор топика
Ответ на: комментарий от mrjaggers

Это понятно. Но когда скрипты уже есть и написаны для lua 5.4, то прикрутить luajit вместо lua - не выйдет.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от monk

У меня такой код блокировал фьючеры. Попробуй посмотреть через future-vizualizer.

Shared с places попробую. Я почему-то подумал, что там только байтовые векторы можно шарить.

Puzan ★★★★★
()
Ответ на: комментарий от monk

Похоже я где-то накосячил, но не могу воспроизвести это снова. Перенёс обратно код из guile в racket, и он заработал в многопотоке. Попробую ещё поэкспериментировать.

Кстати, скорость в racket примерно такая же, плюс-минус погрешность измерения.

Puzan ★★★★★
()
Ответ на: комментарий от Puzan

Похоже я где-то накосячил, но не могу воспроизвести это снова.

Скорее всего, что-то внутри future создавать пытался. Это нельзя.

Кстати, скорость в racket примерно такая же, плюс-минус погрешность измерения.

Очень любопытно. А можешь https://github.com/ecraven/r7rs-benchmarks/blob/master/src/browse.scm сравнить на своём компьютере?

monk ★★★★★
()
Ответ на: комментарий от Puzan

То есть замер всё-таки верный. Уже лучше.

monk ★★★★★
()

Питон, потому что всё остальное мертво, а кучу написаного УГ нужно будет поддерживать, а пистонисты на каждому углу лежат штабелями.

sbu_shpigun
()

Начинаю разработку встраиваемого языка.

Он мне нужен!

Публиковать скорее всего его не буду, так как разработка скорее
всего будет акцентирована лишь на создание API для иного динамического языка.

Для каких задач язык будет полезен?

Для отчетников, GUI, ... динамических и обобщенных алгоритмов, ...

Forum0888
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.