Am 07.12.2016 07:11, schrieb Jean-Philippe André:
> Hey Conr2d,
>
> On 6 December 2016 at 13:33, Conrad Um<con...@gmail.com>  wrote:
>
>> 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_.5BSimpl
>> eType.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
>>
> I was wondering when you would go public with your idea :)

See [1] and [2].

> Will you publish your current code somewhere? You have a private repo on
> git.e.org.
>
> I think this is really cool as it seems to generate a (almost?)
> zero-overhead binding in a friendly language.
> I know nothing about C# or Vala, although I know they only look similar,
> they are not the same language.
>
> I doubt we would use this inside the EFL codebase itself but I can
> definitely see the value in a new language binding.
>
> If only the EFL interfaces could be completed already...
>
> Best regards
>
Sadly to say, I cannot provide evidence why Microsoft has developed C# 
with its managed code in this way. But for everybody who is open minded 
I can give the hint that it has something in common with metadata and 
ontologies as well as my developements in 1997 to 2003. Form time to 
time I work a little on details of this (see again [2]).



Regards
C.S.

[1] Ontologics OntoLix officially started, 9th of November 2014 
(www.ontomax.com/newsarchive/2014/november.htm#09.November.2014)
[2] Ontonics, OntoLab, Ontologics, OntoLix and OntoLinux Further steps, 
20th of January 2015 
(www.ontomax.com/newsarchive/2015/january.htm#20.January.2015)



------------------------------------------------------------------------------
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

Reply via email to