World: r3wp
[!REBOL3-OLD1]
older newer | first last |
Maxim 11-Feb-2007 [1971] | ladislav, that in C is just what a reference is... you pass not the value, but the pointer which refers to it... in REBOL that is a word. under the hood, in REBOL everything really is a pointer to a value, with an offset within a context, no? |
Ladislav 11-Feb-2007 [1972x2] | ladislav, that in C is just what a reference is - that looks like an error to me - references are in C++ actually. Pointers are passed "by value" in C |
in REBOL everything really is a pointer to a value, with an offset within a context, no? - you can explore how REBOL values look using my hints in this world and at REP | |
Maxim 11-Feb-2007 [1974x4] | lad: a reference to a number is a common usage term which means get the pointer to the memory area where the number is contained... not the value at that pointer. in C series variables have to be pointers, but numbers aren't usually pointers. thus the reference to that number is its pointer. |
if you pass the reference, and chance the value at that adress and change it in place... all "references" to it will change. | |
so I think you are both talking the same language, but with different terminology.... based on your usage of C.. :-) | |
(or C++) | |
Ladislav 11-Feb-2007 [1978] | what you are saying is terminologically misleading. "Pass by value" has got a broadly accepted meaning as well as "pass by reference". If you pass a pointer in C, then you pass it "by value" according to the definition. |
Maxim 11-Feb-2007 [1979x2] | hehe, but you are passing the "value by reference" ;-) |
hehe isn't programming fun? :-D | |
PeterWood 11-Feb-2007 [1981] | Isn't the real difference between passing a pointer by value or by reference is that when you are explicitly passing a pointer it is by value and when you are implicitly passing a pointer then it is by reference. (Well that is my understanding from the difference in Pascal). |
Ladislav 11-Feb-2007 [1982] | that is correct |
Maxim 11-Feb-2007 [1983] | but what about values which are not defined as pointers like an int. |
Ladislav 11-Feb-2007 [1984x2] | so what, are you trying to convince me, that in REBOL ints are "passed by reference"? |
(if you speak about the C/C++ family then it is easy - in C++ you can pass int by reference, in C you cannot) | |
Maxim 11-Feb-2007 [1986x2] | REBOL passes values unless the function requires a "pointer" to them. (not really a pointer, but in use pretty much the same result). |
so I guess in your terminology, only series can be "references" in rebol right? | |
PeterWood 11-Feb-2007 [1988] | Surely one of the distinctions of pass by value and pass by reference is that in pass by value you work on a copy of the value not the value originally refered to: >> a: 1 == 1 >> b: func [a [integer!]][ a: 2] >> print b a 2 >> a: 1 == 1 |
Maxim 11-Feb-2007 [1989] | yes. |
Ladislav 11-Feb-2007 [1990] | series can be references - actually not |
Maxim 11-Feb-2007 [1991x2] | so in your terms, how could a reference be "simulated" in rebol? |
or can they? | |
Ladislav 11-Feb-2007 [1993x2] | why not?, but it does not influence the fact, that when you are passing a word to a function, then you are "passing it by value", not by reference, I can easily show you a proof |
(almost the same Peter wrote above) | |
Maxim 11-Feb-2007 [1995] | I think I just see the nuance in our statements... you're talking about the word supplied to the function I'm really talking about its value. so yess I agree. |
PeterWood 11-Feb-2007 [1996] | except my example was wrong |
Anton 11-Feb-2007 [1997] | I'm with Ladislav on the C front, but it can be said that words are associated with their values, so they are pointers to them. |
Ladislav 11-Feb-2007 [1998] | yes, that is OK |
Maxim 11-Feb-2007 [1999x2] | you never get the actual word submitted to the function, even in the lit-word arg passing, you still get a new word within the function. but its pointing to the same value. |
ah.. what a little scribble on a piece of paper would do in these instances ;-) | |
Ladislav 11-Feb-2007 [2001x2] | ...that is the "pass by value" business |
one exception regarding "pointer business" in REBOL: only words bound to a context can "point" to values | |
Maxim 11-Feb-2007 [2003] | yes... the act of binding creates the association (to use Anton's term :-) |
Ladislav 11-Feb-2007 [2004] | question: do you think that the binding "act" changes the word in question? |
Maxim 11-Feb-2007 [2005x2] | well, my research (of making a single block with 3 word of the same spelling with 3 different contexts and values) lets me to think that it only really sets the word with 2 values. 1) its context 2) its offset within that context (thus the data it should manipulate). otherwise, it stays in place... |
I did not do a lot of tests with aliases, cause I never found them of "obvious" use (man I like that word, since terry used it so often ;-) | |
Ladislav 11-Feb-2007 [2007x2] | I guess everybody would agree with you regarding the "obious" use |
obvious , sorry | |
Maxim 11-Feb-2007 [2009] | hehe |
Geomol 12-Feb-2007 [2010] | Okay, what then if INC/DEC are introduced in the language in a way, so they work more like we're used to with e.g. NEGATE, but at the same time allow, that variables can be changed? We have to use call-by-word (the REBOL way of call-by-reference) to have the variables changed. Like this: >> a: 4 >> inc a == 5 >> a == 4 >> inc 'a == 5 >> a == 5 So INC has to check, if it's called with a word, and then get it's value before adding one, and in the end do a set-word. We could have the same with NEGATE and other functions (actions) of the same kind: >> negate a == -5 >> a == 5 >> negate 'a == -5 >> a == -5 Does that make sense? And is it REBOLish? |
Maxim 12-Feb-2007 [2011x3] | but this tricky word usage usually breaks in situations like path notation |
a word, and a literal word are two things. using a literal to access the associated word in the current context, means you can hardly break free of that word's spelling. | |
and it gets hard to support when going through loads and parse, and all that. | |
Ladislav 12-Feb-2007 [2014] | referentially nontransparent argument passing always "breaks", since it disallows you to use a result of an expression and therefore I don't like it |
Geomol 12-Feb-2007 [2015] | My suggestion is close to Ladislav's ++ function above and is something like: >> inc: func [x] [either word? x [set x 1 + get x] [x + 1]] But as Maxim point out, there are ploblems with paths. But what is the path representing? A block or an object or what? If it's in an object, it'll work this way: >> o: make object! [a: 0] >> inc in o 'a It's harder to deal with values inside blocks. |
Maxim 12-Feb-2007 [2016] | that is the real one for me... using literals as words is not predictable, or limited, or complicated. |
Oldes 12-Feb-2007 [2017x2] | And why this cannot be correct: inc o/'a ? |
maybe it's just too cryptic | |
Volker 12-Feb-2007 [2019] | in this special case: does it make sense toincrementsomething except a word or path? Everything else is a constant. |
Geomol 12-Feb-2007 [2020] | The thing is, if the argument to INC is written as a word (representing a value) or as a lit-word. >> inc a or >> inc 'a With my INC function, the first example wont change a, while the second example will. Or did you mean something else, Volker? |
older newer | first last |