From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 3D0DC469719 for ; Sat, 3 Oct 2020 16:55:25 +0300 (MSK) References: <20201001135113.329664-1-gorcunov@gmail.com> From: Vladislav Shpilevoy Message-ID: Date: Sat, 3 Oct 2020 15:55:23 +0200 MIME-Version: 1.0 In-Reply-To: <20201001135113.329664-1-gorcunov@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [Tarantool-patches] [PATCH v4 0/6] box/func: implement cfunc Lua module List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Cyrill Gorcunov , tml Cc: Alexander Turenko Hi! Thanks for the patchset! On 01.10.2020 15:51, Cyrill Gorcunov wrote: > The cfunc module provide a way to execute C stored procedures > on read only nodes without registring them in `_func` system space. > > The series implements a bare minimum. There was a request to make > cfunc been Lua object with appropriate methods. If this is really > preferred then I'll implement this wrapping Lua code on top. I mean > that currently all operations are done via > > > require('cfunc').[create|drop|call|reload] > > interface while there was a proposal to operate as > > > a = require('cfunc').create > > a:call(args) No, the proposal was rather cfunc = require('cfunc') f = cfunc.load('test_box_c_function') f(1, 2, 3) Sorry I didn't describe it properly anywhere. But it is easy to fix anyway. In Lua you can define __call and make an object look exactly like a function. That is the idea behind making it possible to use Lua and C functions in the same way. if load_c then f = cfunc.load('test_box_c_function') else f = function(a, b, c) return a + b + c end end f(1, 2, 3) -- Works and looks the same for C and Lua. With this way even IPROTO_CALL should work on such functions, if the function object is global and the user has access to executing everything here.