Wish list

From Liberty Eiffel Wiki
Revision as of 16:36, 15 January 2006 by Ramack (talk | contribs) (→‎New keyword "attribute"?)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

If you have a request to improve SmartEiffel, to improve the SmartEiffelWiki, to ask for a new page in the Grand SmartEiffel Book or, to propose a modification of the Eiffel language of SmartEiffel, please, update this page yourself. Do not forget to sign thanks to the ~~~~ special command which gives:
Colnet 19:19, 21 Jun 2005 (MET DST).


Exception handling

My highest priority request is to improve exception handling. If an exception is caught by a "rescue" clause but remains active because there is no "retry", then the stack dump should still be printed on program termination. --Roger Browne 12:54, 13 Jul 2005 (CEST)

Yes. I don't know how the runtime behaves in that case. Meanwhile, I think a workaround is to call ANY.print_run_time_stack in your rescue clause. --Cyril 15:00, 13 Jul 2005 (CEST)

Unfortunately this doesn't work, as has been discussed many many times. It only prints the unwound stack. --Roger Browne 17:33, 18 Jul 2005 (CEST)

Well, forgive my poor forgetting mind... I thought all was solved in this area now since sz:469 is fixed. --Cyril 10:10, 28 Jul 2005 (CEST)

This is not a high priority request for me anymore. I've worked around it by removing all rescue clauses from my application Roger Browne 14:57, 23 Dec 2005 (CET)

COMMAND_LINE_TOOLS

I would very much like some documentation and/or tutorial example on how to write a new EXTERNAL_TOOL using COMMAND_LINE_TOOLS. The underlying acyclic visitor pattern has been explainhed a couple of times on the ML and I am also aware of http://smartzilla.loria.fr/attachment.cgi?id=180&action=view but what I miss is some more basic information, e.g. what exactly does the tree of visitable objects look like and how does it relate to the system being parsed? With such documentation, people would be able to write plugins for non-Eiffel specic IDEs, class browserts and the like. --Frank

The best (most up-to-date) tutorial currently available is eiffeldoc, which is an EXTERNAL_TOOL and extensively uses Visitors. Of course more information will be added in this wiki. It will be available there. --Cyril 00:25, 18 Jul 2005 (CEST)


Class TREE

I would like to have a Class TREE be added to the library. --User:Colonna 12:53, 24 Sep 2005 (CEST)


Incremental Eiffel compilation

Incremental compilation of the Eiffel sources, not only of the generated C code. --Anonymous

What for? Do you mind the compiler is too slow? --Colnet 03:13, 21 Oct 2005 (CEST)


New keyword "attribute"?

What's your opinion about the integration of "attribute" into SmartEiffel? Of course there would be no new functionality at all, but for documentations it would be very nice :-). --Interested SmartEiffel user

My opinion is that the "attribute" idea is a good idea. If other members of the team are ok too, this will be added one day in the SmartEiffel language. --Colnet 12:12, 10 Nov 2005 (CET)

I don't mind. Indeed it's a nice documenting tool. Especially for contracts. --Cyril 08:50, 12 Nov 2005 (CET)

Where should this keyword be used? - I don't see the point, sorry --Ramack 16:36, 15 Jan 2006 (CET)

Finally implementing SCOOP?

I'm very excited about all the big improvements to SmartEiffel in the latest release. Now, the only major thing still missing is SCOOP. I'd like to help with implementing SCOOP support. Does someone have a plan to implement SCOOP or suggestions on how it could be done? It appears there are two main issues here:

  1. Providing thread or process support on multiple platforms
  2. Making the code SmartEiffel generates thread-safe (this might involve, for instance, removing static globals from C code and moving them to Thread Local Storage)

My main interest in SmartEiffel is providing a development environment for mobile phone platforms such as J2ME (Java subset), BREW (C/C++ with no stdlib), and Symbian / Nokia Series 60 (unique C++ flavor, stdlib somewhat obfuscated). With the release of SmartEiffel 1.0, I started a sourceforge.net project (MobileEiffel) to modify SmartEiffel to produce code that would run on these platforms: we produced a working version pretty fast by tackling the "static globals" problem and abstracting access to stdlib.

Anyhow, I assume the SmartEiffel team has already wrestled with the problem of implementing SCOOP and I'd love to hear the planned approach to implementing it, and how developers such as myself could help.
Todd 18:17, 25 Nov 2005 (CET)

Make generated C code thread-safe?

As a starting point, how about just making the generated C code thread-safe? Right now the use of global static variables makes the generated C code unsafe.

But as soon as you say Thread, it is unsafe :-) Colnet 17:06, 19 Dec 2005 (CET)

So basically it sounds like there is no plan for implementing SCOOP in a cross-platform-compatible way-- is that correct?

It is. SCOOP is fairly complex (conceptually), hence it is rather complex (to implement), therefore it is quite complex (to use). We are not sure about implementing SCOOP. But maybe thread safety can be achieved. There are not a lot of global variables and they are almost useless (I think in particular of se_dst). It means that

  1. even if we don't implement SCOOP, someone else would be able to;
  2. we won't provide a THREAD class, but a third party could do so once the code is thread safe (probably using Plugins);
  3. there is already some multi-tasking possibilities in SmartEiffel: cooperative multi-tasking implemented by the lib/sequencer cluster, with examples both in the tutorial and The Computer Language Shootout Benchmarks (look at the cheap concurrency and chameneos benchmarks);
  4. we'd rather implement communication between process: watch the lib/net cluster, it should evolve in the following months.

--Cyril 09:43, 21 Dec 2005 (CET)


TUPLE argument in feature 'call' of class PROCEDURE

a_tuple: TUPLE [X, Y, Z]; a_agent: PROCEDURE [TUPLE [X, Y, Z]]

Invalid: a_agent.call (a_tuple) Valid: a_agent.call ([a_tuple.item_1, a_tuple.item_2, a_tuple.item_3])

I don't know the reason for this decision. Probably you carefully though about it because there is a detailed error message as one compiles the first version. (Is type-safety or performance the reason?)

If you allow calls of the first form, one could implement a class SIGNAL that replaces all SIGNAL_X classes. --Interested SmartEiffel user


The main problem is type safety. Here is the rationale (or in PDF). It means that writing a_agent.call(a_tuple) would be only syntactic sugar and a short hand for a_agent.call([a_tuple.item_1, a_tuple.item_2, a_tuple.item_3]).

But you cannot get rid of the SIGNAL_* classes because of the conformance rules: PROCEDURE[TUPLE[A,B]] does not conform to PROCEDURE[TUPLE[A,B,C]], but the opposite (see details p.136 and p.140 in the PDF file). It means that SIGNAL_4, for example, handles any agent that has up to 4 arguments. It can take less, but the given tuple cannot give less (see the `emit' feature in each SIGNAL_* class).

So, in summary, the short-hand could be implemented (maybe it will, some day); but no, it does not free us of the SIGNAL_* classes.

--Cyril 14:52, 30 Nov 2005 (CET)

Sorry, I don't think so. For me, PROCEDURE[TUPLE[A,B]] does conform to PROCEDURE[TUPLE[A,B,C]]. -- Philippe Ribet

What did I miss? Philippe, please fix my argument. Maybe I'm wrong. You know the topic better than me. --Cyril 11:34, 21 Dec 2005 (CET)