guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

TODO


From: thi
Subject: TODO
Date: Sun, 03 Jun 2001 12:26:24 -0700

write the following to TODO and try it like: "guile -s TODO".  what do
you think?  it's still unpolished but i thought i'd get some feedback
before finishing up and adding this to top-level guile-core...

thi


_________________________________________________
;;; You think in -*- scheme -*-, don't you?  Maybe that's something TODO.
;;; NOTE: Tasks start on next page.

;;      Copyright (C) 2001 Free Software Foundation, Inc.
;;
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;; General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this software; see the file COPYING.  If not, write to
;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
;; Boston, MA 02111-1307 USA

;;; Commentary:

;; Usage
;; ----
;; guile -s TODO [OPTIONS] [REPORT]
;; where REPORT is one of "by-owner", "by-task" or "full" (default)
;; where OPTIONS is one of:
;; --html        -- output html instead of default (text)
;;
;; Philosophy
;; ----------
;; Collaborative development is best served when built around a protocol
;; wherein some consensus for tasks is achieved and recorded, followed by
;; developer action and closure.  This program helps developers record and
;; follow their progress.
;;
;; Mailing lists are great for building consensus and archiving the
;; decision-making process, including declarations of interest and intent, but
;; typically are not structured enough to allow for efficient summarization of
;; the current project status.
;;
;; On the other hand, a simple TODO list (the conceptual predecessor to this
;; program, hence its name) looks forward, discarding history of finished
;; tasks, and usually does not reference the discussion whence the task arose.
;; This leads to bitrot which easily goes uncorrected because there is no
;; benefit to maintaining a bunch of derivative static data.  Only manglers
;; care about that stuff!

;;; Code:

(use-modules (ice-9 format))

