Простой скрипт внутри приложения (в виде строки)
От: Shmj Ниоткуда  
Дата: 16.11.21 20:41
Оценка:
Кто что посоветует.

Нужно чтобы приложение из базы данных брало простой скрипт в виде строки. Подставляло некоторые параметры туда. Что есть из готового?

Есть какой-то https://github.com/oleg-shilo/cs-script Но какой-то громоздкий. Не ясно создает ли он временные файлы — желательно без них.
Re: Простой скрипт внутри приложения (в виде строки)
От: bnk СССР http://unmanagedvisio.com/
Дата: 16.11.21 22:25
Оценка: 11 (2)
Здравствуйте, Shmj, Вы писали:

S>Нужно чтобы приложение из базы данных брало простой скрипт в виде строки. Подставляло некоторые параметры туда. Что есть из готового?


https://github.com/microsoft/ClearScript

cs-script в принципе тоже нормальный, но намного медленее Google V8, если тебе склрость важна
Отредактировано 16.11.2021 22:33 bnk . Предыдущая версия .
Re: Простой скрипт внутри приложения (в виде строки)
От: vaa  
Дата: 17.11.21 03:48
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Кто что посоветует.


S>Нужно чтобы приложение из базы данных брало простой скрипт в виде строки. Подставляло некоторые параметры туда. Что есть из готового?


Core?
#r "nuget: Microsoft.CodeAnalysis.CSharp.Scripting"
open Microsft.CodeAnalysis.CSharp.Scripting
let result:obj = CSharpScript.EvaluateAsync("1 + 1").Result
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Простой скрипт внутри приложения (в виде строки)
От: Shmj Ниоткуда  
Дата: 17.11.21 05:04
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Core?

vaa>
vaa>#r "nuget: Microsoft.CodeAnalysis.CSharp.Scripting"
vaa>open Microsft.CodeAnalysis.CSharp.Scripting
vaa>let result:obj = CSharpScript.EvaluateAsync("1 + 1").Result  
vaa>


Насколько быстро оно работает, не создает ли файлов? Если на каждый запрос запускать такой скрипт — не сильно дорого?
Re[2]: Простой скрипт внутри приложения (в виде строки)
От: Shmj Ниоткуда  
Дата: 17.11.21 05:28
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>https://github.com/microsoft/ClearScript


bnk>cs-script в принципе тоже нормальный, но намного медленее Google V8, если тебе склрость важна


Эта штука при запуске требует нейтивные ClearScriptV8.linux-x64.so

Нет ли чего-нибудь без таких зависимостей сложных?
Re[3]: Простой скрипт внутри приложения (в виде строки)
От: vaa  
Дата: 17.11.21 05:47
Оценка: 6 (1)
Здравствуйте, Shmj, Вы писали:

S>Насколько быстро оно работает, не создает ли файлов? Если на каждый запрос запускать такой скрипт — не сильно дорого?

работает со скоростью сишарпа, конечно же.
не создает.
что значит дорого?

BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19043.1348 (21H1/May2021Update)
Intel Core i3-6100U CPU 2.30GHz (Skylake), 1 CPU, 4 logical and 2 physical cores
.NET SDK=6.0.100
  [Host]     : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT
  DefaultJob : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT


|   Method |               Mean |             Error |            StdDev |
|--------- |-------------------:|------------------:|------------------:|
|   Script | 40,965,881.4433 ns | 1,100,732.4731 ns | 3,193,424.4939 ns |
| ByteCode |          0.0096 ns |         0.0049 ns |         0.0041 ns |


using System;
using static System.Console;
using System.Security.Cryptography;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using Microsoft.CodeAnalysis.CSharp.Scripting;

public class ScriptVsByteCode {

        [Benchmark]
        public int Script() => (int)CSharpScript.EvaluateAsync("1 + 1").Result;

        [Benchmark]
        public int ByteCode() => 1 + 1;
}

static class Program {
    static void Main() {
        var summary = BenchmarkRunner.Run<ScriptVsByteCode>();
    }
}
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Простой скрипт внутри приложения (в виде строки)
От: vaa  
Дата: 17.11.21 05:55
Оценка:
Здравствуйте, Shmj, Вы писали:

