Hi all,

I agree that such stricter management of parameters would be wise .

David

________________________________________
De : dev [dev-boun...@lists.scilab.org] de la part de Stéphane Mottelet 
[stephane.motte...@utc.fr]
Envoyé : vendredi 26 février 2021 15:01
À : List dedicated to the development of Scilab
Objet : Re: [Scilab-Dev] [Scilab-users] Variable scope in Scilab

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

_______________________________________________
dev mailing list
dev@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/dev

Reply via email to