1. eg

Some questions regarding eg --

One, can eudir take a string as input?

Two, can eudir be used in an if statement?

if platform() = LINUX then
   eudir ~/myeuphoria
else
   eudir C:\myeuphoria
end if


Three, another enhancement asked for was for object(o) to return zero for
unitialized vars.  Any plans?

Four, your routine_list() and variable_list() functions say they "Return a list
of all routines registered with routine_id() or variable_id()".  Does that mean
you have to have used routine_id() or variable_id() for a variable before it
shows up, or will it return a list of all identifiers?  What about scope?

Thanks.  If I had a chance to check it out before next week I would.

PS -- it looks like you're 'it' for trying out new stuff...  I still want to
study the interpreter but I'm still not very good at reading and understanding
long programs.


j.

new topic     » topic index » view message » categorize

2. Re: eg

Jason Gade wrote:
> PS -- it looks like you're 'it' for trying out new stuff...  I still want to
> study
> the interpreter but I'm still not very good at reading and understanding long
> programs.

I should have put ;^) after that...  I think that it's cool that you've been
able to modify the interpreter source already.

j.

new topic     » goto parent     » topic index » view message » categorize

3. Re: eg

> One, can eudir take a string as input?

Yes, just make sure you use double back-slashes like any other string.
"C:\\EUPHORIA"
 
> Two, can eudir be used in an if statement?

As of yet, no. But I'm looking into eudir and include working in any
level of code, if, for, while, procedure, function, type, etc..

> Three, another enhancement asked for was for object(o) to return zero for
> unitialized vars.  Any plans?

This was actually my suggestion, so yes. I actually forgot about it.
It will be in the next release.

> Four, your routine_list() and variable_list() functions say they "Return a
> list of all routines registered with routine_id() or variable_id()".  Does that
> mean you have to have used routine_id() or variable_id() for a variable before it
> shows up, or will it return a list of all identifiers?  What about scope?

You must explicitly call, or have called routine_id() or variable_id()
at one time. The reason is that the routine id list and variable id
list are not the same as the symbol table. routine_id() adds your
routine to its internal list and returns the index (starting from 1),
and the same for variable_id().

Scope is not affected. You can call variable_id() inside a procedure
or in another include file. You just won't be able to read/write the
variable once it no longer exists. I am working on a way to determine
if a variable_id() is valid or not.

> PS -- it looks like you're 'it' for trying out new stuff...  I still want to
> study the interpreter but I'm still not very good at reading and understanding
> long programs.

I'm still learning... there's a few things I don't understand about
the interpreter yet. I'm sure my variable_id() will cause some issues
with variables that are no longer used and such, but I'm getting
there. The more features I add, the more easier it gets. And yes,
"more easier" is a technical term.  :)

Truthfully, this all comes out of my own selfishness. I wasn't going
to share my new interpreter at first, but I figured why not? Somebody
needs to give everyone the features they want!

~Greg

new topic     » goto parent     » topic index » view message » categorize

4. Re: eg

Jason Gade wrote:
> 
> PS -- it looks like you're 'it' for trying out new stuff...  I still want to
> study
> the interpreter but I'm still not very good at reading and understanding long
> programs.
> 

Well, not quite, but he's the first to release anything.  I've been working
on my object oriented euphoria concept.  It seems to be working quite 
well (although I'm trying to come up with a better keyword than 'class', 
since that's such a common variable name--any suggestions?).  

I'm in the process now of allowing saving of the already parsed il code
for later execution.

Matt Lewis

new topic     » goto parent     » topic index » view message » categorize

5. Re: eg

Matt Lewis wrote:

> (although I'm trying to come up with a better keyword than 'class', 
> since that's such a common variable name--any suggestions?).

Use 'class' regardless. People will come up with other variable names. :)

-=ck
"Programming in a state of EUPHORIA."
http://www.cklester.com/euphoria/

new topic     » goto parent     » topic index » view message » categorize

6. Re: eg

Matt, will you be attempting to do a version of the Euphoria whereby we can do
nice things like:

class fred
  ... etc

  ifred = new fred
  ifred.a_method(params)

ie. as opposed to things like: call_method( ifred, "a_method",params )

In other words an enhanced OO call structure and "dot" access operator (or
suchlike)??

If so then you will be IT (and I really mean it :))

. .. : :: = == == = :: : .. .
Server-Side DB driven web sites,
Software Development
and part-time games developer

contact dave_p at purpletiger dot com
. .. : :: = == == = :: : .. .

new topic     » goto parent     » topic index » view message » categorize

7. Re: eg

Okay, so I lied.  I took about an hour to test out eg.  I made a framework that
answered my questions above, and it all makes sense.  One thing, though, I used a
assigned string constant for the eudir directive and I think it worked (need to
test some more), but the interpreter warned that the constant wasn't used.

