Thursday, March 8, 2012

py object^variable, Type, Value, immutable, initialize..

[[Python essential reference]] points out that an Object [1] has an address (immutable), a value and a Type, which is the so-called run-time type. An object is always a run-time thing and doesn't have any "declared type" per-se.

Now contrast a variable, which is 1st) a compile-time thing, and 2nd) a run-time thing when bound to an Object. Think of a variable as a nickname for an object otherwise identified by address. Same nickname can later to given to a different object -- variable re-assigning/re-binding. See also post on rooted vs re-bindable variables.

In most languages, a variable has a name (immutable), Type (immutable), and after initialization a Value (See footnote [3] for a concrete example.) --

* The type of a variable is the declared type. No such thing as a run-time type because a variable exists in source code only and often disappears after compilation.
* (The type of an object is the run-time type. No such thing as a declared type, because that is a compile-time concept and objects exist only at run-time.)

The "type" concept is non-trivial. Hardware knows bits and not types. Types are created by compilers. Run-time type comes into existence when the run-time instantiates a known type -- int, Account etc.

All programming languages rely on types, even dynamic ones. Python/perl variables (not "Objects") are typeless because the same nickname can re-bind to vastly different objects at run-time. This is one of the fundamental defining features of dynamic languages vs strong-typing languages.

#### Value means ....
# Value (or state) of an object is usually mutable.
# Value or "Binding" of a variable is usually changeable, but there are important exceptions [2]
## when we say a variable myAge is immutable, we mean the object behind the "nickname" is immutable. Mutability traditionally refers to object state.

++++ initialization means ...
+ object initialization means changing the bits in the storage-location from some random uninitialized values
+ variable initialization means Assigning a "nickname" to some object. Until initialized, the nickname is unbound but languages often null-initialize by default.
++ in c++ however, declaring a variable of MyType implicitly instantiates MyType on the stack or (if the variable is a field) inside a host object's real estate.

-----------------
Now we realize these most basic "nouns" are a minefield of confusion. Why bother? Well, they matter when you compare languages and read technical documentations.

====Some concrete illustrations using pythyon:
= python tuple variables are re-assignable, but immutable
= python string variables are re-assignable, but immutable (=java). All string methods and operators are readonly.
= python simple numeric variables are re-assignable but probably immutable. "a=2; id(a); a=3; id(a)" shows the variable re-bound -- bold departure from C nonref variables. Effectively, such a numeric Object is an immutable copy-on-write object with a reference count.

[1] defined as a storage-location in [[ARM]], be it 1 byte or 1000 bytes. I don't like the jave redefinition of Object.
[2] such as c++ references and primitive/value-type/nonref variables like myInt. I'd say the population of everyday variables are 50% re-bindable and 50% rooted, just like male/female populations. This is actually the worst minefield of confusion. In C, all non-pointer variables are rooted and all pointer variables can re-bind. C++ reference variables muddy the water. java/c# followed (java -- cleanest rules). Python deviates further.
[3] In the simplest traditional scenario, a C myInt variable is permanently bound (rooted) to a 32-bit mutable object -- immutable binding, address, run-time type, declared-type, name, but mutable state.

No comments:

Total Pageviews

my favorite topics (labels)

_fuxi (302) _misLabel (13) _orig? (3) _rm (2) _vague (2) clarified (58) cpp (39) cpp_const (22) cpp_real (76) cpp/java/c# (101) cppBig4 (54) cppSmartPtr (35) cppSTL (33) cppSTL_itr (27) cppSTL_real (26) cppTemplate (28) creditMkt (14) db (65) db_sybase (43) deepUnder (31) dotnet (20) ECN (27) econ/bank` (36) fin/sys_misc (43) finGreek (34) finReal (45) finRisk (30) finTechDesign (46) finTechMisc (32) finVol (66) FixedIncom (28) fMath (7) fMathOption (33) fMathStoch (67) forex (39) gr8IV_Q (46) GTD_skill (15) GUI_event (30) inMemDB (42) intuit_math (41) intuitFinance (57) javaMisc (68) javaServerSide (13) lambda/delegate (22) marketData (28) math (10) mathStat (55) memIssue (8) memMgmt (66) metaProgram` (6) OO_Design (84) original_content (749) polymorphic/vptr (40) productive (21) ptr/ref (48) py (28) reflect (8) script`/unix (82) socket/stream (39) subquery/join (30) subvert (13) swing/wpf (9) sysProgram` (16) thread (164) thread_CAS (15) thread_cpp (28) Thread* (22) timeSaver (80) transactional (23) tune (24) tuneDB (40) tuneLatency (30) z_ajax (9) z_algoDataStruct (41) z_arch (26) z_arch_job (27) z_automateTest (17) z_autoTrad` (19) z_bestPractice (39) z_bold (83) z_bondMath (35) z_book (18) z_boost (19) z_byRef^Val (32) z_c#GUI (43) z_c#misc (80) z_cast/convert (28) z_container (67) z_cStr/arr (39) z_Favorite* (8) z_FIX (15) z_forex (48) z_fwd_Deal (18) z_gz=job (33) z_gzBig20 (13) z_gzMgr (13) z_gzPain (20) z_gzThreat (19) z_hib (19) z_IDE (52) z_ikm (5) z_IR_misc (36) z_IRS (26) z_javaWeb (28) z_jdbc (10) z_jobFinTech (46) z_jobHunt (20) z_jobRealXp (10) z_jobStrength (15) z_jobUS^asia (27) z_letter (42) z_linq (10) z_memberHid` (11) z_MOM (54) z_nestedClass (5) z_oq (24) z_PCP (12) z_pearl (1) z_php (20) z_prodSupport (7) z_py (31) z_quant (14) z_regex (8) z_rv (38) z_skillist (48) z_slic`Problem (6) z_SOA (14) z_spring (25) z_src_code (8) z_swingMisc (50) z_swingTable (26) z_unpublish (2) z_VBA/Excel (8) z_windoz (17) z_wpfCommand (9)

About Me

New York (Time Square), NY, United States
http://www.linkedin.com/in/tanbin