можно еще попробовать
https://ironpython.net/download/
и это
https://github.com/IronScheme/IronScheme
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Простой скрипт внутри приложения (в виде строки)
От: vaa  
Дата: 17.11.21 06:25
Оценка: 17 (2)
Здравствуйте, Shmj, Вы писали:
IronPython можно заюзать. синтаксис популярный. корку держит.
|     Method |              Mean |             Error |            StdDev |
|----------- |------------------:|------------------:|------------------:|
|     Script | 46,113,033.333 ns | 1,611,812.3684 ns | 4,727,166.6613 ns |
|   ByteCode |          4.228 ns |         0.2075 ns |         0.2390 ns |
| IronPython |     36,127.126 ns |       563.4038 ns |       527.0083 ns |

        [Benchmark]
        public object Script() => CSharpScript.EvaluateAsync("1 + 1").GetAwaiter().GetResult();

        [Benchmark]
        public object ByteCode() => (object)(1 + 1);

    static ScriptEngine engine = Python.CreateEngine();

        [Benchmark]
        public object IronPython() =>  engine.Execute("1 + 1");
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Простой скрипт внутри приложения (в виде строки)
От: vaa  
Дата: 17.11.21 07:08
Оценка:
Здравствуйте, Shmj, Вы писали:

|     Method |              Mean |             Error |            StdDev |            Median |
|----------- |------------------:|------------------:|------------------:|------------------:|
|     Script | 38,895,082.000 ns | 1,158,899.6864 ns | 3,417,041.8728 ns | 38,503,800.000 ns |
|   ByteCode |          4.397 ns |         0.2812 ns |         0.7932 ns |          4.029 ns |
| IronPython |     36,691.971 ns |       733.0558 ns |     1,624.4011 ns |     36,369.061 ns |
| IronScheme | 15,918,611.707 ns | 2,620,438.8590 ns | 7,726,423.0989 ns | 15,823,650.391 ns |


Ожидаемо, тк вызывался через расширение, лень изучать:
        [Benchmark]
        public object Script() => CSharpScript.EvaluateAsync("1 + 1").GetAwaiter().GetResult();

        [Benchmark]
        public object ByteCode() => (object)(1 + 1);

    static ScriptEngine engine = Python.CreateEngine();

        [Benchmark]
        public object IronPython() =>  engine.Execute("1 + 1");

        [Benchmark]
        public object IronScheme() => "(+ 1 1)".Eval();
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Простой скрипт внутри приложения (в виде строки)
От: Mihas  
Дата: 17.11.21 07:38
Оценка: 1 (1)
Здравствуйте, vaa, Вы писали:

vaa>можно еще попробовать

vaa>https://ironpython.net/download/
Из подводных камней:
— запуск скрипта требует времени на инициализацию (когда-то, когда я применял, оно измерялось единицами миллисекунд, если не десятками)
— стандартные классы (типа string) имеют свою питоновскую реализацию, при том что остальные дотнетовские классы как родные
Re: Простой скрипт внутри приложения (в виде строки)
От: Ночной Смотрящий Россия  
Дата: 17.11.21 09:32
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Нужно чтобы приложение из базы данных брало простой скрипт в виде строки. Подставляло некоторые параметры туда. Что есть из готового?


Что скрипт должен уметь?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Простой скрипт внутри приложения (в виде строки)
От: Shmj Ниоткуда  
Дата: 17.11.21 10:24
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Нужно чтобы приложение из базы данных брало простой скрипт в виде строки. Подставляло некоторые параметры туда. Что есть из готового?

НС>Что скрипт должен уметь?

Операции со строками, которые есть даже в самых простых скриптовых языках. Ну там конкатенация, добавление префикса, проверку на равенство строк и пр.
Отредактировано 17.11.2021 10:25 Shmj . Предыдущая версия .
Re[3]: Простой скрипт внутри приложения (в виде строки)
От: Ночной Смотрящий Россия  
Дата: 17.11.21 10:47
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>>Нужно чтобы приложение из базы данных брало простой скрипт в виде строки. Подставляло некоторые параметры туда. Что есть из готового?

