CIDC 2015
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4629
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
CIDC 2015
Кларионовский evaluate работает очень медленно. А так, к нему несложно прикрутить циклы, условия и т.п. Пользовался когда-то таким, потом концепция сменилась. Lua или питон должны быть в этом отношении более оптимизированы, т.к. там есть предварительная трансляция в байт-код. Но пользователи крайне редко что сами могут делать, в крайнем случае привлекут местного эникейщика. А это уже с нашей стороны будет игра на чужом поле. Как мне кажется, наиболее разумный подход заключается в использовании "мастер-процедур". То есть некоторая предопределенная процедура с конкретным назначением, а формы можно создавать свои в программе. Ну, по примеру, как в FRB, только не зацикливать вывод в кларионовскую report-структуру, с которой, кроме печати, особо не поработаешь.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7385
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 14 раз
- Поблагодарили: 49 раз
CIDC 2015
Вот как раз в эту тему был доклад на CIDC 2015. Думал, может будут какие-то материалы потом опубликованы ...
Ан нет. Толи все секретно, то ли показать народу опять нечего ...
За теми кто отстал - не возвращаться. (С) Кодекс
CIDC 2015
Ну я же не просто так написал про циклы и ветвления. В эвалюэйте этого нет пока (здесь отсыл на CIDC 2015, доклад под названием Calculate Engine).
Фрагмент кода на Lua:
Фрагмент кода на Lua:
Код: Выделить всё
function Log(str)
if config.log_enabled and file ~= nil then
file:write(sformat("%s %s\n",os.date(), str))
end
end
function comma_value(amount)
local formatted = amount
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1 %2')
if (k==0) then
break
end
end
return formatted
end
function round(val, decimal)
if (decimal) then
return math.floor( (val * 10^decimal) + 0.5) / (10^decimal)
else
return math.floor(val+0.5)
end
end
function finite(n)
if (amount ~= amount) or (amount == math.huge) or (amount == -math.huge) then
return false
else
return true
end
end
CIDC 2015
Да уж, выхватил кусок кода, не посмотрев. Функция какая-то кривая. А ведь пишут!
Понятнее было бы написать:
Понятнее было бы написать:
Код: Выделить всё
if amount == nil then return false end
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4629
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
CIDC 2015
Интересно было бы глянуть пример, как подключить и работать с lua из клариона. Действительно ли там достаточно одной dll и сколько она весит? Читал, что питон надо специально инсталить на компьютер пользователя.
Вот, из старых архивов, как когда-то выглядел скрипт на кларионе:
Группы - это типа рутинок, их можно вызывать друг из друга, располагать в разных файлах и т.п. Некрофилия...
Вот, из старых архивов, как когда-то выглядел скрипт на кларионе:
Код: Выделить всё
@GROUP,RASCH,0 Присвоение_1 */ присвоение значений выводимым переменным
*/ ...
!База=GetBaza(P(4,0)) */ смещение для базы в месяцах
!DO SetPeriod(1,F('База')+25) */ сумма
!Сумма1=0
!Сумма2=0
!Ном=0
!LOOP ABSOL
!Ном=F('Ном')+1
!IF F('Ном')>24
!BREAK
!ENDIF
!DO SetPeriod(1,-1)
!DO SetBd()
!IF F('Ном')<13
!Сумма1=F('Сумма1')+GetNak(22,1)
!ELSE
!Сумма2=F('Сумма2')+GetNak(22,1)
!ENDIF
!ENDLOOP
!DO SetPeriod(1,0)
!DO SetBd()
C6/C11, ШВС, tps/btrieve.
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
CIDC 2015
Ой кстати хочу фичу!!!
Код: Выделить всё
MAP
SomeProc(CSTRING Text)
END
CODE
SomeFunc(CSTRING('test')) ! т.с. приведение типов :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса