gcl-devel
[Top][All Lists]
Advanced

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

[Gcl-devel] Re: xgcl


From: Camm Maguire
Subject: [Gcl-devel] Re: xgcl
Date: 18 Jun 2006 10:08:50 -0400
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Greetings!  forgot one point here:

Matt Kaufmann <address@hidden> writes:

> Hi, Gordon and Camm --
> 
> And another question (sorry, more ignorance here): What is pargcl?  From the
> name I imagine it has some sort of parallelization capability, but I thought
> I'd heard that it would be quite some time before one could hope to have that
> sort of support in GCL, so I'd appreciate a little info on this.
> 

pargcl is a cluster parallelization facility based on MPI (Message
Passing Interface), a standard used in many high performance floating
point clustering applications, such as many put out by netlib, etc.

2.7.0 also has (on unix) fork based parallelization primitives p-or,
    p-and, and p-let which should be self explanatory.  This is finer
    grained parallelism at about the 0.7 to 2 millisecond level.
    Threads are somewhat finer still, but lisp is so interconnected
    that one has to either be very careful about one's code, or put
    locks on everywhere.  fork based, with its copy-on-write memory
    pages, guarantees code correctness without much thought.  GCL
    allocates memory in the children on the huge C stack to minimized
    gc overhead and consequent page copying.  This is work in
    progress, but it appears promising.

Take care,


