[Top][All Lists]
[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