Страница 2 из 2

Игры с Evaluate

Добавлено: 05 Август 2023, 20:19
Губин Игорь
finsoftrz писал(а): 05 Август 2023, 20:18 Ну, не совсем разбор, достаточно найти первый "=". Других вариантов я не знаю, скорее всего, их и нет.
Как не назови, суть от этого не меняется. Сложности в этом нет, но потери в скорости есть.

Игры с Evaluate

Добавлено: 05 Август 2023, 20:20
finsoftrz
Лайфхак. Можешь редактор с подсветкой синтаксиса и прочими прибамбасами прицепить в программу на базе scintilla.

Игры с Evaluate

Добавлено: 05 Август 2023, 20:22
finsoftrz
Губин Игорь писал(а): 05 Август 2023, 20:19
finsoftrz писал(а): 05 Август 2023, 20:18 Ну, не совсем разбор, достаточно найти первый "=". Других вариантов я не знаю, скорее всего, их и нет.
Как не назови, суть от этого не меняется. Сложности в этом нет, но потери в скорости есть.
По сравнению с компилированным кодом, безусловно.

Игры с Evaluate

Добавлено: 05 Август 2023, 20:23
Губин Игорь
Дед Пахом писал(а): 05 Август 2023, 20:19 Я и слов таких не знаю.
А придётся... Если, конечно, в клиентах оборонка, газовики, нефтянка и т.п.
Там принято жёсткое решение по уходу с виндов. Вопрос, лишь, в сроках. В одной конторе ещё работают на виндах, но уже отказываются рассматривать покупку софта не работающего под вайн или не имеющего нативной версии под линукс.

Игры с Evaluate

Добавлено: 05 Август 2023, 20:28
Дед Пахом
Я тебе решение предлагаю, а ты мне про какую-то контору.

Игры с Evaluate

Добавлено: 05 Август 2023, 20:28
Губин Игорь
finsoftrz писал(а): 05 Август 2023, 20:20 Лайфхак. Можешь редактор с подсветкой синтаксиса и прочими прибамбасами прицепить в программу на базе scintilla.
А нафига? :dizzy: Тогда уж и интерфейс в сбермегамаркету для заказа чипсов. :lol:

Формулы набивают не пользователи. Они заданы изначально, могут быть свои для каждой записи и могут меняться, время от времени.

Игры с Evaluate

Добавлено: 05 Август 2023, 20:31
Губин Игорь
Дед Пахом писал(а): 05 Август 2023, 20:28 Я тебе решение предлагаю, а ты мне про какую-то контору.
У меня серийный софт. Решение должно учитывать интересы и таких контор. Да и сейчас у них денег становится всё больше.

Игры с Evaluate

Добавлено: 05 Август 2023, 20:43
Дед Пахом
Для нефтяников: vbscript/javascript это не файл, запускаемый посредством RUN. Это _технология_ Active Scripting, встроенная в Windows с 1875 года, позволяет выполнять скрипты в виртуальной скрипт-машине. Есть готовая адаптация на Clarion в исходниках. Нет внешних dll, ocx, exe. По сути, это специфическое Windows API.

Игры с Evaluate

Добавлено: 05 Август 2023, 20:50
Губин Игорь
Дед Пахом писал(а): 05 Август 2023, 20:43 Это _технология_ Active Scripting, встроенная в Windows с 1875 года
1875? Ну нифига себе... :dizzy:

Речь о том, как эта технология работает под Linux/Wine. Требует ли она подключения дополнительных модулей. Есть ли эти модули в репозиториях одобренных свыше вариантов Линукса... И т.д. И т.п.

Т.е., если раньше на слова Линукс и Макось я кривил рожу, то теперь вопросы с маками, практически, исчезли, а вот работоспособность под Linux/Wine становится обязательной и превалирующей.

Игры с Evaluate

Добавлено: 05 Август 2023, 21:23
Дед Пахом
Погуглил "wine active scripting", нашёл статью про какой-то релиз Wine от 16-го года, в списке изменений есть "Active Scripting improvements".

Игры с Evaluate

Добавлено: 05 Август 2023, 21:25
Игорь Столяров
Губин Игорь писал(а): 05 Август 2023, 19:12 C = 10*B + D
Проблема в том, что Вы не знаете сами является ли эта операция логической или вычислительной с присвоением.
Evaluate расчитает эту строку как логическое сравнение. Если Вы знаете по какому признаку у Вас операция будет
вычислительной - отсекайте всё что справа от "=", расчитывайте и присваивайте тому что слева от "=". Вот и всё. :)

Игры с Evaluate

Добавлено: 05 Август 2023, 21:25
Губин Игорь
гляну...

Игры с Evaluate

Добавлено: 05 Август 2023, 21:31
Губин Игорь
Игорь Столяров писал(а): 05 Август 2023, 21:25 Если Вы знаете по какому признаку у Вас операция будет
вычислительной - отсекайте всё что справа от "=", расчитывайте и присваивайте тому что слева от "=". Вот и всё.
да ну, а мужики-то не знают... :dizzy: :lol:

Почему так работает, было понятно после первой же проверки алгоритма. Вопрос в том, что мне жутко не хотелось разбирать формулы и играться с присвоением для каждой записи. Я писал, что есть, относительно очевидный, способ с присвоением через вызываемую в Evaluate дополнительную функцию. Но это, всё равно, накладные расходы, хотя и меньшие, чем с разбором.

В общем, понятно, что фичи нет. Буду тестировать варианты.

Игры с Evaluate

Добавлено: 06 Август 2023, 7:18
Игорь Столяров
Губин Игорь писал(а): 05 Август 2023, 21:31 Буду тестировать варианты
Рассмотрите вот такой вариант.
Т.к. символ "=" вызывает неоднозначность от контекста использования,
добавляем в синтаксис понятие "присвоить значение". Ну например "<<".

1. Проверяем строку на наличие символа "<<".
Если его нет - расчитываем как обычно результат логического сравнения.

2. Если есть (C << 10*B + D) - разрезаем строку по "<<", расчитываем правую часть
и присваиваем результат переменной в левой части. Это две строки кода.

3. Всё. Если оплата повремённая и Заказчик финансово состоялся -
то конечно уже лучше притянуть за уши скрипты и т.д. :)

Игры с Evaluate

Добавлено: 06 Август 2023, 9:12
finsoftrz
Губин Игорь писал(а): 05 Август 2023, 21:31
Игорь Столяров писал(а): 05 Август 2023, 21:25 Если Вы знаете по какому признаку у Вас операция будет
вычислительной - отсекайте всё что справа от "=", расчитывайте и присваивайте тому что слева от "=". Вот и всё.
да ну, а мужики-то не знают... :dizzy: :lol:

Почему так работает, было понятно после первой же проверки алгоритма. Вопрос в том, что мне жутко не хотелось разбирать формулы и играться с присвоением для каждой записи. Я писал, что есть, относительно очевидный, способ с присвоением через вызываемую в Evaluate дополнительную функцию. Но это, всё равно, накладные расходы, хотя и меньшие, чем с разбором.

В общем, понятно, что фичи нет. Буду тестировать варианты.т
Потестируй ещё bindexpression. Я не пользовался, а судя по доке, преобразует выражение в некий промежуточный байт код. В то время как evaluate при каждом вызове делает синтаксический разбор. Если делается часто, например, для каждой записи из списка, должно заметно ускорить вычисления.