[Scilab-users] Clone a function, continued
Stéphane Mottelet
stephane.mottelet at utc.fr
Wed Feb 28 16:30:19 CET 2018
Thanks Samuel, the problem is that
save('macros/%axesData_i_h.bin', '%axesData_i_h')
will produce a .sod file with a .bin extension. Both formats cannot be
used indifferently for compiled macros of a library : in the following
code (that can be copy/pasted), a library is built, the "fun1" function
is saved in sod format, then the reference to "fun1.bin" is replaced by
"fun1.sod" in the lib file :
path=TMPDIR+'/test/';
mkdir(path)
mputl('function y=fun1(x), y=x, end',path+'fun1.sci');
genlib('test',path)
save(path+'fun1.sod','fun1')
doc=xmlRead(path+'lib');
doc.root.children(1).attributes.file='fun1.sod';
disp(xmlDump(doc))
xmlWrite(doc,path+'lib');
clear
lib(TMPDIR+'/test/')
The following output is obtained:
!<?xml version="1.0" encoding="UTF-8"
standalone="no"?> !
! !
!<scilablib name="test"> !
! !
! <macro name="fun1" file="fun1.sod"
md5="a50d8a8cda2cd6036306e08e61ffcbeb"/> !
! !
!</scilablib> !
Emplacement des fichiers des fonctions : /.
fun1
-->
Unfortunately, calling fun1 crashes scilab...
S.
Le 28/02/2018 à 15:09, Samuel Gougeon a écrit :
> Hello Stéphane,
>
> I would try the following:
> After genlibing the set of regular .sci files,
> * save the clone with
> save('macros/%axesData_i_h.bin', "%axesData_i_h")
> * add a line in the lib file
> <macro name="%axesData_i_h" file="%axesData_i_h.bin" md5="e833d190e21b93af335a011ea9e76aef"/>
> The MD5 hash is of the content of the .sci file, that here does not
> exist. It is use by genlib to check whether the .sci must be
> recompiled or not. You may try to set any md5 (or the cloned one). As
> long as you don't recompile the lib with genlib -- just loading it
> with load() or lib() --, this should work.
>
> My 2 cents..
>
> Samuel
>
>
> Le 28/02/2018 à 14:52, Stéphane Mottelet a écrit :
>> Hello,
>>
>> With the new library system, it is no longer possible to clone a
>> function in a library. This feature is still documented in the help
>> page of "lib" but is not working anymore since saving a user-defined
>> scilab function uses the sod/hdf5 format. Maybe one can ask why such
>> a feature is needed ? Sometimes it can be usefull to have a function
>> which is callable by different names but actually does the same
>> thing. The different calling names can come from the adaptation for
>> different types of data, which can sometimes lead to the same
>> treatment, hence to the same function. Instead of writing two
>> functions with the same source code but a different calling name,
>> cloning the original one was an interesting feature.
>>
>> I admit that the way it worked under scilab<6.x was not clean at all
>> *but* officially documented in the "lib" help page. For example,
>> imagine that a library has just been built (e.g. the plotlib...)
>>
>> genlib('plotlib','macros')
>>
>> I need to add to this library %axesData_i_h which is a clone of
>> generic_i_h (in overloadinglib), which can be done in scilab<6.x by:
>>
>> %axesData_i_h=generic_i_h;
>> save('macros/%axesData_i_h.bin',%axesData_i_h)
>> mputl([mgetl('macros/names');'%axesData_i_h'],'macros/names')
>>
>> I said above "not clean at all", because the binary file "macros/lib"
>> (which is created by the genlib call) does not need to be updated, as
>> a subsequent
>>
>> plotlib=lib("macros")
>>
>> loads all functions, including %axesData_i_h
>>
>>
>> Doing things like this is not possible any more. It was was also to
>> add persistent variables in libraries, with the same mechanism.
>>
>> By the way, under scilab 6.0.1, the "macros/lib" is now an XML file
>> with a clear syntax, e.g.
>>
>> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>> <scilablib name="plotliblib">
>> <macro name="%c_i_pltlibH" file="%c_i_pltlibH.bin"
>> md5="d0966468b335a69681a29d84c99feb5c"/>
>> <macro name="%figureDa_i_h" file="%figureDa_i_h.bin"
>> md5="a1ebda57a1607b28095def2e415e2ec1"/>
>> ...
>> </scilablib>
>>
>> It does not seem to be documented either.
>>
>> S.
>>
>>
>
>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
--
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet
--
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20180228/efd1255e/attachment.htm>
More information about the users
mailing list