CIDC 2015

Кларионовские новости
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2285
Зарегистрирован: 06 Ноябрь 2014, 12:48

CIDC 2015

Сообщение finsoftrz »

Кларионовский evaluate работает очень медленно. А так, к нему несложно прикрутить циклы, условия и т.п. Пользовался когда-то таким, потом концепция сменилась. Lua или питон должны быть в этом отношении более оптимизированы, т.к. там есть предварительная трансляция в байт-код. Но пользователи крайне редко что сами могут делать, в крайнем случае привлекут местного эникейщика. А это уже с нашей стороны будет игра на чужом поле. Как мне кажется, наиболее разумный подход заключается в использовании "мастер-процедур". То есть некоторая предопределенная процедура с конкретным назначением, а формы можно создавать свои в программе. Ну, по примеру, как в FRB, только не зацикливать вывод в кларионовскую report-структуру, с которой, кроме печати, особо не поработаешь.
C6/C11, ШВС, tps/btrieve.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4948
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

CIDC 2015

Сообщение Игорь Столяров »

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

Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 17:49

CIDC 2015

Сообщение 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

kreator
✯ Ветеран ✯
Сообщения: 3992
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

CIDC 2015

Сообщение kreator »

Shur писал(а): if (amount ~= amount)
Красиво!!!
We are hard at work… for you. :)

Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 17:49

CIDC 2015

Сообщение Shur »

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

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

   if amount == nil then return false end

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2285
Зарегистрирован: 06 Ноябрь 2014, 12:48

CIDC 2015

Сообщение 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() 
Группы - это типа рутинок, их можно вызывать друг из друга, располагать в разных файлах и т.п. Некрофилия...
C6/C11, ШВС, tps/btrieve.

Аватара пользователя
Admin
Администратор
Сообщения: 3614
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

CIDC 2015

Сообщение Admin »

Ой кстати хочу фичу!!!

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

MAP
  SomeProc(CSTRING Text)
END

CODE
  SomeFunc(CSTRING('test')) ! т.с. приведение типов :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Ответить