Also I tested sanity.ex.  I had to create a new copy called sanity.eg because
sanity.ex has an identifier called 'eudir' that clashed with your new keyword. 
Otherwise, everything seemed to work.

I liked the idea of embedding ed into the interpreter until I tried using it. 
Then I remember how much I like using even Microsoft edit better!  There must be
a better (but still stable) editor...

j.

new topic     » goto parent     » topic index » view message » categorize

8. Re: eg

Matt Lewis wrote:
> well (although I'm trying to come up with a better keyword than 'class', 

Matt:
    How about 'Group' or 'Collection'

Bernie

My files in archive:
w32engin.ew mixedlib.e eu_engin.e win32eru.ew

Can be downloaded here:
http://www.rapideuphoria.com/cgi-bin/asearch.exu?dos=on&win=on&lnx=on&gen=on&keywords=bernie+ryan

new topic     » goto parent     » topic index » view message » categorize

9. Re: eg

cklester wrote:
> 
> Matt Lewis wrote:
> 
> > (although I'm trying to come up with a better keyword than 'class', 
> > since that's such a common variable name--any suggestions?).
> 
> Use 'class' regardless. People will come up with other variable names. :)

The only problem with this is that things like Win32Lib and the Judith's
IDE already use 'class'.  It seems like suicide to automatically cross
them out (or make people modify them).  My current word is 'class_typedef'.

BTW, I seem to have 'shrouding' (there's not really any encryption) and
binding (with a translated and compiled executable) working.

Matt Lewis

new topic     » goto parent     » topic index » view message » categorize

10. Re: eg

> although I'm trying to come up with a better keyword than 'class',
> since that's such a common variable name--any suggestions?

Maybe 'type' (with a different syntax than the existing 'type'),
or 'kind'?

--
The Internet combines the excitement of typing 
with the reliability of anonymous hearsay.
tommy online: http://users.telenet.be/tommycarlier
tommy.blog: http://tommycarlier.blogspot.com

new topic     » goto parent     » topic index » view message » categorize

11. Re: eg

Dave Probert wrote:
> 
> Matt, will you be attempting to do a version of the Euphoria whereby 
> we can do nice things like:
> 
> class fred
>   ... etc
> 
>   ifred = new fred
>   ifred.a_method(params)
> 
> ie. as opposed to things like: call_method( ifred, "a_method",params )
> 
> In other words an enhanced OO call structure and "dot" access 
> operator (or suchlike)??
> 
> If so then you will be IT (and I really mean it :))

Yes, that's pretty much exactly what I'm doing.

Below is my working specification/documentation (note that things are
subject to change).  One thing that's not in there is that I'm leaving
the backend alone, so I'm outputting RDS compatible IL code.  This means
that there are two possibilities for running your code with an RDS
backend:

  1) Someone writes a pre-processor to convert object oriented stuff
     to RDS compatible code. (Not quite trivial, but should be possible.)

  2) RDS allows '2-step' binding like I've asked for here. (Trivial for
     RDS to do, but probably not probable.)


--Class Specification
---------------------------------------------
global class_typedef ClassName( ClassDataType x ) 
	function fMethod()
	
	end function
	
	function fMethod( atom a )
	
	end function
	
	procedure pMethod()
	
	end procedure	

end class_typedef

ClassName instance
instance = SomeValue

instance.pMethod( instance.fMethod( instance.fMethod() ) )

--Routine Decoration
----------------------------------------------

All routines in a class get decorated so that proper polymorphism can 
take place.  An '@' will be appended to the routine name, followed by 
the datatypes of the parameters (o: object, a: atom, i: integer, 
s: sequence, @ClassName@: instance of some class, !UserDefinedType!: 
a user defined type).

Also each method will have a 'this' parameter of the class' type 
automatically added.  It won't show in the source, but can be used 
(like in C++).  It will show up in any debug reports.

The routine signatures will be used to allow for a type of polymorphism 
based on the arguments  supplied.  The best match for the routine will 
be called.  Since Euphoria isn't very strict with types, there may be 
ambiguity as to the actual data types being used.  For instance, you might 
use an object parameter, where methods exist for either an atom or a 
sequence.  Also, since a function can return anything, any parameter that 
is created as a temp from a function return will be treated as an object.  
If there are multiple methods that match up equally well, one will be 
arbitrarily picked, and a warning will be generated.  You may receive 
run time type check errors because of this.

You can use routine_id() on methods, but will need to pass the 
fully decorated routine name:

    id = routine_id( "method@class@a!my_type!si" )

However, routines in a local class will only be visible from within 
the file itself, unless the routine itself is declared global, even 
if other global classes inherit from the class.

--Scope
-----------------------------------------------

