Thursday, December 31, 2009

Syntax OK

Good news to finish 2009!

The commit f95add1fdaaf39f956fec89500590282fbcbc11d marks an end to syntax errors. The whole Liberty library and tools code is correctly parsed.

Now to testing and fixing the semantics tree generation...

Friday, November 27, 2009

Thursday, November 26, 2009

Inline agents should be closures

Compare the current SmartEiffel inline agent definition:

local
   i: INTEGER
do
   agent (h: INTEGER) is
      do
         std_output.put_line(h.out)
      end (i)
      .call([])
end

with a real closure:

local
   i: INTEGER
do
   agent is
      do
         std_output.put_line(i.out)
      end
      .call([])
end

What do you think?

Friday, October 23, 2009

A couple of proposals

Adding "ref: REFERENCE[like Current]" in ANY
This would to allow to easily write a manifest COLLECTION[ANY] holding non-expanded objects and references to expanded like INTEGER or REAL.
The usage would to write code like
   formatter: STRING_PRINTER is once create Result.make(std_output) end
   do_stuff is
   do
      formatter.put_message("Cluster @(1): @(2) classes, @(2)%% non-deferred",<<"a_cluster_name", 1000.ref, 0.25.ref>>)
    end
I'm conscious this would allow for printf-like features that mimick variadic functions, a potential way toward spaghetti-code; current alternative is formatter.put_message("Cluster @(1): @(2) classes, @(2)%% non-deferred",<<"a_cluster_name", 1000.out, 0.25.out>>) that allocates two temporary strings, nullifing/thwarting one of the main reason to use a STRING_PRINTER: avoiding creation of temporary, shortly-lived strings.

Adding ROPE string and eventually a TWINE.

Sometime ago I started a little hack named LINKED_STRING, a string implemented as a linked list of strings; the idea was to make concatenation efficient, ideally an O(1) operation; then I discovered that (quite obviously) other people had the same idea. Ropes are usually not implemented using lists as in my draft. I'm still thinkering about it.

Friday, September 11, 2009

Let's turn towards the future

Yes, SmartEiffel is dead.

SmartEiffel has brought great things such as the first working implementation of non-conforming inheritance as well as well defined (should I say, just defined) conformance rules for agents.

SmartEiffel lost its steam, in my opinion, because:
  1. The code base is too complex. There is no way to understand it if you are not helped by the core team.
  2. The core team does not welcome any patch from the outside. It discouraged people to participate and since the users of a compiler are also technical people, users were lost.
  3. Everybody knew that the core team had a private list where every decision was taken. Not free.
  4. Some members of the core team had ideas that were not approved by the big boss. Too many no-no and core members got weary.
  5. The head of the core team seems to have mysteriously disappeared. The team lost all motivation.
Here comes Liberty: SmartEiffel down from its ivory tower.

I want Liberty to be:
  1. A striking example of good Eiffel code. That certainly means powerful, but above all simple and understandable.
  2. Released with batteries (and with simple technical means to add more batteries!)
  3. Interoperable with most mainstream languages (C, Java, .NET...)
  4. Available on most platforms.
  5. Really free, as in free speech.

Monday, September 7, 2009

SmartEiffel: dead of alive?

In the previous two years it seems that SmartEiffel has "lost steam": frequency of commits seems to confirm this (see also cia.vc stats on SmartEiffel): 3.31 days between each commit compared to the 1.69 hours between messages of ISE Eiffel; quite obviously this metric does not measure the quality of a project but I think it is quite agreeable that it is a good indicator of interestest in the project.

It seems to me that the project leader - Dominique Colnet - has lost interest in his creature. He is free to lose interest; as a professor he may have found other area of Information Technology that looks better from an academic point of view.
The commits from the last few months comes from Cyril Adrian; other contributors
svn log -r {2008-1-1}:HEAD --quiet|grep "^r" | cut -d '|' -f 2 | sort |uniq --count|sort -nr ## tells us
    190  cadrian
    166  colnet
    117  ribet
     25  zen
      5  gremin
      4  pini
      2  dmoisset
      1  jobo
 SmartEiffel was born as an academic project; this allowed for strong theoretical foundations but hindered external contributions.
Sadly its development model has been heavily burderned - at least looking from outside - by the requirements of university which does not easily match the way "logicielle librè" ("programmi liberi" in italian) are usually developed.