From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Marco Maggi" Newsgroups: gmane.lisp.guile.user Subject: the future of Guile Date: Tue, 4 Dec 2007 07:50:51 +0100 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1196751067 4658 80.91.229.12 (4 Dec 2007 06:51:07 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 4 Dec 2007 06:51:07 +0000 (UTC) To: "guile-user" Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Tue Dec 04 07:51:17 2007 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1IzRcg-0002Ti-Ao for guile-user@m.gmane.org; Tue, 04 Dec 2007 07:51:14 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IzRcP-0005os-Tb for guile-user@m.gmane.org; Tue, 04 Dec 2007 01:50:57 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IzRcL-0005oe-Pr for guile-user@gnu.org; Tue, 04 Dec 2007 01:50:53 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IzRcL-0005oS-5u for guile-user@gnu.org; Tue, 04 Dec 2007 01:50:53 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IzRcL-0005oP-1p for guile-user@gnu.org; Tue, 04 Dec 2007 01:50:53 -0500 Original-Received: from relay-pt3.poste.it ([62.241.4.129]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IzRcK-0006H8-In for guile-user@gnu.org; Tue, 04 Dec 2007 01:50:52 -0500 Original-Received: from poste.it (192.168.144.52) by relay-pt3.poste.it (7.3.122) (authenticated as marco.maggi-ipsu@poste.it) id 475498C700001909 for guile-user@gnu.org; Tue, 4 Dec 2007 07:50:51 +0100 X-Sensitivity: 3 X-XaM3-API-Version: 4.3 (R1) (B3pl19) X-SenderIP: 83.190.104.69 X-detected-kernel: by monty-python.gnu.org: Solaris 9 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:6315 Archived-At: Ciao, I think that it is time for a chat on the future of Guile. It is a difficult topic, but: the sooner, the better. The plan I outline below requires a lot of work and a lot of discussion, and I can volunteer only for some of it. But of what use is the silence? It seems clear to me that Guile cannot compete in terms of speed with projects like PLT Scheme, Ikarus and YouNameIt Scheme with a native/JIT/VM/TheNext compiler. But it does not have to because, like it or not, Guile is a language for extensions. With this in mind... Guidelines ---------- 1. Guile as a lightweight choice. 2. Simplicity of the C interface. 3. For Guile 2.0 backwards compatibility at the C level can be broken. Freely. No shame. No blame. Concrete goals -------------- 1. ISO C99, can we look forward? 1a. Why functions like SIN have a Scheme implementation for complex numbers when standard C has "csin"? 2. GOOPS always there. 2a. It is fine to have both procedures and generic functions, but the default for Guile's C coded procedures must be primitive generic. Non-primitive generics are allowed as exceptions (case: READ is a primitive procedure, dunno why). 3. Everything must be a SMOB: ports, values, classes, instances. We can fight over procedures. 3a. The limit on SMOB type number must be destroyed. 3b. Death to structs! IMO they were "an attempt", but the resulting code is awful (sorry, but can you disagree?). 3c. Every SMOB must have a class and an optional list of superclasses, to allow for methods dispatching. This is not meant to be an attempt to "corrupt" the concept of class, but a mean to extend methods dispatching. 4. If a garbage collector allows to remove the need for "scm_remember_upto_here" it must be adopted even if it makes Guile slower and it raises memory usage a bit (or more than a bit). 5. Guile must be loadable/unloadable as a shared library. Use case: once I have read a configuration file or a sexp data file, I do not need it anymore. 5a. A lighter feature would be useful, too: to collect all the allocated SMOBs (running GC twice, guardians can release async resources). It would be optional, so it is all right to have situations in which this is forbidden. 6. More modularity. 6a. All the non-string ports should go into a loadable module. 6b. The networking stuff should go into a loadable module. 6c. GMP support should go into a loadable module (do not nuke my mailbox, please). 6d. Floating point math procedures should go into a loadable module. Once they are there, more functions can be added (from the standard C library and not) and a "long double" SMOB can be put in, too. 6e. Records should go into a loadable module. 7. Every feature can be added as a loadable module. 7a. It makes no sense to discuss if Guile should go R6RS or not. The only meaningful discussion is about which hooks are needed in Guile's code to make those features available as loadable modules. (Yes, this is difficult). 8. Hackability of the core. If nobody understands it... 8a. Ludovic, do you still have that patch that reduces the size of the evaluator? I do not want to hurt anyone's feelings, but I do not understand why it was rejected. 8b. There are struct types in the core whose name is not prefixed with "scm_t_" (example: scm_metaclass_standard) this should be fixed. (Yes, I am a nazi with other people's code and I allow mine to become wastesource.) 8c. This is for my own ego: yeah, yeah, yeah! Define: typedef SCM scm_t; Emacs font locking kisses "scm_t" automatically. Tough ones ---------- 1. TCL has nice programs that allow to distribute single file auto-extracting-and-running archives holding the core executable, shared libraries, pure TCL modules and some data files (search for "tclkit"). 2. Resurrect Serveez. 3. Resurrect SCWM (Scheme Constraints Window Manager). -- Marco Maggi "Now feel the funk blast!" Rage Against the Machine - "Calm like a bomb" _______________________________________________ Guile-user mailing list Guile-user@gnu.org http://lists.gnu.org/mailman/listinfo/guile-user