(define *tasks* '())                    ; see next page

(defmacro define-task (task . attributes)
  `(set! *tasks* (acons ',task ',attributes *tasks*)))

(define output-mode 'text)

(define (output-table-TEXT title colnames rows)
  (format #t "***~A***~%" title)
  (for-each (lambda (row)
              (let loop ((colnames colnames) (row row))
                (cond ((or (null? colnames) (null? row)))
                      (else
                       (format #t "~A\t~A~%" (car colnames) (car row))
                       (loop (cdr colnames) (cdr row)))))
              (newline))
            rows))

(define (output-table-HTML title colnames rows)
  (format #t "<table border=5 cellspacing=5 cellpadding=5>~%")
  (format #t "<tr>")
  (for-each (lambda (col) (format #t "<td>~A</td>" col)) colnames)
  (format #t "</tr>~%")
  (for-each (lambda (row)
              (format #t "<tr>~%")
              (let loop ((row row))
                (cond ((null? row))
                      (else
                       (format #t "<td>~A</td>~%" (car row))
                       (loop (cdr row)))))
              (format #t "</tr>~%"))
            rows)
  (format #t "</table>~%"))

(define output-table output-table-TEXT)

(define (>>>report-tasks!)
  (let* ((colnames '(owner aim-for notes))
         (rows (map (lambda (task)
                      (cons (car task)
                            (map (lambda (x)
                                   (assq-ref (cdr task) x))
                                 colnames)))
                    *tasks*)))
    (output-table "TASKS" (cons 'task colnames) rows)))


;;; Tasks -- these are in no particular order (however, later tasks tend to be
;;; output first)
;;;
;;; The task name should be a symbol w/ syntax `#{verb object ...}#'.  Note
;;; the "verb" -- tasks are actions.
;;;
;;; Each task may have an owner, and an `aim-for' field which may be the
;;; symbol `ongoing', or a short string that specifies a date or version
;;; number.  When a task is completed, do NOT remove it.  Instead, replace its
;;; orig `aim-for' value ORIG with the list (ACTUAL ORIG).  ACTUAL should be
;;; be a date, even if ORIG was a version number.  If a task is dropped, use
;;; "#f" for ACTUAL.  Tasks can be removed after a release or two.
;;;
;;; The task may optionally have a `notes' field, which can have any value,
;;; but typically is either a string (for short notes), or a symbol w/ syntax
;;; `#{text ...}#'.

(define-task #{update reference manual}#
  (owner   . neil)
  (aim-for . ongoing))

(define-task #{maintain Guile FAQ}#
  (owner   . ttn)
  (aim-for . ongoing))

(define-task #{revamp Guile WWW pages at GNU}#
  (owner   . peter)
  (aim-for . ("2000-08-02" "1.5")))

(define-task #{maintain Guile project list}#
  (owner   . ttn)
  (aim-for . ongoing))

(define-task #{maintain Debian package}#
  (owner   . rlb)
  (aim-for . ongoing))

(define-task #{maintain RPM package}#
  (owner   . ryanw)
  (aim-for . ongoing))

(define-task #{write generic translator support}#
  (owner   . mdj))

(define-task #{integrate Jost's environments}#
  (owner   . dirk)
  (aim-for . ("2001-01-01" "1.5")))     ; fixme: guessing finish for now

(define-task #{implement generational gc}#
  (owner   . livshin))

(define-task #{add POSIX thread support}#
  (owner   . niibe))

(define-task #{factor thread support out of libguile}#
  (owner   . niibe))                    ; fixme: how to include `dirk'?

(define-task #{protect common resources using mutecis from the new interface}#
  (owner   . maciej))

(define-task #{remove the dynamic roots}#)

(define-task #{revise the fluid implementation}#
  (notes   . #{
Trying to use the thread library's support for thread local data
(get/setspecific).
}#))

(define-task #{implement GC thread synchronization}#
  (notes   . #{
All threads: Go to sleep!

One suitable synchronization point is probably SCM_TICK.

Note also that threads which are in I/O or timeout should be regarded
as stopped and that we need synchronization points *after* each I/O or
timeout, so that they really stop afterward if Guile is still in GC.
}#))

(define-task #{implement the libguileposix threads glue library}#
  (notes   . #{
This corresponds to the libguilecoop library implemented during the
thread factorization.
}#))

(define-task #{integrate GOOPS into libguile}#
  (owner   . mdj)
  (aim-for . ("2001-01-01" "1.5")))     ; fixme: guess

(define-task #{develop better representation for GOOPS objects}#
  (owner   . livshin))

(define-task #{rewrite GOOPS method cache management in C}#
  (owner   . ttn))

(define-task #{rewrite GOOPS core macros (define-class et al) in C}#
  (owner   . ttn))

(define-task #{design GOOPS C API}#
  (owner   . moore))

(define-task #{write GOOPS<->Orbit interface}#)

(define-task #{deprecate `read-only-string?'}#)

(define-task #{remove GUILE_OLD_ASYNC_CLICK macro}#
  (notes   . #{
This should be done after signal handling and threading have been fixed.
}#))

(define-task #{ensure deprecation mechanism works}#
  (aim-for . "1.6.0")
  (notes   . "The deprecation mechanism is described in INSTALL and README."))

(define-task #{remove deprecated subr and gsubr functions}#
  (aim-for . "1.8.0")
  (notes   . #{
    in procs.h, procs.c: scm_make_subr, scm_make_subr_opt,
      scm_make_subr_with_generic,
    in gsubr.h, gsubr.c: scm_make_gsubr, scm_make_gsubr_with_generic.
}#))
    
(define-task #{remove deprecated C interface to modules}#
  (aim-for . "1.8.0")
  (notes   . #{
    in modules.h, modules.c:
      root_module_lookup_closure, scm_sym_app, scm_sym_modules,
      module_prefix, make_modules_in_var, beautify_user_module_x_var,
      scm_the_root_module, scm_make_module, scm_ensure_user_module,
      scm_load_scheme_module
}#))

(define-task #{remove vcell and obarray support}#
  (aim-for . "1.8.0")
  (notes   . #{
  Remove all code bracketed by `#if SCM_ENABLE_VCELLS'.
  Remove SCM_ENABLE_VCELLS itself.
  Also remove `variable-set-name-hint' completely.
}#))

(define-task #{remove compatability module (ice-9 and-let*)}#
  (aim-for . "1.8.0")
  (notes   . #{
It has been replaced by (ice-9 and-let-star) and/or (srfi srfi-2).
}#))

(define-task #{remove support for autoloading compiled-code modules}#
  (aim-for . "1.8.0")
  (notes   . #{
    try-module-linked
    try-module-dynamic-link
    init-dynamic-module
    scm_register_module_xxx
    scm_registered_modules
    scm_clear_registered_modules
}#))

(define-task #{remove deprecated variables}#
  (aim-for . "1.8.0")
  (notes   . #{
    scm_top_level_lookup_closure_var
    scm_scm_system_transformer
    Remove all code that still sets them:
     `use-syntax', scm_set_current_module, ...
}#))

(define-task #{remove deprecated functions}#
  (aim-for . "1.8.0")
  (notes   . #{
    eval.c: scm_eval2, scm_eval_3
    load.c: scm_read_and_eval_x
    smob.c: scm_make_smob_type_mfpe, scm_set_smob_mfpe
    gc.c: scm_remember
    string.c: scm_makstr
}#))

(define-task #{remove deprecated procedures}#
  (aim-for . "1.8.0")
  (notes   . #{
    boot-9.scm: eval-in-module, id, -1+, return-it, string-character-length,
      flags
}#))

(define-task #{remove deprecated macros}#
  (aim-for . "1.8.0")
  (notes   . #{
  SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL, 
  SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, 
  SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, 
  SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SLOPPY_STRINGP, SCM_VALIDATE_STRINGORSUBSTR,
  SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS, SCM_VALIDATE_ROSTRING,
  SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH,
  SCM_LENGTH, SCM_HUGE_LENGTH, SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
  SCM_COERCE_SUBSTR, SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING,
  SCM_ROCHARS, SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX,
  SCM_GC8MARKP, SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR,
  SCM_SUBR_DOC, SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA,
  SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
  SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP,
  SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR,
  SCM_ARRAY_CONTIGUOUS
}#))

(define-task #{remove scm_vector_set_length_x}#
  (aim-for . "1.8.0"))

(define-task #{remove function scm_call_catching_errors}#
  (aim-for . "1.8.0")
  (notes   . "(replaced by catch functions from throw.[ch])"))

(define-task #{remove support for "#&" reader syntax in (ice-9 optargs).}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_make_shared_substring}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_read_only_string_p}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_strhash}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_tc7_ssymbol}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_tc7_msymbol}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_tcs_symbols}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member}#
  (aim-for . "1.8.0"))

(define-task #{(maybe) remove automatic loading of (ice-9 rdelim) on startup}#
  (aim-for . "1.8.0")
  (notes   . #{
  This would be a brave move, since a lot of code will
  assume that read-line is available by default.  However it would make
  it easier to use alternative implementations of this module, e.g., a
  strictly scsh-compatible version which uses multiple values.  For
  interactive use it would be easy to load the module in ~/.guile.
}#))

(define-task #{remove scm_close_all_ports_except}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_strprint_obj}#
  (aim-for . "1.8.0"))

(define-task #{remove SCM_CONST_LONG}#
  (aim-for . "1.8.0"))

(define-task #{remove scm_wta}#
  (aim-for . "1.8.0"))

(define-task #{remove deprecated typedefs}#
  (aim-for . "1.8.0")
  (notes   . "long_long, ulong_long, scm_sizet"))

(define-task #{remove deprecated macros}#
  (aim-for . "1.8.0")
  (notes   . #{
  scm_contregs, scm_port_rw_active,
  scm_port, scm_ptob_descriptor, scm_debug_info, scm_debug_frame,
  scm_fport, SCM_FIXNUM_BIT, scm_option, scm_subr_entry, scm_rstate,
  scm_rng, scm_i_rstate, scm_srcprops, scm_srcprops_chunk,
  scm_info_frame, scm_stack, scm_array, scm_array_dim
}#))

(define-task #{remove deprecated functions}#
  (aim-for . "1.8.0")
  (notes   . #{
  scm_mkbig, scm_big2num, scm_adjbig,
  scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
}#))

(define-task #{remove deprecated functions}#
  (aim-for . "1.8.0")
  (notes   . "scm_protect_object, scm_unprotect_object, scm_create_hook"))

(define-task #{factor out sort.c and random.c}#
  (notes   . #{
Modules sort.c and random.c should be factored out into separate
modules (but still be distributed with guile-core) when we get a new
module system.
}#))


(>>>report-tasks!)

;;; TODO ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]