[M3devel] opaque types again

Jay K jay.krell at cornell.edu
Sun Mar 31 07:10:00 CEST 2013


I don't understand opaque types.


I do understand the notion of fully opaque types. That are fully revealed in one step.
In C this is common:


  window.h  
    struct Window_t;  
    typedef struct Window_t Window_t;  
    Window_t* Window_Create();  
    void Window_Show(Window_*t);  
    void Window_Close(Window_*t);  
    long Window_GetHeight(Window_*t);  
    long Window_GetWidth(Window_*t);  
  etc.

  window.c  
    struct Window_t { ... } /* reveal */ 


Back to Modula-3... opaque types must be OBJECTs, right?


1. What do they provide vs. more derived types?


INTERFACE Animal;

TYPE T = OBJECT
METHODS
    makeNoise();
END;


INTERFACE AnimalImpl;

TYPE T = Animal.T OBJECT
METHODS
    private();
END;


If I had an Animal.T and wanted to call private(),
wouldn't I just NARROW it to AnimalImpl.T?


Is the point that it is more efficient and avoids
a runtime type check?



INTERFACE Animal;

TYPE Public = OBJECT
METHODS
    makeNoise();
END;

TYPE T <: Public;

INTERFACE AnimalImpl;

REVEAL Animal.T = Animal.Public OBJECT
METHODS
    private();
END;


?
This way I can import AnimalImpl and then just call private()
without a NARROW?





2. Given that the final revelation must be a linear
form of all the declared subtypes, I don't understand
how the offset used by any module w/o a full revelation
could be anything other than zero.


I'd like to fully understand this, so I can make the C backend
provide maximal type information. More pointers to structs, with members/fields,
fewer untyped void*/char*.


Thanks,
 - Jay


 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20130331/698fe7c6/attachment-0001.html>


More information about the M3devel mailing list