Class methods will have the same scope as their classes.  However, 
inherited routines from local classes will be treated the same as the 
calling class.


--Inheritance
-----------------------------------------------

Classes can inherit from one super class (which can in turn inherit 
from other classes).  Methods from super classes will be called if the 
method isn't overridden.  Inheritance is defined by creating the class' 
datatype as some other class:

class_typedef foo( integer f )
    ...
end class_typedef

class_typedef bar( foo b )
    ...
end class_typedef

--Calling a method
------------------------------------------------

Dot notation:

object.method()


--Casting
------------------------------------------------

In order to cast and use a variable as a class, you can either assign 
it to a variable that is of the class type, or call it in a method call 
with the name of the class as the instance, and by adding the variable 
to be cast as the first parameter:

class Something( atom s )
	-- ...
end class

atom a
Something x
a = 5
x = a
x.Method()
Something.Method(a)


--Construction / Destruction
-------------------------------------------------

There is no real concept of this, although you could define a class 
with constructors that do something (allocate memory, or fill a 
sequence) as follows:

class Something( atom x )
	function create()
		-- ignore the this variable...
		return allocate(4)
	end function
end class

Something s
s = Something.create(0)

Matt Lewis

new topic     » goto parent     » topic index » view message » categorize

12. Re: eg

Bernie Ryan wrote:
> 
> Matt Lewis wrote:
> > well (although I'm trying to come up with a better keyword than 'class', 
> 
> Matt:
>     How about 'Group' or 'Collection'
> 

Those could work...

Matt Lewis

new topic     » goto parent     » topic index » view message » categorize

13. Re: eg

Matt Lewis wrote:
[snip]

> Well, not quite, but he's the first to release anything.  I've been
working
> on my object oriented euphoria concept.  It seems to be working quite 
> well (although I'm trying to come up with a better keyword than 'class', 
> since that's such a common variable name--any suggestions?).  

Try please 'clan' or 'family' or 'stock' or even 'gang' blink
I like 'clan' for short, then 'inheritance' may be more clear thing.
That 'class' is absolutelly abstract word in a strongly
conctete programming, nothing, same as 'object' is everything.
Try to understand and explain "nothing of everything", oop...s  blink

Regards,
Igor Kachan
kinz at peterlink.ru

new topic     » goto parent     » topic index » view message » categorize

14. Re: eg

Matt,

A wothy project indeed. A couple of suggestions:

1) Don't allow a global class to inherit from a local class. The purpose of
local classes is to provide support for the global class(es) in the
file--the user of the file should only see the global classes. Should
simplify the scope rules.

2) Method overloading is a concrete b*tch for multi-parameter methods. I
tried this for Diamond and gave up. Diamond uses overloading based only on
the number of parameters. If further overloading is required, the Diamond
programmer must provide it in the method. If you want to have parametype
type overloading, I would suggest this method resolution order: considering
all methods of the class, both defined in the class and inherited search all
methods with the proper number of parameters in the order the methods were
defined and the first mathching signature is the method called. In the case
of an overridden superclass method, the search order is based on the
original method, but the method called is the overriding method. This will
assure consistent MRO's among a class and it's subclasses.

-- Mike Nelson

new topic     » goto parent     » topic index » view message » categorize

15. Re: eg

Mike Nelson wrote:
> 
> Matt,
> 
> A wothy project indeed. A couple of suggestions:
> 
> 1) Don't allow a global class to inherit from a local class. The purpose of
> local classes is to provide support for the global class(es) in the
> file--the user of the file should only see the global classes. Should
> simplify the scope rules.

Probably a good idea.  Perhaps for the next version.

> 2) Method overloading is a concrete b*tch for multi-parameter methods. I
> tried this for Diamond and gave up. Diamond uses overloading based only on
> the number of parameters. If further overloading is required, the Diamond
> programmer must provide it in the method. If you want to have parametype
> type overloading, I would suggest this method resolution order: considering
> all methods of the class, both defined in the class and inherited search all
> methods with the proper number of parameters in the order the methods were
> defined and the first mathching signature is the method called. In the case
> of an overridden superclass method, the search order is based on the
> original method, but the method called is the overriding method. This will
> assure consistent MRO's among a class and it's subclasses.

I'm using overloading based on number and type of parameters.  Since I'm
inside the interpreter front end, I have a little more information 
about the parameters than Diamond.  Here's how it works:

1) Find method in class that matches name and number of parameters
2) Count how many parameter types match exactly (and I know which are
   class types, and UDTs, too)
3) Pick the best one.
4) If there wasn't an exact match, and there were multiple candidates 
   that could have been a match, then generate a warning.
5) If no methods matched, then check methods of parent class if it 
   exists, or throw a compile time error.

Matt Lewis

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu