[E-Dev-Day-US-2015][8/9] he EFL API in Review (Tom Hacohen)

167
The EFL API in Review Tom Hacohen Samsung Electronics Open Source Group [email protected] @TomHacohen EFL Dev Day NA 2015

Transcript of [E-Dev-Day-US-2015][8/9] he EFL API in Review (Tom Hacohen)

The EFL API in Review

Tom HacohenSamsung Electronics Open Source Group

[email protected]

@TomHacohen

EFL Dev Day NA 2015

Introduction

Today’s Topics

I Eo recap

I Interfaces recap

I Major decisions for the future

Introduction

Today’s Topics

I Eo recap

I Interfaces recap

I Major decisions for the future

Introduction

Today’s Topics

I Eo recap

I Interfaces recap

I Major decisions for the future

Introduction

Today’s Topics

I Eo recap

I Interfaces recap

I Major decisions for the future

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.

Main Goals

Not Hurt Performance

I Not easily measurable – many changes in EFL

Main Goals

Not Hurt Performance

I Not easily measurable – many changes in EFL

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

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

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*);

}

}

properties {

property_name {

keys {

list <int > *x;

}

values {

int v;

}

get {}

set {}

}

}

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 *

EFL Interfaces | Examples

New Classes

I Mainloop object

I Application object

EFL Interfaces | Examples

New Classes

I Mainloop object

I Application object

EFL Interfaces | Examples

New Classes

I Mainloop object

I Application object

Questions | Examples

Questions so far?

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?

Questions and Concerns | Examples

Questions or comments?

Resources Attributions | Examples

I Nothing