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

CIDC 2015

Добавлено: 29 Октябрь 2015, 17:11
finsoftrz
Кларионовский evaluate работает очень медленно. А так, к нему несложно прикрутить циклы, условия и т.п. Пользовался когда-то таким, потом концепция сменилась. Lua или питон должны быть в этом отношении более оптимизированы, т.к. там есть предварительная трансляция в байт-код. Но пользователи крайне редко что сами могут делать, в крайнем случае привлекут местного эникейщика. А это уже с нашей стороны будет игра на чужом поле. Как мне кажется, наиболее разумный подход заключается в использовании "мастер-процедур". То есть некоторая предопределенная процедура с конкретным назначением, а формы можно создавать свои в программе. Ну, по примеру, как в FRB, только не зацикливать вывод в кларионовскую report-структуру, с которой, кроме печати, особо не поработаешь.

CIDC 2015

Добавлено: 29 Октябрь 2015, 17:35
Игорь Столяров
finsoftrz писал(а): Кларионовский evaluate работает очень медленно. А так, к нему несложно прикрутить циклы, условия и т.п.
Вот как раз в эту тему был доклад на CIDC 2015. Думал, может будут какие-то материалы потом опубликованы ...
Ан нет. Толи все секретно, то ли показать народу опять нечего ... ;)

CIDC 2015

Добавлено: 29 Октябрь 2015, 17:39
Shur
Ну я же не просто так написал про циклы и ветвления. В эвалюэйте этого нет пока (здесь отсыл на CIDC 2015, доклад под названием Calculate Engine).
Фрагмент кода на 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

Добавлено: 29 Октябрь 2015, 17:47
kreator
Shur писал(а): if (amount ~= amount)
Красиво!!!

CIDC 2015

Добавлено: 29 Октябрь 2015, 17:51
Shur
Да уж, выхватил кусок кода, не посмотрев. Функция какая-то кривая. А ведь пишут!
Понятнее было бы написать:

Код: Выделить всё

   if amount == nil then return false end

CIDC 2015

Добавлено: 29 Октябрь 2015, 18:04
finsoftrz
Интересно было бы глянуть пример, как подключить и работать с 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() 
Группы - это типа рутинок, их можно вызывать друг из друга, располагать в разных файлах и т.п. Некрофилия...

CIDC 2015

Добавлено: 30 Октябрь 2015, 14:43
Admin
Ой кстати хочу фичу!!!

Код: Выделить всё

MAP
  SomeProc(CSTRING Text)
END

CODE
  SomeFunc(CSTRING('test')) ! т.с. приведение типов :)