LINUX.ORG.RU

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

 , ,


1

5

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



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

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

Дорога длинною в жизнь. =)

Согласен.
Но такова моя селяви.

Впрочем это не мечтания.

Разработанное API для использования метаданных уже вполне пригодно для создания ядра динамического языка.

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

У тебя вместо x = y будет типа x:set(y) все операции будут свойствами? Даже условия вместо if x == y ... будет x:ifequal(y)... так что ль? Я типа такого делал себе, есть переменная по получению значения определятся её тип, по определению типа ей задаются свойства которые определяют все возможные операции включая условные переходы/циклы и итерации элементов. Это конечно черезвычайно упрощает жизнь в части реализации и в целом прикольно можно перегружать поведение на ходу строго следить за типами и всё такое, но кроме своей поделки я такого больше нигде не видел, для моих нужд хватало. Но мне всегда казалось что я делаю что-то не так ибо аналогов что-то не видать =)

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

Через точку у меня был доступ к внутренним элементам, аля поля структуры, через двоеточие вызов свойств. Да хоть наоборот тут без разницы.

a = {
  b =  42,
  c = "33",
  d = { x = 42, y = 43}
}

a.b:set(55)
a.c:set("55")
a.d.x:sum(a.d.y)

a.b.c:set(42) # ошибка, если задан запрет на неявное преобразование типов
a.b.c:set(42:tostring()) # туповато выглядит явное приведение, но зато реализовывалось легко
LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от Forum0888

Наброшу :D

Становится мало интересно когда превращается в такое

x = lala:function(a,b,c)
{
     a:isnumber()  { a:mul(5)     }
     #else нету :D Факап ещё тот ибо бред получается хехех
     b:notstring() { b:tostring() }
     #условные свойства/методы определяют будут ли выполнены следующие за : или внутри {...}
     c:notstring:tostring() # сахар, свойства можно дёргать друга за другом
     d:set( a:tostring:concat( b:concat( c:concat(" lol kek\n") ) ) )
     d:print()
}
>x:lala(5,3,"33")
>25333 lol kek

Нуууу, прикольно, но такое себе. Давно уже это было с трудом вспоминаю детали. Исходников нет как и бинарников, тут воспроизвёл по памяти.

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

это все и на си можно написать.

«условные свойства» в таком виде будут давать неоднозначность грамматики, если в ней есть просто «блоки» {…} чтобы сделать однгозначно, придется все равно испускать некий селектор правила, типа «if»

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

Это, скорее, к предыдущим высказываниям того же автора относилось…

Причина вовсе не в том, что собираюсь продавать разработки или типа «не признанный гений».

Не поверите, но правда считаю, что публиковать рано.

Forum0888
()
Ответ на: комментарий от alysnix

Оно и есть по сути си с обёртке.

придется все равно испускать некий селектор правила, типа «if»

Он и есть там. Это

a:isnumber()  { a:mul(5)  }

Тоже самое что и это

if( a.type == IS_NUMBER )
{
   a.value.number = a.value.number * 5;
}
LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Это конечно черезвычайно упрощает жизнь в части реализации и в целом прикольно можно перегружать поведение на ходу строго следить за типами и всё такое, но кроме своей поделки я такого больше нигде не видел, для моих нужд хватало.

Smalltalk?

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

Были, но только одного типа либо float, либо int либо строки, причём строки если массив то константа ибо я тупо склеивал
"[ptr1str][ptr2str][ptr3str]string1\0string2\0string3\0" я до конца ничего не доделывал, так, игрался.


x:set(1,2,3) #инициализация
x:mul(5) # перемножить все элементы на 5
y:set(x) # копировать массив в другую переменную
z:mirror(x) # теперь в z указатель на x 
z:isnumber() #если массив это числа
{
    z[2]:div(5) #то взять третий элемент (с нуля отсчёт) и разделить на 5 в x тоже поменялось
    y[2]:div(5) # а тут изменился только y ибо это копия
}


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

Да, нотация похожа, только там умно и некие сообщения, а у меня тупо look up табличка соотносящая тип с операцией над ним было look[val.type][operation](&val,blabla) почти везде. Игрушка, не более того (у меня) =)

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

Рекурсивный вызов функций там есть ?

Не было, много чего не было.

Я думаю это нужно довести до определенного рабочего состояния.

Не до этого сейчас, может потооооооом. Ну, фундаментальную идею я показал, так что флаг в руки =) Там на деле тонну работы надо проводить, не всё так просто.

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

Конечно рано, все подобные публикации на моей памяти немедленно были захейчены, а авторы сбиты с толку горами ненужной информации. У вас в генах уже отложилось, что среда форумная очень дикая и недружелюбная. Чуйка работает, предвещает опасность.

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

Конечно рано, все подобные публикации на моей памяти немедленно были захейчены, а авторы сбиты с толку горами ненужной информации.

Проще говоря не нужно быть «Иваном дурачком».

Заповедь Господа увещевает

будьте мудры, как змии, и просты, как голуби

https://bible.optina.ru/new:mf:10:16

Forum0888
()

По мне, JS лучший выбор. Синтаксис удобный, не отторгающий и движков много разных. Он спецом был запроектирован для встраивания в приложения. У JS-а и офиц. стандарты есть. Разрабов найти достаточно просто, т.к. очень распространён.

В качестве движка можно рассмотреть SpiderMonkey - он используется в продуктах мозиллы и встраивается достаточно просто. Ну или V8 от гугла, но его не копал. Думаю, что там не хуже всё..

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

Для иного динамического это какого?

Работа очень емкая, поэтому на первом этапе разработаю «встроенный» объектно-ориентированный язык программирования.

Открою одну из фич языка.

Названия операторов: «if», «for», ... не будут «прибиты гвоздями» к реализации.
Программисту будет предоставлена возможность создать метаданные для алиасов операторов (с использованием любого национального языка).
По умолчанию названия операторов будeт сишным.

МНОГО новшеств будет.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)