[Scilab-Dev] [Scilab-users] Variable scope in Scilab

Stéphane Mottelet stephane.mottelet at utc.fr
Fri Feb 26 15:01:59 CET 2021


Le 26/02/2021 à 14:50, Stéphane Mottelet a écrit :

> Hi devs,
>
> Just after changing the rule in macro.cpp I see this at startup, and I 
> am laughing out loud ;-)
>
> Scilab branch-6.1 (Feb 19 2021, 14:37:51)
> at line    44 of function mdelete            ( 
> /Users/mottelet/git/scilab_6.1.orig/scilab/modules/fileio/macros/mdelete.sci 
> line 57 )
> at line    26 of function atomsAUWriteAccess ( 
> /Users/mottelet/git/scilab_6.1.orig/scilab/modules/atoms/macros/atoms_internals/atomsAUWriteAccess.sci 
> line 42 )
> at line    11 of function atomsSystemInit    ( 
> /Users/mottelet/git/scilab_6.1.orig/scilab/modules/atoms/macros/atomsSystemInit.sci 
> line 27 )
>
> Wrong number of input arguments.
>
> -->
>
> Does it mean that we use the "crappy shortcut" as a feature in Scilab 
> internals ?

of course nobody uses it, my patch waas a little bit rude. We have the 
right to call macros with less arguments than the number of formal input 
arguments, hence when inheriting the outer context then there is a 
complete confusion between the formal parameter name and the same name 
of a symbol in the outer context. Inheritance should be OK for all 
symbols BUT formal input parameters.

S.

>
> S.
>
> Le 26/02/2021 à 14:38, Stéphane Mottelet a écrit :
>> Hi all,
>>
>> In Scilab the scope of variables is quite permissive but even in 
>> Julia (really strict rules) we can have the following behavior:
>>
>> function y=f(x)
>>  y=x+a;
>> end
>>
>> a=1;
>> f(2)
>> a=2;
>> f(3)
>>
>> -> a=1;
>>
>> --> f(2)
>>  ans  =
>>
>>    3.
>>
>> --> a=2;
>>
>> --> f(3)
>>  ans  =
>>
>>    5.
>>
>> Yesterday afternoon I was my students for a Scilab beginners 
>> tutorial, and by accident one of them had "x" defined before in the 
>> main workspace and tried to call f without arguments. I reproduce the 
>> experiment here by explicitely defining x before the call:
>>
>> x=1;
>> f
>>
>> --> x=1;
>>
>> --> f
>>  ans  =
>>
>>    3.
>>
>> Allowing the function inner scope to see variables of the outer scope 
>> is one thing, you may or may not agree this is not the point here, 
>> but allowing to call f without arguments just because the formal 
>> input parameter has the same symbol as an outer scope symbol is 
>> another thing. I knew this was possible even if i never used such a 
>> feature, but my students were so puzzled by this, particularly those 
>> who already learned other low-level languages, that I decided to 
>> propose the suppression of this, that I consider as a serious 
>> potential source of many bugs. Don't tell me that this would break 
>> some user code because I frankly have no consideration for this kind 
>> of crappy shortcut and, sorry if it may sound rude, for programmers 
>> who use it...
>>
>> S.
>>
-- 
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




More information about the dev mailing list