So why does it? Is it used for writing kernels? For web servers? For browsers? For office applications? It's a leveled programming language that can't even be used to make drivers or anything that directly communicates the hardware. True, it has a very elegant way of expressing data structures and handling them, but what's the point of all that if you can't even use Lisp to make useful programs. Unless you can name one. But you can't
Lisp is old and tired. Lisp is only useful for jacking off to SICP and Sussman
Let Lisp rest in piece.
(defmacro -> (type base &rest slots)
(loop as slot in slots do
(progn (setf base `(foreign-slot-value ,base ',type ',slot))
(setf type (foreign-slot-type type slot))
(when (listp type) (setf type (second type))) ;; pointer to
))
base)
(define-symbol-macro S_IFMT #o170000) ; type of file mask
(define-symbol-macro S_IFIFO #o010000) ; named pipe (fifo)
(define-symbol-macro S_IFCHR #o020000) ; character special
(define-symbol-macro S_IFDIR #o040000) ; directory
(define-symbol-macro S_IFBLK #o060000) ; block special
(define-symbol-macro S_IFREG #o100000) ; regular
(define-symbol-macro S_IFLNK #o120000) ; symbolic link
(define-symbol-macro S_IFSOCK #o140000) ; socket
(define-symbol-macro S_IFWHT #o160000) ; whiteout
; File mode
; Read, write, execute/search by owner
(define-symbol-macro S_IRWXU #o000700) ; RWX mask for owner
(define-symbol-macro S_IRUSR #o000400) ; R for owner
(define-symbol-macro S_IWUSR #o000200) ; W for owner
(define-symbol-macro S_IXUSR #o000100) ; X for owner
; Read, write, execute/search by group
(define-symbol-macro S_IRWXG #o000070) ; RWX mask for group
(define-symbol-macro S_IRGRP #o000040) ; R for group
(define-symbol-macro S_IWGRP #o000020) ; W for group
(define-symbol-macro S_IXGRP #o000010) ; X for group
; Read, write, execute/search by others
(define-symbol-macro S_IRWXO #o000007) ; RWX mask for other
(define-symbol-macro S_IROTH #o000004) ; R for other
(define-symbol-macro S_IWOTH #o000002) ; W for other
(define-symbol-macro S_IXOTH #o000001) ; X for other
(define-symbol-macro S_ISUID #o004000) ; set user id on execution
(define-symbol-macro S_ISGID #o002000) ; set group id on execution
(define-symbol-macro S_ISVTX #o001000) ; directory restrcted delete