НС>>Что скрипт должен уметь?
S>Операции со строками, которые есть даже в самых простых скриптовых языках. Ну там конкатенация, добавление префикса, проверку на равенство строк и пр.

Т.е. просто одно несложное выражение?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Простой скрипт внутри приложения (в виде строки)
От: Shmj Ниоткуда  
Дата: 17.11.21 11:22
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Т.е. просто одно несложное выражение?


Типа того.
Re[5]: Простой скрипт внутри приложения (в виде строки)
От: Ночной Смотрящий Россия  
Дата: 17.11.21 11:38
Оценка: 3 (1) +1 :))) :))
Здравствуйте, Shmj, Вы писали:

НС>>Т.е. просто одно несложное выражение?

S>Типа того.

Тогда проще всего ознакомиться с алгоритмом Пратта и накидать нужный движочек за пару часов с нуля. Если время работы важнее времени старта — накинь еще пару часиков на реализацию простенького компилятора. В любом случае, за рабочий день, максимум два справишься.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[6]: Простой скрипт внутри приложения (в виде строки)
От: Shmj Ниоткуда  
Дата: 17.11.21 12:35
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Тогда проще всего ознакомиться с алгоритмом Пратта и накидать нужный движочек за пару часов с нуля. Если время работы важнее времени старта — накинь еще пару часиков на реализацию простенького компилятора. В любом случае, за рабочий день, максимум два справишься.


В наше время уже так не делают. Есть nuget, есть sof. Все что сверх того — то от лукавого.
Re[7]: Простой скрипт внутри приложения (в виде строки)
От: Ночной Смотрящий Россия  
Дата: 17.11.21 13:11
Оценка:
Здравствуйте, Shmj, Вы писали:

НС>>Тогда проще всего ознакомиться с алгоритмом Пратта и накидать нужный движочек за пару часов с нуля. Если время работы важнее времени старта — накинь еще пару часиков на реализацию простенького компилятора. В любом случае, за рабочий день, максимум два справишься.

S>В наше время уже так не делают.

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

S>Есть nuget, есть sof. Все что сверх того — то от лукавого.


Тебе шашечки или ехать?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Простой скрипт внутри приложения (в виде строки)
От: _NN_ www.nemerleweb.com
Дата: 17.11.21 17:02
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Кто что посоветует.


S>Нужно чтобы приложение из базы данных брало простой скрипт в виде строки. Подставляло некоторые параметры туда. Что есть из готового?


S>Есть какой-то https://github.com/oleg-shilo/cs-script Но какой-то громоздкий. Не ясно создает ли он временные файлы — желательно без них.


PowerShell не подходит ?
Есть возможность полного контроля песочницы если надо.
Как язык есть некоторые специфичные моменты, зато легко и просто встраивается и тестируется.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: Простой скрипт внутри приложения (в виде строки)
От: bnk СССР http://unmanagedvisio.com/
Дата: 17.11.21 17:07
Оценка:
Здравствуйте, Shmj, Вы писали:

НС>>Тогда проще всего ознакомиться с алгоритмом Пратта и накидать нужный движочек за пару часов с нуля. Если время работы важнее времени старта — накинь еще пару часиков на реализацию простенького компилятора. В любом случае, за рабочий день, максимум два справишься.


S>В наше время уже так не делают. Есть nuget, есть sof. Все что сверх того — то от лукавого.


Попробуй ещё загуглить на гитхабе по ключевым словам. Если увидишь иероглифы, это скорее всего то что тебе нужно. Китайцы не стесняются самостоятельно код писать.
Re[2]: Простой скрипт внутри приложения (в виде строки)
От: Ночной Смотрящий Россия  
Дата: 17.11.21 18:06
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>PowerShell не подходит ?


Тащить целиковый posh просто для вычисления простенького выражения? Камон, бро, это совсем уж аут оф здравый смысл. Если уж вот прям приспичило что то готовое — есть море небольших библиотек, ссылки на которые постят тут регулярно.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.