[Vala] Vala object model



I'm very interesting in this project, congratulations for this excellent job.

I'm a C# and java programmer, and gnome user, but I never programmed using the GObject type system; I'm learning about that for understand the background of Vala

I'm some suggestion for us about the Vala object model,

In this moment vala have two kind of object, the object based in glib and the others tagged as "compact", all class are automatically based in glib except the classes tagged with the compact attribute; in the glib exists two fundamental base class, the GTypeInstance (actually named TypeInstance in the glib vapi file, with the comment: "deprecated") and GObject (actually named Object in the glib vapi file), the second extends the first; and all class without super class extends automatically from GTypeInstance

I propose create a logical class named "any" and all class registered in vala extends "any" (like Eiffel program language), all base class for any type systems extends "any" and all compact class extends "any" (the compact class is a reduced type system). "any" is the logical super super class in vala, for this extends all elements registered in vala: classes, structs, etc.

With "any" class, the object model look like:

any
  |
  + ----- GTypeInstance
  |              |
  |              + ---- GObject
  |                           |
  |                           + ---- MyGObjectClass
  |
  + ----- MyCompactClass
  |
  + ----- AnotherCompactClass
  |
  + ----- AnotherTypeSystem
                |
                + ---- MyClassWithAnoterTypeSystem

For more usability I propose create two aliases:
object = GTypeInstance (actually TypeInstance)
gobject = GObject (actually Object)

object is the super class for all gobject type system based class, like java and C#

Why object is GTypeInstance instead GObject?
Because GTypeInstance can be handle all gobject type system based classes, this is the real superclass for all types based in gobject type system

For prevent confusion when use gobject type system with another I propose rename this classes (from the glib vapi file):
"Type" to "GType"
"TypeInstance" to "GTypeInstance"
"Object" to "GObject"

For close the large discussed issue about the default base class, I propose change it for GObject, this is the natural base class for the news classes; for use another super class must be indicate explicitly. Example:

class acme { /*...*/ } // acme extends from GObject
class acme : Glib.GObject { /*...*/ } // acme extends from GObject
class acme : gobject { /*...*/ } // acme extends from GObject
class acme : object { /*...*/ } // acme extends from GTypeInstance
class acme : Glib.GTypeInstance { /*...*/ } // acme extends from GTypeInstance
class acme : any { /*...*/ } // acme is a compact class

Actually
class acme : gobject { /*...*/ }
must be write as:
    class acme : Glib.Object { /*...*/ }

and
    class acme : object { /*...*/ }
must be write as:
    class acme { /*...*/ }

Now, the compiler can identify the compact class without the compact attribute, it is unnecessary and can be dropped

About the use of "any":

"any" is a metaclass, and this does not indicate how to handle its memory; unknown how handle its memory makes impossible to use "any" as type of  argument, variable, field, etc. then, the valid use of "any" is in a pointer, any* is the same as void*

Note:
I prefer any* instead of void* because any* is has a logic reason, void* is magic and illogical, but void* is very common

Note:
In the variable argument list, the data type of "..." is any

Note:
I'm not sure, but I think some methods in GObject class are GTypeInstance methods like get_type( )

With this change vala has a consistent object model, without exceptions (actually the compact classes are exceptions), and open de possibility to support another type system with the same level as gobject type system, only one consideration must be understand the vala programmer when use across type systems: the capabilities of each type system

I would like to receive your opinions.

PD: I apologize for my bad English, I'm Spanish-speaking

--
Juan Luis Paz


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]