> Thanks again --
> -- Matt
>    cc: Robert Boyer <address@hidden>, Matt Kaufmann <address@hidden>,
>          address@hidden, "Robert Dodier" <address@hidden>,
>          root <address@hidden>
>    From: Camm Maguire <address@hidden>
>    Date: 07 Jun 2006 15:47:28 -0400
>    X-SpamAssassin-Status: No, hits=-1.0 required=5.0
>    X-UTCS-Spam-Status: No, hits=-94 required=200
> 
>    Greetings!
> 
>    I've finally opened a window big enough (I believe) to finalize xgcl,
>    and thereby get 2.6.8 out the door, with new acl2,maxima, and possible
>    axiom packages atop.  Lisp certainly does make dependency issues
>    interesting. 
> 
>    I'm about the check in Gordon Novak's xgcl-4 files, and a new build
>    mechanism which will support both ansi and traditional images.
> 
>    The issue here is in what we decide to ship in Debian packages.  If
>    xgcl is seemlessly supported in the base images, then all the programs
>    above will require x windows to run (i.e. the images will link against
>    -lX11, etc.)  Right now, the gcl package ships 4 images, ansi and
>    trad, profiling and non.  I am a bit uncomfortable about adding to
>    this list.  If this is agreed upon, then we either go with X windows
>    across the board, or have X windows built in by default by a user
>    compiling from source only, but not in the shipped images.  Perhaps in
>    the latter case, we can have an xgcl Debian package so that this
>    wonderful code sees some distribution and use, but keep the build
>    dependencies for maxima acl2 and axiom on the original non-xgcl.
> 
>    The other issue akin to this is what to do about pargcl in the shipped
>    Debian packages -- is everyone comfortable depending upon an mpi
>    shared library?
> 
>    Even if these features were supported by autoloadable modules, the
>    Debian package would still require X11 as a dependency, etc.  And Bob
>    Boyer has expressed displeasure with autoloading :-).
> 
>    Thoughts most appreciated.  Please share your opinion ASAP, as my time
>    window might close soon.
> 
>    Take care,
> 
>    Robert Boyer <address@hidden> writes:
> 
>    > > What are your patches again?
>    > 
>    >    /u/boyer/patch-gcl.el
>    > 
>    > does a number of trivial things and includes one auxiliary file, namely,
>    > 
>    >   /u/boyer/patch-gcl-init_ansi_gcl.lsp.in 
>    > 
>    > I send you both files as text below.
>    > 
>    > I also have to do one "touch" to get my
>    > 
>    >   make install
>    > 
>    > to work:
>    > 
>    >   touch gcl.script
>    > 
>    > Bob
>    > 
>    > 
> -------------------------------------------------------------------------------
>    > 
>    > Here is  /u/boyer/patch-gcl.el:
>    > 
>    > (require 'cl)
>    > 
>    > (defun patch-gcl ()
>    >   (interactive "")
>    > 
>    >   ;; Change the gcl-tk makefile to not build static.
>    > 
>    >   (find-file "/u/boyer/my-partition/gcl-2.7.0/gcl-tk/makefile")
>    >   (widen)
>    >   (goto-char (point-min))
>    >   (cond ((not (search-forward "LIBS=" nil t))
>    >          (search-forward "-include ../makedefs")
>    >          (forward-char 1)
>    >          (insert "LIBS=   -Wl,-zmuldefs   -lm\n")
>    >          (save-buffer 0)))
>    > 
>    >   ;; Change the main makefile to call lisp::reset-sys-paths.
>    > 
>    >   (find-file "/u/boyer/my-partition/gcl-2.7.0/makefile")
>    >   (widen)
>    >   (goto-char (point-min))
>    >   (replace-string "'(reset-sys-paths" "'(lisp::reset-sys-paths")
>    >   (save-buffer 0)
>    > 
>    >   ;; Change the elisp makefile to stop an attempt to create tmp files in 
> root.
>    > 
>    >   (find-file "/u/boyer/my-partition/gcl-2.7.0/elisp/makefile")
>    >   (widen)
>    >   (goto-char (point-min))
>    >   (cond ((search-forward "if [ " nil t)
>    >          (beginning-of-line 1)
>    >          (kill-region (point) (point-max))
>    >          (save-buffer 0)))
>    > 
>    >   ;; Load the patches in /u/boyer/patch-gcl-init_ansi_gcl.lsp.in.
>    > 
>    >   (find-file 
> "/u/boyer/my-partition/gcl-2.7.0/unixport/init_ansi_gcl.lsp.in")
>    >   (widen)
>    >   (goto-char (point-min))
>    >   (cond ((not (search-forward "Boyer" nil t))
>    >          (goto-char (point-max))
>    >          (insert-file "/u/boyer/patch-gcl-init_ansi_gcl.lsp.in")
>    >          (save-buffer 0)))
>    > 
>    >   ;;  Fix the info file in makedefs
>    > 
>    >   (find-file "/u/boyer/my-partition/gcl-2.7.0/makedefs")
>    >   (widen)
>    >   (goto-char (point-min))
>    >   (replace-string "INFO_DIR=/usr/share/info/"
>    >                   
> "INFO_DIR=/u/boyer/my-partition/gcl.big.static.ansi2/infodir")
>    >   (save-buffer 0)
>    > 
>    > )
>    > 
>    > 
>    > 
> -------------------------------------------------------------------------------
>    > 
>    > Here is /u/boyer/patch-gcl-init_ansi_gcl.lsp.in:
>    > 
>    > ;; Hacks for GCL 2.7.0 by Boyer.  -*-Lisp-*-
>    > 
>    > ;; The following text is appended to unixport/init_ansi_gcl.lisp.in when 
> we
>    > ;; get a fresh copy of cvs head.  We prefer to put all our patches to gcl
>    > ;; here, but the other patches in /u/boyer/patch-gcl.lisp are not as 
> simple
>    > ;; as those below.
>    > 
>    > (in-package :cl)
>    > 
>    > ; The 978 external symbols in the package COMMON-LISP:
>    > 
>    > (let ((a '(&allow-other-keys &aux &body &environment &key &optional 
> &rest &whole * **
>    >      *** *break-on-signals* *compile-file-pathname* 
> *compile-file-truename*
>    >      *compile-print* *compile-verbose* *debug-io* *debugger-hook*
>    >      *default-pathname-defaults* *error-output* *features* 
> *gensym-counter*
>    >      *load-pathname* *load-print* *load-truename* *load-verbose*
>    >      *macroexpand-hook* *modules* *package* *print-array* *print-base*
>    >      *print-case* *print-circle* *print-escape* *print-gensym* 
> *print-length*
>    >      *print-level* *print-lines* *print-miser-width* 
> *print-pprint-dispatch*
>    >      *print-pretty* *print-radix* *print-readably* *print-right-margin* 
> *query-io*
>    >      *random-state* *read-base* *read-default-float-format* *read-eval*
>    >      *read-suppress* *readtable* *standard-input* *standard-output* 
> *terminal-io*
>    >      *trace-output* + ++ +++ - / // /// /= 1+ 1- < <= = > >= abort abs 
> acons acos
>    >      acosh add-method adjoin adjust-array adjustable-array-p 
> allocate-instance
>    >      alpha-char-p alphanumericp and append apply apropos apropos-list 
> aref
>    >      arithmetic-error arithmetic-error-operands 
> arithmetic-error-operation array
>    >      array-dimension array-dimension-limit array-dimensions 
> array-displacement
>    >      array-element-type array-has-fill-pointer-p array-in-bounds-p 
> array-rank
>    >      array-rank-limit array-row-major-index array-total-size
>    >      array-total-size-limit arrayp ash asin asinh assert assoc assoc-if
>    >      assoc-if-not atan atanh atom base-char base-string bignum bit 
> bit-and
>    >      bit-andc1 bit-andc2 bit-eqv bit-ior bit-nand bit-nor bit-not 
> bit-orc1
>    >      bit-orc2 bit-vector bit-vector-p bit-xor block boole boole-1 boole-2
>    >      boole-and boole-andc1 boole-andc2 boole-c1 boole-c2 boole-clr 
> boole-eqv
>    >      boole-ior boole-nand boole-nor boole-orc1 boole-orc2 boole-set 
> boole-xor
>    >      boolean both-case-p boundp break broadcast-stream 
> broadcast-stream-streams
>    >      built-in-class butlast byte byte-position byte-size caaaar caaadr 
> caaar
>    >      caadar caaddr caadr caar cadaar cadadr cadar caddar cadddr caddr 
> cadr
>    >      call-arguments-limit call-method call-next-method car case catch 
> ccase cdaaar
>    >      cdaadr cdaar cdadar cdaddr cdadr cdar cddaar cddadr cddar cdddar 
> cddddr cdddr
>    >      cddr cdr ceiling cell-error cell-error-name cerror change-class char
>    >      char-code char-code-limit char-downcase char-equal char-greaterp 
> char-int
>    >      char-lessp char-name char-not-equal char-not-greaterp char-not-lessp
>    >      char-upcase char/= char< char<= char= char> char>= character 
> characterp
>    >      check-type cis class class-name class-of clear-input clear-output 
> close
>    >      clrhash code-char coerce compilation-speed compile compile-file
>    >      compile-file-pathname compiled-function compiled-function-p 
> compiler-macro
>    >      compiler-macro-function complement complex complexp
>    >      compute-applicable-methods compute-restarts concatenate 
> concatenated-stream
>    >      concatenated-stream-streams cond condition conjugate cons consp 
> constantly
>    >      constantp continue control-error copy-alist copy-list 
> copy-pprint-dispatch
>    >      copy-readtable copy-seq copy-structure copy-symbol copy-tree cos 
> cosh count
>    >      count-if count-if-not ctypecase debug decf declaim declaration 
> declare
>    >      decode-float decode-universal-time defclass defconstant defgeneric
>    >      define-compiler-macro define-condition define-method-combination
>    >      define-modify-macro define-setf-expander define-symbol-macro 
> defmacro
>    >      defmethod defpackage defparameter defsetf defstruct deftype defun 
> defvar
>    >      delete delete-duplicates delete-file delete-if delete-if-not 
> delete-package
>    >      denominator deposit-field describe describe-object 
> destructuring-bind
>    >      digit-char digit-char-p directory directory-namestring disassemble
>    >      division-by-zero do do* do-all-symbols do-external-symbols 
> do-symbols
>    >      documentation dolist dotimes double-float double-float-epsilon
>    >      double-float-negative-epsilon dpb dribble dynamic-extent ecase 
> echo-stream
>    >      echo-stream-input-stream echo-stream-output-stream ed eighth elt
>    >      encode-universal-time end-of-file endp enough-namestring
>    >      ensure-directories-exist ensure-generic-function eq eql equal 
> equalp error
>    >      etypecase eval eval-when evenp every exp export expt extended-char 
> fboundp
>    >      fceiling fdefinition ffloor fifth file-author file-error 
> file-error-pathname
>    >      file-length file-namestring file-position file-stream 
> file-string-length
>    >      file-write-date fill fill-pointer find find-all-symbols find-class 
> find-if
>    >      find-if-not find-method find-package find-restart find-symbol 
> finish-output
>    >      first fixnum flet float float-digits float-precision float-radix 
> float-sign
>    >      floating-point-inexact floating-point-invalid-operation
>    >      floating-point-overflow floating-point-underflow floatp floor 
> fmakunbound
>    >      force-output format formatter fourth fresh-line fround ftruncate 
> ftype
>    >      funcall function function-keywords function-lambda-expression 
> functionp gcd
>    >      generic-function gensym gentemp get get-decoded-time
>    >      get-dispatch-macro-character get-internal-real-time 
> get-internal-run-time
>    >      get-macro-character get-output-stream-string get-properties
>    >      get-setf-expansion get-universal-time getf gethash go graphic-char-p
>    >      handler-bind handler-case hash-table hash-table-count hash-table-p
>    >      hash-table-rehash-size hash-table-rehash-threshold hash-table-size
>    >      hash-table-test host-namestring identity if ignorable ignore 
> ignore-errors
>    >      imagpart import in-package incf initialize-instance inline 
> input-stream-p
>    >      inspect integer integer-decode-float integer-length integerp
>    >      interactive-stream-p intern internal-time-units-per-second 
> intersection
>    >      invalid-method-error invoke-debugger invoke-restart
>    >      invoke-restart-interactively isqrt keyword keywordp labels lambda
>    >      lambda-list-keywords lambda-parameters-limit last lcm ldb ldb-test 
> ldiff
>    >      least-negative-double-float least-negative-long-float
>    >      least-negative-normalized-double-float 
> least-negative-normalized-long-float
>    >      least-negative-normalized-short-float 
> least-negative-normalized-single-float
>    >      least-negative-short-float least-negative-single-float
>    >      least-positive-double-float least-positive-long-float
>    >      least-positive-normalized-double-float 
> least-positive-normalized-long-float
>    >      least-positive-normalized-short-float 
> least-positive-normalized-single-float
>    >      least-positive-short-float least-positive-single-float length let 
> let*
>    >      lisp-implementation-type lisp-implementation-version list list*
>    >      list-all-packages list-length listen listp load
>    >      load-logical-pathname-translations load-time-value locally log 
> logand
>    >      logandc1 logandc2 logbitp logcount logeqv logical-pathname
>    >      logical-pathname-translations logior lognand lognor lognot logorc1 
> logorc2
>    >      logtest logxor long-float long-float-epsilon 
> long-float-negative-epsilon
>    >      long-site-name loop loop-finish lower-case-p machine-instance 
> machine-type
>    >      machine-version macro-function macroexpand macroexpand-1 macrolet 
> make-array
>    >      make-broadcast-stream make-concatenated-stream make-condition
>    >      make-dispatch-macro-character make-echo-stream make-hash-table 
> make-instance
>    >      make-instances-obsolete make-list make-load-form 
> make-load-form-saving-slots
>    >      make-method make-package make-pathname make-random-state 
> make-sequence
>    >      make-string make-string-input-stream make-string-output-stream 
> make-symbol
>    >      make-synonym-stream make-two-way-stream makunbound map map-into 
> mapc mapcan
>    >      mapcar mapcon maphash mapl maplist mask-field max member member-if
>    >      member-if-not merge merge-pathnames method method-combination
>    >      method-combination-error method-qualifiers min minusp mismatch mod
>    >      most-negative-double-float most-negative-fixnum 
> most-negative-long-float
>    >      most-negative-short-float most-negative-single-float
>    >      most-positive-double-float most-positive-fixnum 
> most-positive-long-float
>    >      most-positive-short-float most-positive-single-float muffle-warning
>    >      multiple-value-bind multiple-value-call multiple-value-list
>    >      multiple-value-prog1 multiple-value-setq multiple-values-limit 
> name-char
>    >      namestring nbutlast nconc next-method-p nil nintersection ninth
>    >      no-applicable-method no-next-method not notany notevery notinline 
> nreconc
>    >      nreverse nset-difference nset-exclusive-or nstring-capitalize
>    >      nstring-downcase nstring-upcase nsublis nsubst nsubst-if 
> nsubst-if-not
>    >      nsubstitute nsubstitute-if nsubstitute-if-not nth nth-value nthcdr 
> null
>    >      number numberp numerator nunion oddp open open-stream-p optimize or 
> otherwise
>    >      output-stream-p package package-error package-error-package 
> package-name
>    >      package-nicknames package-shadowing-symbols package-use-list
>    >      package-used-by-list packagep pairlis parse-error parse-integer
>    >      parse-namestring pathname pathname-device pathname-directory 
> pathname-host
>    >      pathname-match-p pathname-name pathname-type pathname-version 
> pathnamep
>    >      peek-char phase pi plusp pop position position-if position-if-not 
> pprint
>    >      pprint-dispatch pprint-exit-if-list-exhausted pprint-fill 
> pprint-indent
>    >      pprint-linear pprint-logical-block pprint-newline pprint-pop 
> pprint-tab
>    >      pprint-tabular prin1 prin1-to-string princ princ-to-string print
>    >      print-not-readable print-not-readable-object print-object
>    >      print-unreadable-object probe-file proclaim prog prog* prog1 prog2 
> progn
>    >      program-error progv provide psetf psetq push pushnew quote random
>    >      random-state random-state-p rassoc rassoc-if rassoc-if-not ratio 
> rational
>    >      rationalize rationalp read read-byte read-char read-char-no-hang
>    >      read-delimited-list read-from-string read-line 
> read-preserving-whitespace
>    >      read-sequence reader-error readtable readtable-case readtablep real 
> realp
>    >      realpart reduce reinitialize-instance rem remf remhash remove
>    >      remove-duplicates remove-if remove-if-not remove-method remprop 
> rename-file
>    >      rename-package replace require rest restart restart-bind 
> restart-case
>    >      restart-name return return-from revappend reverse room rotatef round
>    >      row-major-aref rplaca rplacd safety satisfies sbit scale-float 
> schar search
>    >      second sequence serious-condition set set-difference
>    >      set-dispatch-macro-character set-exclusive-or set-macro-character
>    >      set-pprint-dispatch set-syntax-from-char setf setq seventh shadow
>    >      shadowing-import shared-initialize shiftf short-float 
> short-float-epsilon
>    >      short-float-negative-epsilon short-site-name signal signed-byte 
> signum
>    >      simple-array simple-base-string simple-bit-vector 
> simple-bit-vector-p
>    >      simple-condition simple-condition-format-arguments
>    >      simple-condition-format-control simple-error simple-string 
> simple-string-p
>    >      simple-type-error simple-vector simple-vector-p simple-warning sin
>    >      single-float single-float-epsilon single-float-negative-epsilon 
> sinh sixth
>    >      sleep slot-boundp slot-exists-p slot-makunbound slot-missing 
> slot-unbound
>    >      slot-value software-type software-version some sort space special
>    >      special-operator-p speed sqrt stable-sort standard standard-char
>    >      standard-char-p standard-class standard-generic-function 
> standard-method
>    >      standard-object step storage-condition store-value stream 
> stream-element-type
>    >      stream-error stream-error-stream stream-external-format streamp 
> string
>    >      string-capitalize string-downcase string-equal string-greaterp
>    >      string-left-trim string-lessp string-not-equal string-not-greaterp
>    >      string-not-lessp string-right-trim string-stream string-trim 
> string-upcase
>    >      string/= string< string<= string= string> string>= stringp structure
>    >      structure-class structure-object style-warning sublis subseq 
> subsetp subst
>    >      subst-if subst-if-not substitute substitute-if substitute-if-not 
> subtypep
>    >      svref sxhash symbol symbol-function symbol-macrolet symbol-name
>    >      symbol-package symbol-plist symbol-value symbolp synonym-stream
>    >      synonym-stream-symbol t tagbody tailp tan tanh tenth terpri the 
> third throw
>    >      time trace translate-logical-pathname translate-pathname tree-equal 
> truename
>    >      truncate two-way-stream two-way-stream-input-stream
>    >      two-way-stream-output-stream type type-error type-error-datum
>    >      type-error-expected-type type-of typecase typep unbound-slot
>    >      unbound-slot-instance unbound-variable undefined-function unexport 
> unintern
>    >      union unless unread-char unsigned-byte untrace unuse-package 
> unwind-protect
>    >      update-instance-for-different-class 
> update-instance-for-redefined-class
>    >      upgraded-array-element-type upgraded-complex-part-type upper-case-p
>    >      use-package use-value user-homedir-pathname values values-list 
> variable
>    >      vector vector-pop vector-push vector-push-extend vectorp warn 
> warning when
>    >      wild-pathname-p with-accessors with-compilation-unit 
> with-condition-restarts
>    >      with-hash-table-iterator with-input-from-string with-open-file
>    >      with-open-stream with-output-to-string with-package-iterator
>    >      with-simple-restart with-slots with-standard-io-syntax write 
> write-byte
>    >      write-char write-line write-sequence write-string write-to-string 
> y-or-n-p
>    >      yes-or-no-p zerop)))
>    >   (make-package "Z")
>    >   (import a "Z")
>    >   (export a "Z")
>    >   (delete-package "COMMON-LISP")
>    >   (rename-package "Z" "COMMON-LISP" '("CL"))
>    >   (delete-package "COMMON-LISP-USER")
>    >   (make-package "COMMON-LISP-USER"
>    >                 :use '("CL")
>    >                 :nicknames '("CL-USER" "USER"))
>    >   (loop for x in '(lisp::bye
>    >                    lisp::by
>    >                    lisp::help
>    >                    lisp::help*
>    >                    lisp::gbc
>    >                    ; and whatever the implementor wants
>    >                    )
>    >         do
>    >         (import x "CL-USER"))
>    >   (setq *package* (find-package "CL-USER")))
>    > 
>    > (in-package :cl-user)
>    > 
>    > ;;  Stops the error caused by:
>    > ;;    (setf (documentation 'foo 'function) "foo fun doc").
>    > (defmethod (setf documentation) (new-value (object symbol) &optional 
> doc-type)
>    >             (assert (symbolp doc-type))
>    >             (assert (or (stringp new-value) (null new-value)))
>    >             (let ((prop (intern (concatenate 'string (symbol-name 
> doc-type)
>    >                                              "-DOCUMENTATION")
>    >                                 :system)))
>    >               (cond ((null new-value) (remprop object prop))
>    >                     (t (setf (get object prop) new-value)))))
>    > 
>    > ;; Overcomes a static image problem -- references to ~ break the GCL 
> 2.7.0
>    > ;; static image because they load a dynamic image even though the image 
> is
>    > ;; static.
>    > (defun user-homedir-pathname (&optional host)
>    >   (declare (ignore host))
>    >   (pathname (concatenate 'string (si::getenv "HOME") "/")))
>    > 
>    > ;; Stops one from making the hole bigger than si::*max-hole-size* pages.
>    > (in-package :si)
>    > (or (get 'set-hole-size 'old-def)
>    >     (setf (get 'set-hole-size 'old-def)
>    >           (symbol-function 'set-hole-size)))
>    > (defparameter *max-hole-size* 10000)
>    > (defun set-hole-size (x)
>    >   (funcall (get 'set-hole-size 'old-def)
>    >            (min *max-hole-size* x)))
>    > 
>    > ;;  End of appendage.
>    > 
>    > 
>    > 
> 
>    -- 
>    Camm Maguire                                               address@hidden
>    ==========================================================================
>    "The earth is but one country, and mankind its citizens."  --  Baha'u'llah
> 
> ........
> 
>    From: "Gordon Shaw Novak" <address@hidden>
>    Date: Wed, 7 Jun 2006 19:09:27 -0500
>    Cc: Robert Boyer <address@hidden>, Matt Kaufmann <address@hidden>,
>          address@hidden, "Robert Dodier" <address@hidden>,
>          root <address@hidden>, address@hidden,
>          address@hidden, address@hidden
> 
>    Camm,
> 
>    Many thanks for you efforts re GCL and XGCL.
> 
>    First let me say that I will be happy to go with whatever solution
>    you and the community think is best.
> 
>    The problem with compiling from source is that is is often problematic
>    to compile GCL and XGCL from source, e.g. recently both I and Kay
>    Nettle failed to compile GCL on an x86 Mac laptop.  I will admit to
>    being only semi-skilled labor as far as compiling GCL; but Kay is
>    more skilled and she has trouble too.  Thus, it seems reasonable to
>    assume that others may be having trouble.  I think that for the
>    widest distribution and use of GCL, it is best for GCL to be as
>    easy to install and get running as possible.  In general, I think
>    Linux would wipe out Windows, except that one has to be a wizard to
>    get Linux to work.
> 
>    My impression is that nearly everyone who uses Linux is also using
>    X windows, right?  If so, then requiring X would not per se be a
>    problem.  It used to be the case that adding the Xlib increased the
>    memory size of GCL quite a bit, but with today's memory sizes that
>    probably doesn't matter any more.
> 
>    Best regards, Gordon
> 
> 
> 

-- 
Camm Maguire                                            address@hidden
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah




reply via email to

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