Dear friends, I'm a big fan of vala (if you don't know what vala is, please see this link <https://wiki.gnome.org/Projects/Vala>), and writing a vala binding generator for EFL.
Vala has a syntax similar to C# and has managed feature based on reference counting, but basically it just converts .vala files to .c files to compile them with gcc and gobject library. My experimental generator can create VAPI files for having vala recognize C APIs, but only support compact class type which is not a full-featured vala class type. (Because complete vala class is based on gobject system. You can see the difference of compact and complete class here <https://wiki.gnome.org/Projects/Vala/FAQ#What_does_.5BSimpleType.5D_and_.5BCompact.5D_in_bindings_mean.3F> .) If I want to use all features supported in vala, I should make a wrapper class like in eolian_cxx. By the way, it comes to my mind that makes vala generate c code based on eo instead of gobject. It can be used by application developers, but I think even EFL developers can write libraries with modern language. Currently, we should write 2 files (.c and .eo) per class at least. However, vala with eo backend only requires 1 vala file. For example, public class Elm.Button : Elm.Layout, Efl.Ui.Clickable, Elm.Interface.Atspi_Widget_Action { /* elm_widget_button.h, contents of private header */ private double ar_initial_timeout; private double ar_gap_timeout; private Ecore.Timer? timer; // question mark means nullable private bool repeating; /* events */ public signal void clicked(); public signal void repeated(); /* elm_button.c, property setter/getter body */ public bool autorepeat { set { timer = null; // To assign null to 'timer' will unref timer. autorepeat = value; repeating = false; } get { return autorepeat & admits_autorepeat; } } /* elm_button.c, private function body */ private void activate() { timer = null; repeating = false; /* if property getter is set, the next condition will be (!disabled && !freeze_events) */ if (!disabled_get() && !freeze_events_get()) clicked(); // invokes callbacks for "clicked" events } /* elm_button.c, override Efl.Canvas.Group.group_add() */ public override group_add() { base.group_add(); // efl_super sub_object_parent_add(); /* lambda expression */ resize_obj.signal_callback_add("elm,action,click", "*", (emission, source) => { activate(); }); access_object_register(resize_obj); can_focus_set(true); theme_set("button", "base", style_get()); } ... } With vala file like above, valac (vala compiler) with eo backend will be able to generate several files we need. (public header, private header, c file including .c and .eo.c contents) Moreover, header and c files generated by valac are simple c source files, so they can be compiled with existing code or c file written in c from the beginning (not generated). I know all EFL developers are C expert, and you may never feel need of redundant tools except for C. However I think if you want EFL to advance further and continuously, we should investigate how we can adapt modern concepts, knowledge and ideas on our works. It's just a suggestion, but if there is any one interested in this idea, we can start new project for the future. :D Regards, Jee-Yong Um (conr2d) ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/xeonphi _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel