[libre-riscv-dev] [Bug 353] formal proof of soc.regfile classes RegFile and RegFileArray needed

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Wed May 27 19:40:38 BST 2020


https://bugs.libre-soc.org/show_bug.cgi?id=353

--- Comment #7 from Cole Poirier <colepoirier at gmail.com> ---
(In reply to Luke Kenneth Casson Leighton from comment #6)
> (In reply to Cole Poirier from comment #5)
> 
> > Are class attributes (self.x) declared within __init__ public and those
> > declared within elaborate() private? 
> 
> in python the concept of public and private in classes does not exist, like
> it does in c++
> 
> class instance atttributes are therefore *always* public.  there does exist
> however a convention that if something starts with underscores it is *by
> convention* considered "not for public use".
> 
> what you are getting confused about is "scope".
> 
> within a function, any local variables are entirely local.  however note
> that stuff declared in a module is *also* accessible within the function.
> 
> therefore, only variables created *inside* the function are private scope to
> that function.

Thank you for clarifying this for me. My first language three years ago was
python (primarily pandas and numpy for data analysis), so I'm reasonably
comfortable with python scopes, the mistake I made was not thinking I had to
call elaborate first, which is about as silly. I also appreciate the review of
python vs c/c++, but I'm only proficient in python and rust, (and javascript if
I absolutely must**), so my OOP knowledge only comes from python, I don't know
how to write the other stuff like public/private classes, I can only sort of
read it because I've had to learn to understand when reading c/c++/java/go
code.

**I prefer doing UI in elm, which is a functional language that's designed
specifically for UI design that's transpiled to js. I bring this up because I
think you might find interesting to check out in a free moment because of your
work on pyjamas

> > I though all python class attributes
> > were public, and in order to get 'private' variables in a class you have to
> > do as you did in virtual_port.py by simply declaring it a variable and not
> > an attribute of the class object. I ask because I'm having an issue where
> > I'm trying to access self.reg of class Register(), which is declared inside
> > elaborate(),
> 
> no it is not declared (this is not c), it is created, and it is created only
> when the function elaborate is called.
> 
> how can you expect Register.reg to be created when Register.elaborate has
> not been called?
> 
> > and I get an error, but accessing any of the self.xyz
> > attributes like self.width declared in __init__ works fine.
> 
> this is correct behaviour.  python is not a static language.
> 
> commit it let's have a look.

With you... now. Pushed my commit.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-riscv-dev mailing list