Post on 17-Jul-2015
transcript
The EFL API in Review
Tom HacohenSamsung Electronics Open Source Group
tom.hacohen@samsung.com
@TomHacohen
EFL Dev Day NA 2015
Main Goals
Unify Code
I Many different object systems → one
I Many different event/callback implementations → one
I Make objects compatible
Main Goals
Unify Code
I Many different object systems → one
I Many different event/callback implementations → one
I Make objects compatible
Main Goals
Unify Code
I Many different object systems → one
I Many different event/callback implementations → one
I Make objects compatible
Main Goals
Unify Code
I Many different object systems → one
I Many different event/callback implementations → one
I Make objects compatible
Main Goals
Reducing our API
We have:
evas_object_image_file_set(obj , "blah.png", "key");
edje_object_file_set(obj , "blah.edj", "group");
evas_object_del(obj);
ecore_timer_del(obj);
ecore_animator_del(obj);
Main Goals
Reducing our API
We have:
evas_object_image_file_set(obj , "blah.png", "key");
edje_object_file_set(obj , "blah.edj", "group");
evas_object_del(obj);
ecore_timer_del(obj);
ecore_animator_del(obj);
Main Goals
Bindings Generation
I Be able to automatically generate for most popular languages
I Correctly handle ref counting, buffer ownership and etc.
Main Goals
Bindings Generation
I Be able to automatically generate for most popular languages
I Correctly handle ref counting, buffer ownership and etc.
Main Goals
Bindings Generation
I Be able to automatically generate for most popular languages
I Correctly handle ref counting, buffer ownership and etc.
Other Object Systems
Other Languages
I C++ – our developers hate itI Objective C – quite ugly and not really common in OSS world
I We considered using just the runtime
Other Object Systems
Other Languages
I C++ – our developers hate it
I Objective C – quite ugly and not really common in OSS world
I We considered using just the runtime
Other Object Systems
Other Languages
I C++ – our developers hate itI Objective C – quite ugly and not really common in OSS world
I We considered using just the runtime
Other Object Systems
Other Languages
I C++ – our developers hate itI Objective C – quite ugly and not really common in OSS world
I We considered using just the runtime
Other Object Systems
GObject
Good:
I Fast
I Has a “C feel”
Bad:
I Doesn’t offer a stable ABI
I Funny, full of casting syntax
I “G tech” dependencies
I Didn’t exactly fit our needs
Other Object Systems
GObject
Good:
I Fast
I Has a “C feel”
Bad:
I Doesn’t offer a stable ABI
I Funny, full of casting syntax
I “G tech” dependencies
I Didn’t exactly fit our needs
Other Object Systems
GObject
Good:
I Fast
I Has a “C feel”
Bad:
I Doesn’t offer a stable ABI
I Funny, full of casting syntax
I “G tech” dependencies
I Didn’t exactly fit our needs
Other Object Systems
GObject
Good:
I Fast
I Has a “C feel”
Bad:
I Doesn’t offer a stable ABI
I Funny, full of casting syntax
I “G tech” dependencies
I Didn’t exactly fit our needs
Other Object Systems
GObject
Good:
I Fast
I Has a “C feel”
Bad:
I Doesn’t offer a stable ABI
I Funny, full of casting syntax
I “G tech” dependencies
I Didn’t exactly fit our needs
Other Object Systems
GObject
Good:
I Fast
I Has a “C feel”
Bad:
I Doesn’t offer a stable ABI
I Funny, full of casting syntax
I “G tech” dependencies
I Didn’t exactly fit our needs
Other Object Systems
GObject
Good:
I Fast
I Has a “C feel”
Bad:
I Doesn’t offer a stable ABI
I Funny, full of casting syntax
I “G tech” dependencies
I Didn’t exactly fit our needs
Other Object Systems
GObject
Good:
I Fast
I Has a “C feel”
Bad:
I Doesn’t offer a stable ABI
I Funny, full of casting syntax
I “G tech” dependencies
I Didn’t exactly fit our needs
What is Eo?
Basics
I It’s Enlightenment’s (fairly) new object system
I Supports classes, abstract classes, mixins and interfaces
I Completely written in C (no external preprocessor)
I API/ABI stable
I Portable
What is Eo?
Basics
I It’s Enlightenment’s (fairly) new object system
I Supports classes, abstract classes, mixins and interfaces
I Completely written in C (no external preprocessor)
I API/ABI stable
I Portable
What is Eo?
Basics
I It’s Enlightenment’s (fairly) new object system
I Supports classes, abstract classes, mixins and interfaces
I Completely written in C (no external preprocessor)
I API/ABI stable
I Portable
What is Eo?
Basics
I It’s Enlightenment’s (fairly) new object system
I Supports classes, abstract classes, mixins and interfaces
I Completely written in C (no external preprocessor)
I API/ABI stable
I Portable
What is Eo?
Basics
I It’s Enlightenment’s (fairly) new object system
I Supports classes, abstract classes, mixins and interfaces
I Completely written in C (no external preprocessor)
I API/ABI stable
I Portable
What is Eo?
Basics
I It’s Enlightenment’s (fairly) new object system
I Supports classes, abstract classes, mixins and interfaces
I Completely written in C (no external preprocessor)
I API/ABI stable
I Portable
What is Eo?
Using Eo
I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do_ret(obj, tmp, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩
elm_widget_visibility_set(!visible));I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));
I static void size_multiply(double f)
{
int w, h;
evas_object_geometry_get(NULL , NULL , &w, &h);
evas_object_geometry_set(NULL , NULL , w * f, h * f);
}
eo_do(obj , size_multiply (3.5));
What is Eo?
Using Eo
I eo_do(obj, efl_file_set("file.eet", "key"));
I if (eo_do_ret(obj, tmp, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩
elm_widget_visibility_set(!visible));I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));
I static void size_multiply(double f)
{
int w, h;
evas_object_geometry_get(NULL , NULL , &w, &h);
evas_object_geometry_set(NULL , NULL , w * f, h * f);
}
eo_do(obj , size_multiply (3.5));
What is Eo?
Using Eo
I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do_ret(obj, tmp, elm_widget_enabled_get()))
I eo_do(obj, visible = elm_widget_visibility_get(), ←↩elm_widget_visibility_set(!visible));
I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));
I static void size_multiply(double f)
{
int w, h;
evas_object_geometry_get(NULL , NULL , &w, &h);
evas_object_geometry_set(NULL , NULL , w * f, h * f);
}
eo_do(obj , size_multiply (3.5));
What is Eo?
Using Eo
I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do_ret(obj, tmp, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩
elm_widget_visibility_set(!visible));
I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));
I static void size_multiply(double f)
{
int w, h;
evas_object_geometry_get(NULL , NULL , &w, &h);
evas_object_geometry_set(NULL , NULL , w * f, h * f);
}
eo_do(obj , size_multiply (3.5));
What is Eo?
Using Eo
I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do_ret(obj, tmp, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩
elm_widget_visibility_set(!visible));I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));
I static void size_multiply(double f)
{
int w, h;
evas_object_geometry_get(NULL , NULL , &w, &h);
evas_object_geometry_set(NULL , NULL , w * f, h * f);
}
eo_do(obj , size_multiply (3.5));
What is Eo?
Using Eo
I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do_ret(obj, tmp, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩
elm_widget_visibility_set(!visible));I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));
I static void size_multiply(double f)
{
int w, h;
evas_object_geometry_get(NULL , NULL , &w, &h);
evas_object_geometry_set(NULL , NULL , w * f, h * f);
}
eo_do(obj , size_multiply (3.5));
What is Eo? | Internals
eo_do() – How It’s Done (simplified)
#define eo_do(eoid , ...) \
do { \
_eo_do_start(eoid); \
__VA_ARGS__; \
_eo_do_end (); \
} while (0)
What is Eo? | Internals
eo_do() – How It’s Done (simplified)
#define eo_do(eoid , ...) \
do { \
_eo_do_start(eoid); \
__VA_ARGS__; \
_eo_do_end (); \
} while (0)
What is Eo? | Internals
eo_do_ret() – How It’s Done (simplified)
#define eo_do_ret(eoid , ret_tmp , func) \
( \
_eo_do_start(eoid), \
ret_tmp = func , \
_eo_do_end (), \
ret_tmp \
)
What is Eo? | Internals
eo_do_ret() – How It’s Done (simplified)
#define eo_do_ret(eoid , ret_tmp , func) \
( \
_eo_do_start(eoid), \
ret_tmp = func , \
_eo_do_end (), \
ret_tmp \
)
What is Eo? | Internals
Defining New Functions (simplified)
EOAPI EO_FUNC_BODY(eo_parent_get, Eo *, NULL);
#define EO_FUNC_BODY(Name , Ret , DefRet) \
Ret Name(void) \
{ \
static Eo_Op op = EO_NOOP; \
if (op == EO_NOOP) \
op = _eo_api_op_id_get ((void*) Name); \
if (! _eo_call_resolve (#Name , op , &call)) \
return DefRet; \
_Eo_##Name##_func _func_ = \
(_Eo_##Name##_func) call.func; \
return _func_(call.obj , call.data); \
}
What is Eo? | Internals
Defining New Functions (simplified)
EOAPI EO_FUNC_BODY(eo_parent_get, Eo *, NULL);
#define EO_FUNC_BODY(Name , Ret , DefRet) \
Ret Name(void) \
{ \
static Eo_Op op = EO_NOOP; \
if (op == EO_NOOP) \
op = _eo_api_op_id_get ((void*) Name); \
if (! _eo_call_resolve (#Name , op , &call)) \
return DefRet; \
_Eo_##Name##_func _func_ = \
(_Eo_##Name##_func) call.func; \
return _func_(call.obj , call.data); \
}
What is Eo? | Internals
Defining New Functions (simplified)
EOAPI EO_FUNC_BODY(eo_parent_get, Eo *, NULL);
#define EO_FUNC_BODY(Name , Ret , DefRet) \
Ret Name(void) \
{ \
static Eo_Op op = EO_NOOP; \
if (op == EO_NOOP) \
op = _eo_api_op_id_get ((void*) Name); \
if (! _eo_call_resolve (#Name , op , &call)) \
return DefRet; \
_Eo_##Name##_func _func_ = \
(_Eo_##Name##_func) call.func; \
return _func_(call.obj , call.data); \
}
What is Eo? | Internals
Defining New Classes (simplified)
Populating a struct with some metadata
static Eo_Op_Description _edje_object_op_desc [] = {
EO_OP_FUNC(edje_obj_update_hints_set , ←↩_edje_object_update_hints_set),
EO_OP_FUNC_OVERRIDE(eo_constructor , ←↩_edje_object_eo_base_constructor),
EO_OP_CLASS_FUNC(eo_event_global_thaw , ←↩_eo_base_event_global_thaw),
EO_OP_CLASS_OVERRIDE_FUNC(eo_event_global_thaw , ←↩_edje_object_eo_base_event_global_thaw)
};
What is Eo? | Internals
Defining New Classes (simplified)
Populating a struct with some metadata
static Eo_Op_Description _edje_object_op_desc [] = {
EO_OP_FUNC(edje_obj_update_hints_set , ←↩_edje_object_update_hints_set),
EO_OP_FUNC_OVERRIDE(eo_constructor , ←↩_edje_object_eo_base_constructor),
EO_OP_CLASS_FUNC(eo_event_global_thaw , ←↩_eo_base_event_global_thaw),
EO_OP_CLASS_OVERRIDE_FUNC(eo_event_global_thaw , ←↩_edje_object_eo_base_event_global_thaw)
};
What is Eo? | Internals
Event Identifiers
EOAPI const Eo_Event_Description ←↩_EO_BASE_EVENT_CALLBACK_ADD = ←↩EO_EVENT_DESCRIPTION("callback ,add");
What is Eo? | Internals
Event Identifiers
EOAPI const Eo_Event_Description ←↩_EO_BASE_EVENT_CALLBACK_ADD = ←↩EO_EVENT_DESCRIPTION("callback ,add");
What is Eo? |
Unique Features
I Pointer indirection (at least in C)
I Multiple calls in one context
I How we do constructors (setting properties, no constructors)
I Named ref-counting
I Composite objects
I Default return values
What is Eo? |
Unique Features
I Pointer indirection (at least in C)
I Multiple calls in one context
I How we do constructors (setting properties, no constructors)
I Named ref-counting
I Composite objects
I Default return values
What is Eo? |
Unique Features
I Pointer indirection (at least in C)
I Multiple calls in one context
I How we do constructors (setting properties, no constructors)
I Named ref-counting
I Composite objects
I Default return values
What is Eo? |
Unique Features
I Pointer indirection (at least in C)
I Multiple calls in one context
I How we do constructors (setting properties, no constructors)
I Named ref-counting
I Composite objects
I Default return values
What is Eo? |
Unique Features
I Pointer indirection (at least in C)
I Multiple calls in one context
I How we do constructors (setting properties, no constructors)
I Named ref-counting
I Composite objects
I Default return values
What is Eo? |
Unique Features
I Pointer indirection (at least in C)
I Multiple calls in one context
I How we do constructors (setting properties, no constructors)
I Named ref-counting
I Composite objects
I Default return values
What is Eo? |
Unique Features
I Pointer indirection (at least in C)
I Multiple calls in one context
I How we do constructors (setting properties, no constructors)
I Named ref-counting
I Composite objects
I Default return values
Impact |
Stability
I Pointer indirection saved us in many cases
I We caught a lot of errors that were not noticed before
I Single point of access for type checking makes it impossible to forget
Impact |
Stability
I Pointer indirection saved us in many cases
I We caught a lot of errors that were not noticed before
I Single point of access for type checking makes it impossible to forget
Impact |
Stability
I Pointer indirection saved us in many cases
I We caught a lot of errors that were not noticed before
I Single point of access for type checking makes it impossible to forget
Impact |
Stability
I Pointer indirection saved us in many cases
I We caught a lot of errors that were not noticed before
I Single point of access for type checking makes it impossible to forget
Impact |
Reduced API
Before:
evas_object_image_file_set(obj , "blah.png", "key");
edje_object_file_set(obj , "blah.edj", "group");
evas_object_del(obj);
ecore_timer_del(obj);
ecore_animator_del(obj);
Now:
eo_do(obj , efl_file_set("blah.file", "key"));
eo_del(obj);
Impact |
Reduced API
Before:
evas_object_image_file_set(obj , "blah.png", "key");
edje_object_file_set(obj , "blah.edj", "group");
evas_object_del(obj);
ecore_timer_del(obj);
ecore_animator_del(obj);
Now:
eo_do(obj , efl_file_set("blah.file", "key"));
eo_del(obj);
Impact |
Reduced API
Before:
evas_object_image_file_set(obj , "blah.png", "key");
edje_object_file_set(obj , "blah.edj", "group");
evas_object_del(obj);
ecore_timer_del(obj);
ecore_animator_del(obj);
Now:
eo_do(obj , efl_file_set("blah.file", "key"));
eo_del(obj);
Eolian |
But writing objects in C is tedious!
I The answer: Eolian
I Eolian parses Eo API declarations
I Eolian allows for automated binding generators
I Eolian is meant to be familar for everyone
Eolian |
But writing objects in C is tedious!
I The answer: Eolian
I Eolian parses Eo API declarations
I Eolian allows for automated binding generators
I Eolian is meant to be familar for everyone
Eolian |
But writing objects in C is tedious!
I The answer: Eolian
I Eolian parses Eo API declarations
I Eolian allows for automated binding generators
I Eolian is meant to be familar for everyone
Eolian |
But writing objects in C is tedious!
I The answer: Eolian
I Eolian parses Eo API declarations
I Eolian allows for automated binding generators
I Eolian is meant to be familar for everyone
Eolian |
But writing objects in C is tedious!
I The answer: Eolian
I Eolian parses Eo API declarations
I Eolian allows for automated binding generators
I Eolian is meant to be familar for everyone
Eolian |
A new format?
I Language independent → easy bindings
I Familiar syntax → easy to pick up
I Easy to read and write
I Declarative and descriptive
Eolian |
A new format?
I Language independent → easy bindings
I Familiar syntax → easy to pick up
I Easy to read and write
I Declarative and descriptive
Eolian |
A new format?
I Language independent → easy bindings
I Familiar syntax → easy to pick up
I Easy to read and write
I Declarative and descriptive
Eolian |
A new format?
I Language independent → easy bindings
I Familiar syntax → easy to pick up
I Easy to read and write
I Declarative and descriptive
Eolian |
A new format?
I Language independent → easy bindings
I Familiar syntax → easy to pick up
I Easy to read and write
I Declarative and descriptive
class Namespace.Class (inherits) {
methods { ... }
properties { ... }
events { ... }
implements { ... }
constructors { ... }
}
type Type_Name: Type_Def;
struct Struct_Name { ... }
enum Enum_Name { ... }
methods {
method_name @class @protected {
params {
@in int x;
@out const(char) *y;
}
return: own(char*);
}
}
Eolian |
Generators!
I Initial generator: C
I Further generators in core EFL: C++ and Lua
I Third party generators (under development): JavaScript, Python, Rust and OCaml
Eolian |
Generators!
I Initial generator: C
I Further generators in core EFL: C++ and Lua
I Third party generators (under development): JavaScript, Python, Rust and OCaml
Eolian |
Generators!
I Initial generator: C
I Further generators in core EFL: C++ and Lua
I Third party generators (under development): JavaScript, Python, Rust and OCaml
Eolian |
Generators!
I Initial generator: C
I Further generators in core EFL: C++ and Lua
I Third party generators (under development): JavaScript, Python, Rust and OCaml
Eolian |
The Eolian library
I C API: simple and easy to use
I Minimum of non-standard data types → easy to bind
I Not only for generators (IDEs. . . )
I Simple database
Eolian |
The Eolian library
I C API: simple and easy to use
I Minimum of non-standard data types → easy to bind
I Not only for generators (IDEs. . . )
I Simple database
Eolian |
The Eolian library
I C API: simple and easy to use
I Minimum of non-standard data types → easy to bind
I Not only for generators (IDEs. . . )
I Simple database
Eolian |
The Eolian library
I C API: simple and easy to use
I Minimum of non-standard data types → easy to bind
I Not only for generators (IDEs. . . )
I Simple database
Eolian |
The Eolian library
I C API: simple and easy to use
I Minimum of non-standard data types → easy to bind
I Not only for generators (IDEs. . . )
I Simple database
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Eolian |
However. . .
I Some things are still missing
I Documentation?
I Value ownership
I And possibly others
And yet. . .
I Very useful
I Generic
I I’d like to get it adopted by others (non EFL)
Other Projects |
Clouseau
I Is there anyone who doesn’t know this one by now?I Application state inspector for the EFLI Was not created following Eo (but greatly improved)I Will get even better with Eolian
Other Projects |
Clouseau
I Is there anyone who doesn’t know this one by now?
I Application state inspector for the EFLI Was not created following Eo (but greatly improved)I Will get even better with Eolian
Other Projects |
Clouseau
I Is there anyone who doesn’t know this one by now?I Application state inspector for the EFL
I Was not created following Eo (but greatly improved)I Will get even better with Eolian
Other Projects |
Clouseau
I Is there anyone who doesn’t know this one by now?I Application state inspector for the EFLI Was not created following Eo (but greatly improved)
I Will get even better with Eolian
Other Projects |
Clouseau
I Is there anyone who doesn’t know this one by now?I Application state inspector for the EFLI Was not created following Eo (but greatly improved)I Will get even better with Eolian
Other Projects |
Erigo
I EFL GUI builderI Reads properties from Eolian
I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of
I Has it’s own format that is processed by language specific code generators
Other Projects |
Erigo
I EFL GUI builder
I Reads properties from Eolian
I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of
I Has it’s own format that is processed by language specific code generators
Other Projects |
Erigo
I EFL GUI builderI Reads properties from Eolian
I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of
I Has it’s own format that is processed by language specific code generators
Other Projects |
Erigo
I EFL GUI builderI Reads properties from Eolian
I Supports whatever version is installed on the system automatically
I Supports widgets that it has no notion ofI Has it’s own format that is processed by language specific code generators
Other Projects |
Erigo
I EFL GUI builderI Reads properties from Eolian
I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of
I Has it’s own format that is processed by language specific code generators
Other Projects |
Erigo
I EFL GUI builderI Reads properties from Eolian
I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of
I Has it’s own format that is processed by language specific code generators
Other Projects |
Espion
I Goal: easily import GUIs to Erigo
I Intercepts eo_add() and eo_do()
I Uses Eolian to correctly process the calls
Other Projects |
Espion
I Goal: easily import GUIs to Erigo
I Intercepts eo_add() and eo_do()
I Uses Eolian to correctly process the calls
Other Projects |
Espion
I Goal: easily import GUIs to Erigo
I Intercepts eo_add() and eo_do()
I Uses Eolian to correctly process the calls
Other Projects |
Espion
I Goal: easily import GUIs to Erigo
I Intercepts eo_add() and eo_do()
I Uses Eolian to correctly process the calls
EFL Interfaces |
What is it about (again)?
I Fixing up the EFL API and inheritance
I Utilising the new Eo features
I Annotating the EFL API for generated bindings
I Creating new classes that are important for the life cycle
I “Insanely important” — Carsten Haitzler (A few hours ago)
I Everything that’s even remotely related to Eo and EFL API and is dumped upon thistask arbitrarily.
EFL Interfaces |
What is it about (again)?
I Fixing up the EFL API and inheritance
I Utilising the new Eo features
I Annotating the EFL API for generated bindings
I Creating new classes that are important for the life cycle
I “Insanely important” — Carsten Haitzler (A few hours ago)
I Everything that’s even remotely related to Eo and EFL API and is dumped upon thistask arbitrarily.
EFL Interfaces |
What is it about (again)?
I Fixing up the EFL API and inheritance
I Utilising the new Eo features
I Annotating the EFL API for generated bindings
I Creating new classes that are important for the life cycle
I “Insanely important” — Carsten Haitzler (A few hours ago)
I Everything that’s even remotely related to Eo and EFL API and is dumped upon thistask arbitrarily.
EFL Interfaces |
What is it about (again)?
I Fixing up the EFL API and inheritance
I Utilising the new Eo features
I Annotating the EFL API for generated bindings
I Creating new classes that are important for the life cycle
I “Insanely important” — Carsten Haitzler (A few hours ago)
I Everything that’s even remotely related to Eo and EFL API and is dumped upon thistask arbitrarily.
EFL Interfaces |
What is it about (again)?
I Fixing up the EFL API and inheritance
I Utilising the new Eo features
I Annotating the EFL API for generated bindings
I Creating new classes that are important for the life cycle
I “Insanely important” — Carsten Haitzler (A few hours ago)
I Everything that’s even remotely related to Eo and EFL API and is dumped upon thistask arbitrarily.
EFL Interfaces |
What is it about (again)?
I Fixing up the EFL API and inheritance
I Utilising the new Eo features
I Annotating the EFL API for generated bindings
I Creating new classes that are important for the life cycle
I “Insanely important” — Carsten Haitzler (A few hours ago)
I Everything that’s even remotely related to Eo and EFL API and is dumped upon thistask arbitrarily.
EFL Interfaces |
What is it about (again)?
I Fixing up the EFL API and inheritance
I Utilising the new Eo features
I Annotating the EFL API for generated bindings
I Creating new classes that are important for the life cycle
I “Insanely important” — Carsten Haitzler (A few hours ago)
I Everything that’s even remotely related to Eo and EFL API and is dumped upon thistask arbitrarily.
EFL Interfaces | Examples
Fixing API and Inheritance
I Making all of the Ecore * Eo objects
I Removing duplicated APIs
elm_layout_part_text_set ()
edje_object_part_text_set ()
elm_object_text_set ()
I Make Elm.Layout implement Edje.Object
EFL Interfaces | Examples
Fixing API and Inheritance
I Making all of the Ecore * Eo objects
I Removing duplicated APIs
elm_layout_part_text_set ()
edje_object_part_text_set ()
elm_object_text_set ()
I Make Elm.Layout implement Edje.Object
EFL Interfaces | Examples
Fixing API and Inheritance
I Making all of the Ecore * Eo objects
I Removing duplicated APIs
elm_layout_part_text_set ()
edje_object_part_text_set ()
elm_object_text_set ()
I Make Elm.Layout implement Edje.Object
EFL Interfaces | Examples
Fixing API and Inheritance
I Making all of the Ecore * Eo objects
I Removing duplicated APIs
elm_layout_part_text_set ()
edje_object_part_text_set ()
elm_object_text_set ()
I Make Elm.Layout implement Edje.Object
EFL Interfaces | Examples
Using Eo Features
I Moving Ecore.Animator to be a signal on the window
I Moving Ecore.Job to be a signal on the mainloop
EFL Interfaces | Examples
Using Eo Features
I Moving Ecore.Animator to be a signal on the window
I Moving Ecore.Job to be a signal on the mainloop
EFL Interfaces | Examples
Using Eo Features
I Moving Ecore.Animator to be a signal on the window
I Moving Ecore.Job to be a signal on the mainloop
EFL Interfaces | Examples
Annotating for Bindings
I Add @own to relevant parameters
I Add enums/struct definitions in .eo files (when public)
I Use correct class names instead of Eo *
EFL Interfaces | Examples
Annotating for Bindings
I Add @own to relevant parameters
I Add enums/struct definitions in .eo files (when public)
I Use correct class names instead of Eo *
EFL Interfaces | Examples
Annotating for Bindings
I Add @own to relevant parameters
I Add enums/struct definitions in .eo files (when public)
I Use correct class names instead of Eo *
EFL Interfaces | Examples
Annotating for Bindings
I Add @own to relevant parameters
I Add enums/struct definitions in .eo files (when public)
I Use correct class names instead of Eo *
Discussions | Examples
Nullability
I Change and split @notnull to @nullable and @optional
I Very useful for languages that support this notion (e.g. Rust and C++)
I Leads to safer code and more information about types
I Side effect: stop using EINA_ARG_NONNULL
Discussions | Examples
Nullability
I Change and split @notnull to @nullable and @optional
I Very useful for languages that support this notion (e.g. Rust and C++)
I Leads to safer code and more information about types
I Side effect: stop using EINA_ARG_NONNULL
Discussions | Examples
Nullability
I Change and split @notnull to @nullable and @optional
I Very useful for languages that support this notion (e.g. Rust and C++)
I Leads to safer code and more information about types
I Side effect: stop using EINA_ARG_NONNULL
Discussions | Examples
Nullability
I Change and split @notnull to @nullable and @optional
I Very useful for languages that support this notion (e.g. Rust and C++)
I Leads to safer code and more information about types
I Side effect: stop using EINA_ARG_NONNULL
Discussions | Examples
Nullability
I Change and split @notnull to @nullable and @optional
I Very useful for languages that support this notion (e.g. Rust and C++)
I Leads to safer code and more information about types
I Side effect: stop using EINA_ARG_NONNULL
Discussions | Examples
Thread Safety
I Eo infra is thread safe, objects aren’t
I Is there a useful case which requires we change that?
Discussions | Examples
Thread Safety
I Eo infra is thread safe, objects aren’t
I Is there a useful case which requires we change that?
Discussions | Examples
Thread Safety
I Eo infra is thread safe, objects aren’t
I Is there a useful case which requires we change that?
Discussions | Examples
Shared Interfaces
I Share most of the EFL’s functions
I Change most functions to the EFL interfaces
I Forces API to be consistent
I Limits the flexibility of API (because everything is shared)
I Can cause clashes (parent class uses a function for one thing, child for another)
Discussions | Examples
Shared Interfaces
I Share most of the EFL’s functions
I Change most functions to the EFL interfaces
I Forces API to be consistent
I Limits the flexibility of API (because everything is shared)
I Can cause clashes (parent class uses a function for one thing, child for another)
Discussions | Examples
Shared Interfaces
I Share most of the EFL’s functions
I Change most functions to the EFL interfaces
I Forces API to be consistent
I Limits the flexibility of API (because everything is shared)
I Can cause clashes (parent class uses a function for one thing, child for another)
Discussions | Examples
Shared Interfaces
I Share most of the EFL’s functions
I Change most functions to the EFL interfaces
I Forces API to be consistent
I Limits the flexibility of API (because everything is shared)
I Can cause clashes (parent class uses a function for one thing, child for another)
Discussions | Examples
Shared Interfaces
I Share most of the EFL’s functions
I Change most functions to the EFL interfaces
I Forces API to be consistent
I Limits the flexibility of API (because everything is shared)
I Can cause clashes (parent class uses a function for one thing, child for another)
Discussions | Examples
Shared Interfaces
I Share most of the EFL’s functions
I Change most functions to the EFL interfaces
I Forces API to be consistent
I Limits the flexibility of API (because everything is shared)
I Can cause clashes (parent class uses a function for one thing, child for another)
Discussions | Examples
Short Names
I efl_file_set(), efl_color_set() . . .
I C API matches OOP languages’ API (C++, JS, Lua)
I Maintain the long names (full namespacing)?
I Developers seem to prefer short names (though come from OOP background)
I Improves API consistency (same name does the same)
I Have a generation pass across all eo files in efl (second stage?)
I Detect conflicts
Discussions | Examples
Short Names
I efl_file_set(), efl_color_set() . . .
I C API matches OOP languages’ API (C++, JS, Lua)
I Maintain the long names (full namespacing)?
I Developers seem to prefer short names (though come from OOP background)
I Improves API consistency (same name does the same)
I Have a generation pass across all eo files in efl (second stage?)
I Detect conflicts
Discussions | Examples
Short Names
I efl_file_set(), efl_color_set() . . .
I C API matches OOP languages’ API (C++, JS, Lua)
I Maintain the long names (full namespacing)?
I Developers seem to prefer short names (though come from OOP background)
I Improves API consistency (same name does the same)
I Have a generation pass across all eo files in efl (second stage?)
I Detect conflicts
Discussions | Examples
Short Names
I efl_file_set(), efl_color_set() . . .
I C API matches OOP languages’ API (C++, JS, Lua)
I Maintain the long names (full namespacing)?
I Developers seem to prefer short names (though come from OOP background)
I Improves API consistency (same name does the same)
I Have a generation pass across all eo files in efl (second stage?)
I Detect conflicts
Discussions | Examples
Short Names
I efl_file_set(), efl_color_set() . . .
I C API matches OOP languages’ API (C++, JS, Lua)
I Maintain the long names (full namespacing)?
I Developers seem to prefer short names (though come from OOP background)
I Improves API consistency (same name does the same)
I Have a generation pass across all eo files in efl (second stage?)
I Detect conflicts
Discussions | Examples
Short Names
I efl_file_set(), efl_color_set() . . .
I C API matches OOP languages’ API (C++, JS, Lua)
I Maintain the long names (full namespacing)?
I Developers seem to prefer short names (though come from OOP background)
I Improves API consistency (same name does the same)
I Have a generation pass across all eo files in efl (second stage?)
I Detect conflicts
Discussions | Examples
Short Names
I efl_file_set(), efl_color_set() . . .
I C API matches OOP languages’ API (C++, JS, Lua)
I Maintain the long names (full namespacing)?
I Developers seem to prefer short names (though come from OOP background)
I Improves API consistency (same name does the same)
I Have a generation pass across all eo files in efl (second stage?)
I Detect conflicts
Discussions | Examples
Short Names
I efl_file_set(), efl_color_set() . . .
I C API matches OOP languages’ API (C++, JS, Lua)
I Maintain the long names (full namespacing)?
I Developers seem to prefer short names (though come from OOP background)
I Improves API consistency (same name does the same)
I Have a generation pass across all eo files in efl (second stage?)
I Detect conflicts
Discussions | Examples
Small vs. Sparse Classes
I Small classes that have to be fully implemented
I Big classes with many optional properties
I Which do we want?
Discussions | Examples
Small vs. Sparse Classes
I Small classes that have to be fully implemented
I Big classes with many optional properties
I Which do we want?
Discussions | Examples
Small vs. Sparse Classes
I Small classes that have to be fully implemented
I Big classes with many optional properties
I Which do we want?
Discussions | Examples
Small vs. Sparse Classes
I Small classes that have to be fully implemented
I Big classes with many optional properties
I Which do we want?