Страница 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.
 
А нафига?  

 Тогда уж и интерфейс в сбермегамаркету для заказа чипсов.  
 
Формулы набивают не пользователи. Они заданы изначально, могут быть свои для каждой записи и могут меняться, время от времени.
 
			 
			
					
				Игры с 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? Ну нифига себе...  
 
Речь о том, как эта технология работает под 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
Если Вы знаете по какому признаку у Вас операция будет
вычислительной - отсекайте всё что справа от "=", расчитывайте и присваивайте тому что слева от "=". Вот и всё.
 
да ну, а мужики-то не знают...  
  
 
Почему так работает, было понятно после первой же проверки алгоритма. Вопрос в том, что мне жутко не хотелось разбирать формулы и играться с присвоением для каждой записи. Я писал, что есть, относительно очевидный, способ с присвоением через вызываемую в 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
Если Вы знаете по какому признаку у Вас операция будет
вычислительной - отсекайте всё что справа от "=", расчитывайте и присваивайте тому что слева от "=". Вот и всё.
 
да ну, а мужики-то не знают...  
  
 
Почему так работает, было понятно после первой же проверки алгоритма. Вопрос в том, что мне жутко не хотелось разбирать формулы и играться с присвоением для каждой записи. Я писал, что есть, относительно очевидный, способ с присвоением через вызываемую в Evaluate дополнительную функцию. Но это, всё равно, накладные расходы, хотя и меньшие, чем с разбором. 
В общем, понятно, что фичи нет. Буду тестировать варианты.т
 
Потестируй ещё bindexpression. Я не пользовался, а судя по доке, преобразует выражение в некий промежуточный байт код. В то время как evaluate при каждом вызове делает синтаксический разбор. Если делается часто, например, для каждой записи из списка, должно заметно ускорить вычисления.