Post by Xiaofeng YangPost by huang yingPost by Xiaofeng YangPost by huang yingPost by Xiaofeng Yangèµäžäžª~ clisp as a login shell, heard of it ?
åµåµïŒæ²¡å¬æïŒæ¯èµHYSHè¿æ¯èµclisp.
âèµäœ çå³åšææåïŒâ
éåžžæè°¢ïŒ
Post by Xiaofeng YangPost by huang yingä¹ååšçœäžæå°è¿æclispåshellçæç« ïŒhttp://www.clisp.org/clash.htmlïŒäžè¿æè§åŸåHYSHè¿æ¯åŸäžçžåçãè¿ç¯æç« éæ¯éè¿reader
macroå»è°çšå€éšåœæ°æè
shell command lineãHYSHæ¯è¯åŸçšCLåshell command
lineïŒäžåªæ¯çŽæ¥è°çšå€éšåœä»€ïŒä¹å
æ¬pipelineïŒIOéå®åççã
å
¶å®äœ å°±æ³åäžäžª
â bashïŒå¯¹å§ïŒâ
对ïŒæçå·¥äœç掻äžäŒç»åžžçšå°bash scriptïŒç°åšæç®çšLispïŒå°±æ³æ¹çšLispå®ç°è¿äºscriptçåèœã
Post by Xiaofeng YangPost by huang yingPost by Xiaofeng Yangthreading对äºCLæ¥è¯Žæ¯äžªåŸç³ç³çäžè¥¿ïŒCLç讟计æ¯æç
§çº¯ç²¹sequentialæ¥çãæ¬èº«è¢«è®Ÿè®¡äžºäžäžªäº€äºåŒç³»ç»ïŒä»å¯åšäžçŽæ顺åºå·¥äœå°éåºã
threadingæ¯æ¯èŸæåºç°çæŠå¿µïŒå¯¹äºèŸæ©çè¯èšæ¥è¯Žéœæ²¡æä»å€Žèèè¿ãæ¯åŠä¹å¯ä»¥è¯ŽïŒthreading对äºCæ¥è¯Žæ¯äžªåŸç³ç³çäžè¥¿ïŒCè¯èšç讟计æ¯æç
§çº¯ç²¹sequentialæ¥çïŒæ¯åŠå»çCåºéçäžäºå
šå±åéerrnoä¹ç±»çã
â
âCæ¯70幎代çè¯èšïŒCLæ¯84幎çã2011幎Cè¯èšåºäºæ°çæ¬ïŒæ¯æå€çº¿çšãâ2004幎CLåºæåäžäžªçæ¬çæ åïŒç»å§äŒä¹è·ç解æ£ïŒäžäŒååäºã
ANSI
CLäžäŒååäºãSBCLä¹ç±»ç瀟åºçCLåºè¯¥è¿äŒåå±ãåªèŠè¿æ瀟åºïŒCLå°±è¿äŒåå±ïŒåœç¶å¯èœäŒæ¹äžªååãåœç¶åŠæ瀟åºéœæ²¡æäºïŒå°±æ²¡æå¿
èŠåçšè¿äžªè¯èšäºã
é®é¢æ¥äºïŒCçç®å讟计ïŒé¡¶å€ä¹å°±æ¯äžäºå
šå±åéä¹ç±»çæææ¶ïŒè¿äºå
¶å®æ 䌀倧é
ã
Post by Xiaofeng Yangé£ä¹CLå¢ïŒå°å€åç§å€æçå
šå±è®Ÿè®¡ã
ç»å
žæ¡äŸä¹äžæ¯æè°çbindingã
æ¯æ¹è¯Ž(let ((x 1))
...foo...)ïŒé£ä¹ïŒå·¥äœè¿çšæ¯è¿æ ·åçïŒè¿å
¥...foo...ä¹åïŒäŒä¿ååœåçxçåŒïŒç¶åïŒå°xç»å®å°1ïŒåæ§è¡...foo...ïŒéåºæ¶åæxéæ°è¿ååæ¥çåŒãé£ä¹ïŒå€çº¿çšçæ
åµå¢ïŒè¿ç§äºæ
çåŸ
å®ç°è
èªå·±å»æ³åæ³ã
bindingåªæ¯åŸç®åçäžäžªäŸåïŒäžè¿å·²ç»æ¯å°äºâ她ç圱åæçäžå°âçå°æ¥äºïŒå€æçäžè¥¿è¿åŸå€ãCLçç¹ç¹ä¹äžå°±æ¯ïŒäœ åçæ¯äžäžªåç代ç ïŒåºæ¬äžéœäŒåå
šå±åœ±åïŒä¹äŒå»åœ±åå
šå±ãè¿äœ¿åŸCL讟计è
èŠä¹äžæ¯æå€çº¿çšïŒèŠä¹å°å¿è®Ÿè®¡å€çº¿çšçæ¹åŒïŒå¹¶äžå°å¿è®Ÿè®¡åç§å
šå±åœ±åïŒç¶å䞺线çšåžŠäžæ²éçå
šå±å
袱ïŒæ¯ç«å
šå±åœ±å莯穿å§ç»ã䞺äºäœ¿åŸè®Ÿè®¡å䜿çšäžæŽå ç®åå笊åçŽè§ïŒCLå®ç°éåžžæ¯äžªçº¿çšéœèŠåžŠäžåŸå€é¢å€çä¿¡æ¯ïŒä»¥è®©çšæ·çšèµ·æ¥æè§å°±ååšçšå线çšåçšåºã
æè°çº¿çšçå
šå±å
袱ïŒæçç解就æ¯thread-localçç¶æä¿¡æ¯ãåšCè¯èšéæéèŠçthread-localç¶æä¿¡æ¯å°±æ¯execution
stackãCLéé€äºexecution stackä¹å€ïŒå¯èœè¿éèŠå
¶ä»çä¿¡æ¯ã
âCLéèŠéåžžå€çä¿¡æ¯ãSBCLå䞪线çšåºç¡ä¿¡æ¯äžºJVMâç奜å åå çšéã
第äžäžªçº¿çšå·®å€å°ïŒä¹åæ¯æ·»å äžäžªçº¿çšéèŠå¢å å€å°ãèœäžèœæäŸäžäžä¿¡æ¯æ¥æºïŒæå»åŠä¹ äžã
Post by Xiaofeng YangCLçå
šå±çäžè¥¿è¿å€ïŒå¹¶äžä»
ä»
åªæ¯äžäºthread-localçäžè¥¿ïŒæ¯æ¹è¯Žbindè¿ç§äžè¥¿ïŒå°±æ¯è¯ä¹äžçïŒåœç¶è¿æåç§å
¶å®çäžè¥¿ãbindæå³çåŒè¢«ä¿®æ¹ïŒäž€äžªçº¿çšåæ¶åšbindårestoreçæ¶åïŒæ¯åŠåæ¶ä¹æ¹åŠäžäžªçº¿çšéçåäžäžªç¬Šå·çåŒå¢ïŒbindä¹å对该åéèµåŒå¢ïŒççççã
åŠææçç解æ£ç¡®çè¯ïŒlexical scope variableçbind/restoreåšè¯ä¹äžåºè¯¥æ¯thread
localçïŒåŠæ声æ䞺æ被çŒè¯åšå€æ䞺dynamic extentçïŒåºè¯¥å¯ä»¥åšæ äžåé
éæŸïŒèæ è¯å®æ¯thread
localçãèèå°lexical scope
closureïŒbindingæ¯å¯ä»¥åšçº¿çšéŽå
±äº«çïŒäœäžæ¯bindingç建ç«åæ¢å€ïŒèæ¯binding对åºçåŒãææçç解ïŒè¿ç§æ
åµåºçšçšåºèªå·±åºè¯¥äœåæ¥åäºæ¥ïŒè¯èšåªèŠæäŸçžåºçæºå¶å°±å¯ä»¥äºãåšHYSHäžïŒå¯¹äºå¯èœåšçº¿çšéŽå
±äº«çFD
stream对象ïŒæ就䜿çšäºéååŒçšè®¡æ°åä¿æ€ãdynamic scope
variableç线çšéŽè¡äžºå¥œåäžåçå®ç°å€ççæ¹åŒäžåïŒæ®æçæµïŒæ ¹æ®bordeaux-threadsïŒïŒäœ¿çšlet建ç«çdynamic scope
variable binding䞺 thread localçïŒåºè¯¥æ¯äž»æµã
Post by Xiaofeng YangPost by huang yingPost by Xiaofeng Yangerrnoè³å°è¿æ¯çåŸå°çïŒå¹¶äžCéé¢è¿ç±»äžè¥¿åŸå°ïŒäžäžäŒæä»ä¹çäžå°çäžè¥¿ïŒäœ æ³è¯Žâä¿¡å·âåïŒïŒã
奜å§ïŒå诎ç¹äœ èœçåŸå°çïŒå
šå±åéãæé䟿å±äžäžªäŸåïŒäžå€äœ å¯èœäžäŒç¥éå®äžçŽåšåœ±åäœ ïŒäžæ¹é¢äœ äžäŒè¿ä¹çšïŒåŠäžæ¹é¢å®ç°å·²ç»åž®äœ èèäºè¿äžªé®é¢ïŒåœç¶æ¯äžå®¶éœäžåçåæ³ãæ¯æ¹è¯Ž*readtableÃïŒè¿èŽ§çŽæ¥åœ±åäœ ç代ç æ¯ææ ·çè¯æ³ã(read)äŒæ ¹æ®è¿äžªåéæ¥è§£æäœ ç代ç ã(read)æç
§äžäžªç¹å®çç®æ³æ¥è¿äœïŒ(read)éå¯ä»¥åè°çš(read)ïŒå¹¶äžæ¯æ¬¡æ ¹æ®*readtableÃæ¥ç¡®å®å
容ïŒèäžäœ è¿æ æ³æå®å«ç对象ãé£ä¹ïŒå€çº¿çšçæ
åµå¢ïŒå¯èœè¯»ç读çäœ ç代ç ïŒäžéè¯æ³è¢«æ¢äºïŒç¶åç解æå«çäºïŒä¹å¯èœïŒè¿äžªåé被åæthread-localäºïŒåœ±åäžå°äœ ïŒäœæ¯æ¯äžäžªçº¿çšå°±èŠå€äžå空éŽå çšïŒäºæ¯å°±éé级起æ¥äºïŒ
ééäžç¹ïŒææ¬äººåæ¯æ²¡å€å°é®é¢ãåæ£CLå线çšä¹ééçåŸãHYSHäŸèµäºbordeaux-threads (
https://trac.common-lisp.net/bordeaux-threads/wiki/ApiDocumentation)ïŒå
¶äžå¯¹dynamic
variableç线çšéŽäº€äºææç¡®è§å®ïŒHYSH䜿çšäºè¿äºè§å®ã对äºäžæ¯æborderaux-threadsçå®ç°ïŒæåªèœè¡šç€ºæ èœäžºåäº:-)
âäœ è¿å°±é¢ åäºãbordeaux-threadsè·*readtable*没æä»»äœå
³ç³»ïŒå®ä¹æ æ³è§å®dynamic
variableçè¡äžºãâbordeaux-threadsäžè¿æ¯äžºè·šCLæäŸäžäžªæ åæ¥å£ïŒç®å诎就æ¯äžªwrapå±ïŒïŒè®©å€§å®¶éœèœçšæ åCLåçšåºèå·²ãå
·äœæä¹æïŒé£éœæ¯å®ç°èªå·±è§å®çã
bordeaux-threadså®ä¹äºäžç§specificationãæ ¹æ®æçç解ïŒbordeaux-threadsäžä»
ä»
æ¯äžäžªwrapå±ãå®åºè¯¥åªèœåšç¬Šåå®çspecificationçè¯èšå®ç°äžæèœå®æŽå®ç°ãåŠæè¿äžªç解æ¯æ£ç¡®çè¯ïŒHYSHäŸèµbordeaux-threadsïŒå°±å¯ä»¥æ¯æ笊åå
¶è§èçé£äºCLå®ç°ã对äºå
¶ä»å®ç°ïŒé€éå°æ¥çšå°ïŒåŠåå°±äžäŒæ¯æäºãæ奜bordeaux-threadsåšé£äºå®ç°äžæ ¹æ¬æ²¡æïŒè¿æ ·çšæ·å°±äžäŒå°æäºã
Post by Xiaofeng YangâCL瀟åºæ䞪ç¹ç¹ïŒç±äºåéäºå·¥å
·å€ªåŒ±ïŒæ以éåžžâéœèŠåæ åCLçšåºïŒä»¥äŸ¿äžäžªå®ç°äžè¡äºïŒåŠäžäžªå®ç°é¡¶äžãæ¯æ¹è¯ŽïŒåAå®ç°ççšåºïŒåŸåŸäŒåæ¢å°Bå®ç°å»è°äžè°ïŒå 䞺Açè°è¯åšå€ªåŒ±åªèœåæ¢å°Bãåšè¿ç§å€§ç¯å¢äžïŒå°±æäºäžå 以ANSI
CL䞺æ åçå®ç°ïŒå¹¶äžæäžå 类䌌bordeaux-threadsè¿æ ·åçä»
䞺æäŸç»äžæ¥å£èååšçåºã
åªæ¯æäžäžªå®ç°æ¯æäžå®çé£é©ïŒäœæ¯åªåäž¥æ Œæä»ANSI
CLæ åççšåºå倪åéäºãæè§åŸæ¯èŸå®é
ççç¥æ¯æ¯æäžéšåæå 䞪CLå®ç°ãå
¶ä»çåªèœæ è§äºãåœç¶åŠæåªå€©ç¥éæ䞪æ¯èŸæŽ»è·é è°±çåŒæºç€Ÿåºå®ç°ïŒæå°±åå€æ è§ææå
¶ä»å®ç°äºãå°±ç®æ¯å¯ç§»æ€ïŒäžè¬ä¹äŒåªåšäžäžªè¯èšå®ç°äžè·çæ奜ïŒå
¶ä»çè¯èšå®ç°å°±åªèœæ¯äºçå
¬æ°äºïŒæè
åèœå·®ç¹å¿ïŒæè
æ§èœå·®ç¹å¿ã
Post by Xiaofeng YangPost by huang yingPost by Xiaofeng Yangåœç¶è¿å¯èœæ¯å«çæ
åµã*readtableÃè¿äžæ¯äžäžªç®åçäžè¥¿ïŒæ¯æ¹è¯Žè®Ÿçœ®åç§reader
macroïŒé£ä¹æ¹çæ¯è¿äžªå¯¹è±¡çå
éšãæ¯äžäžªå°åšäœéœåšåœ±åå®é
çè¯æ³ã
诎éè¿éæåæ³èµ·äžäžªå°ŸéåœçäŸåïŒclojureé£èŸ¹é®äºåŸå€æ¬¡ã
(defun f ()
; åŠäžäžªçº¿çšåšè¿ééæ°æ§è¡(defun f ..)
(f))
泚æè¿éïŒdefunå
¶å®çžåœäº(setf (symbol-function 'f) (lambda () ...))ã
è¿ç§æ
åµæ¢å°ŸéåœäŒåæåïŒå线çšçæ
åµïŒæ¢!CLæ åè®©äœ å¯ä»¥å®å¿äŒåïŒclojureè²äŒŒäžè¡ïŒïŒå äžºäœ äžå¯ä»¥è¿æ ·äžéæ¹ïŒåŠå没æä¹ïŒäœæ¯æ åéé¢ïŒä»
éäºæè¿°å线çšçæ
åµãåŠæå€çº¿çšå¢ïŒå®ç°èªå·±å»æ³åæ³ãæ¯äžç§å®ç°åšè¿éäŒæäžåçæ¹åŒãèswankçå€çº¿çševalæ¹åŒäœ¿åŸåŸå€(defun...)被åšäžå线çšéæ§è¡ã
æ¯äžç§å®ç°äŒæäžåçæ¹åŒã诎æåšå®ç°å±é¢ïŒè¿äžªé®é¢æ¯å¯ä»¥è§£å³çãäœæ¯åšæ åå±é¢è§£å³è¿äžªé®é¢å°éŸçåŸãä¹å°±æ¯è¯ŽïŒå¯ä»¥ååºåšäžäžªæå 䞪å®ç°äžèœæ£ç¡®å·¥äœçå€çº¿çšçšåºïŒäœåŸéŸååºè·šææCLå®ç°çå€æçå€çº¿çšçšåºã
âæ以ïŒäœ èŠç»å®äœ ççšåºå°äžäžªå®ç°æè¡ãâ
æè§HYSHæ䜿çšç线çšçžå
³çè¯èšç¹æ§äžç®å€ïŒæ以æ¯æäžéšåæè
å 䞪è¯èšå®ç°é®é¢äžå€§ãæè§åŸè¿äžæ¯é®é¢ãè¿åçè¿œæ±å¯ç§»æ€åšå®è·µäžäžæ¯åŸææä¹ã
Post by Xiaofeng YangPost by huang ying䞪人æ¥è®²ïŒæäžæ¯åŸå
³å¿CLæ åïŒåªèŠæå
³å¿çå°æ°å 䞪CLå®ç°å¯ä»¥æ£åžžå·¥äœå°±å¯ä»¥äºãçæ¥æåºè¯¥åšæçREADMEéå äžCLå®ç°çžå
³ä¿¡æ¯ã
Post by Xiaofeng Yangæå°±äžç»§ç»å±åŒäºïŒèŠäžäžçšç¡è§äºïŒè¿äºäŸåäžæ¯äžå€©äžå€èœå䞟ç©çã
æ
ââ
æ
ââ
å€å¹Žäœ¿çšCè¯èšäœå€çº¿çšçŒçšçç»éªãå
¶å®åšç®åçCè¯èšéçŒçšéå€çº¿çšä¹äžå®¹æãè¯èšæ¬èº«èèçåŸå°ïŒäœæ¯åºçšèŠèèåŸå€ïŒåç§å
±äº«çå
šå±ç¶æ䜿çšå±å±å å çéä¿æ€ïŒè¿èŠèèæ»éé®é¢ãåŠæèèéçå®ç°ïŒè¿æèèmemory
order, cacheåè®®, atomic operationççäžç³»åçé®é¢ã
åšâè¿äžªç€Ÿåºè¯Žâèªå·±æâ
â
æ
ââ
å€å¹Žäœ¿çšCè¯èšâç人ïŒéåžžæåéœè¢«è¯æèœç¶ååŸå€ïŒäœæ¯æ°Žå¹³åŸæ°ŽâŠæåçŸæ§éŸåœïŒäžåèªå°œâŠïŒé...
对äºè¿äžªïŒæå°±åªèœâåµåµâäºã
æ诎èªå·±å€å¹Žäœ¿çšCè¯èšïŒå¹¶æ ååŒä¹æãå
¶å®åªæ¯æ³è¯ŽïŒææçšCè¯èšåå€çº¿çšçšåºçç»éªïŒæ以对äºå€çº¿çšçŒçšæäžäºç¥è¯åæŠå¿µãèäžå¯¹äºCè¯èšïŒæè¿æ¯èœè¯Žé诎éçã
Post by Xiaofeng YangPost by huang yingPost by Xiaofeng YangPost by huang yingåæ¥åšåå±è¿çšäžïŒthreadingçé®é¢è¿æ¯æå¯èœè§£å³çãæçlisp machineçä»ç»äžïŒéœæ¯æ¯æthreadingçïŒæ¯åŠ
http://en.wikipedia.org/wiki/Lisp_machine,
https://en.wikipedia.org/wiki/Genera_%28operating_system%29
ãSLIMEä¹æ¯éçšå€çº¿çšçæ¹åŒåçã
âäœ å·²ç»æ··æ·æŠå¿µäºâŠclæ¯clïŒlisp machineæ¯lisp machineïŒäž€è
没æå
³ç³»âŠâ
è¿äžªåå²æçè¿äžç¹ãLisp Machineå
¬åžåšCLçå¶å®è¿çšäžåæ¥äºçžåœå€§ç圱ååãæäºCLä¹åïŒ From lisp machine
page of wikipedia: The operating systems were written in Lisp Machine
Lisp <http://en.wikipedia.org/wiki/Lisp_Machine_Lisp>, InterLisp
<http://en.wikipedia.org/wiki/InterLisp> (Xerox) and later partly in Common
Lisp <http://en.wikipedia.org/wiki/Common_Lisp>.
âäœ è¿äžªæ¯æ³è¯Žæå¥å¢âŠâŠâ
ææ³è¯Žælisp machineæè
诎lisp machine
lispåCLä¹éŽçå
³ç³»å¯ä»¥ç®åŸäžçŽ§å¯ãæçåºè¯¥æ¯ClojouråCLéŽçå
³ç³»èŠçŽ§å¯äºãä»è¿æ®µåå²æ¥çæµïŒCLçäžç并é没æå€çº¿çšæ¯æçåå²ïŒå®è·µäžmultiple
threadæ¯CLå
žåççŒçšæš¡åãèœç¶CLæ åäžæ²¡æ对å€çº¿çšçæè¿°ã
è¿çè¿äžæ¬ä¹ŠïŒLisp Hacker
(https://leanpub.com/lisphackers)ïŒäž»èŠæ¯å¯¹äžäºCL瀟åºäžäººç访è°ïŒå
¶äžçžåœäžæ¹äººå¯¹Lisp
Machine, Genera, Lisp
OSïŒå¯¹äºè¿ç§åè¯èšïŒåå°å空éŽïŒå€çº¿çšçè¯èšç¯å¢çžåœè®€åãæ以ææ®æ€æšæµïŒåè¯èšïŒåå°å空éŽïŒå€çº¿çšççŒçšæš¡åæ¯Lispçå
žåçŒçšæš¡åãæ¯ç€Ÿåºäžçžåœäžæ¹äººç讀åççŒçšæš¡åïŒåºè¯¥æ¯æ¯æççžå¯¹èŸå¥œççŒçšæš¡åãåœç¶ïŒèœç¶Lisp
Machine对CLæé垞倧ç圱ååïŒäœåŠä»çåŒæºçCLå®ç°å¹¶éLisp Machine
LispççŽæ¥å代ïŒåšå®è·µäžïŒä¹è®žäžäºCLå®ç°åäžäºCLåºå¯¹threadingæ¯æè¿æè¿æ ·é£æ ·çé®é¢ãåŠæåªäœèœå
±äº«äžäºè¿æ ·çä¿¡æ¯æè¿ä¿¡æ¯æ¥æºïŒæä¹æ¯äžèææ¿ãäœä»Lisp
MachineåCLçæžæºæ¥çïŒè¯ŽCL倩ç¶åŸéŸææ æ³æ¯æthreadingïŒè¿äžªæè¿æ¯æ·±è¡šæççã
Post by Xiaofeng Yangslimeåæ䞀éšåïŒäžéšåæ¯elispåçïŒelisp no
Post by huang yingPost by Xiaofeng YangthreadingãåŠäžéšåæ¯swankïŒè¿éšåæåŸå€è¯èšå®ç°ïŒclæ¯äžç§äž»èŠè¯èšãè¡šé¢äžswankæ¯æå€çº¿çšïŒçè³æ¯æ¬¡éœæ¯æ°å»ºäžªçº¿çšæ¥evalïŒäœé£åªæ¯æŠå¿µäžçïŒå¯¹äºäžæ¯æçå®ç°ïŒåæ ·æ¯å线çšçå·¥äœæ¹åŒã
Post by huang yingCL-USER> (sb-thread:list-all-threads)
(#<SB-THREAD:THREAD "new-repl-thread" RUNNING {10051C65B3}>
#<SB-THREAD:THREAD "auto-flush-thread" RUNNING {1005B67DF3}>
#<SB-THREAD:THREAD "swank-indentation-cache-thread" RUNNING {1005A582F3}>
#<SB-THREAD:THREAD "reader-thread" RUNNING {1005A58123}>
#<SB-THREAD:THREAD "control-thread" RUNNING {1005A511F3}>
#<SB-THREAD:THREAD "Swank Sentinel" RUNNING {10057B3663}>
#<SB-THREAD:THREAD "main thread" RUNNING {10039CEF33}>)
åšè¿äžªçæ¬ä¹åïŒæåè¿äžäžªå线çšççæ¬ïŒåºäºfork/execãäœæåç°forkåthreadingä¹éŽæäºæ»éé®é¢(sbclæäŸçfork诎äžæ¯æåšthreadingçç¯å¢äžfork)ãèslimeæ¯éçšå€çº¿çšæ¹åŒåçãæ以æè§åŸçžå¯¹äºfork/execçsolution,
threadingçsolutionæŽå¥œäºã
åœç¶HYSH并äžåŒºå¶äœ¿çšthreadingïŒåŠæäžçšCLåpipelineéçfilterçè¯ïŒæ¯äžéèŠäœ¿çšthreadingçã
Post by Xiaofeng Yanglearn more CL, and understand it in deep !
åµåµïŒèŸ¹å蟹åŠã
äžæ·±å
¥ïŒäœ åŸéŸç解æ诎çäžè¥¿ã
ç®å䞺æ¢è¿å¥œãé读è¿hyperspecåå ç« ïŒå¯¹çè§£äœ çè¯æåž®å©ã
âèµ~æŽäžªè¯»å®ïŒå¯¹CLçç解åäŒåŸäžåãâ
è¿æ®µæ¶éŽåé读å éïŒç»å
žçäžè¥¿æ¯èŠå€è¯»å éãäžè¿æä¹äŒè¯»è¯»SBCLçmannualåå
¶ä»ææ¡£ïŒå 䞺æçè§ç¹æ¯åªæspecè¿äžå€ãå®ç°ç¹å®çäžè¥¿ïŒåŸåŸä¹åŸæçšã
Best Regards,
Huang, Ying
Post by Xiaofeng YangPost by huang yingBest Regards,
Huang, Ying
Post by Xiaofeng YangPost by huang yingBest Regards,
Huang, Ying
Post by Xiaofeng YangBest regards,
Xiaofeng Yang
Post by huang ying䞺äºâçšâlispïŒææ³çšcommon
lispåäžäºLinux(Linuxæ¯æ¥åžžæäœç³»ç»)äžæ¥åžžäœ¿çšçèæ¬(代æ¿ä¹åçbashåpython)ãä¹åçšinferior-shellïŒä¹äºè§£è¿äžç¹scshïŒåæ¥æäºäžäºèªå·±çæ³æ³ïŒè§åŸå¯ä»¥åäžäžªæŽlispyçdesignãå°±æäºhyshïŒé¡¹ç®å»ºåšgithubäžïŒ
https://github.com/hying-caritas/hysh
倧家æå
Žè¶£çåžæå€ææè§ã
è¿æäžä»¶äºè¯·æ倧家çæè§ãææ³æ¶éæŽå€çæè§ïŒé€äºè¿éïŒåªéè¿æ¯èŸå¥œçå¹³å°ïŒ
æ¬äººCLæ°æïŒè¿è¯·åäœäžåèµæïŒ
Best Regards,
Huang, Ying
--
--
Lisp-cn(Lispäžæçšæ·ç»)
CLUG http://lisp.org.cn
---
æšæ¶å°æ€é®ä»¶æ¯å 䞺æšè®¢é
äºGoogleçœäžè®ºåäžçâLisp-cn(Lispäžæçšæ·ç»)â矀ç»ã
èŠæ¥çæŽå€é项ïŒè¯·è®¿é®https://groups.google.com/d/optoutã
--
--
Lisp-cn(Lispäžæçšæ·ç»)
CLUG http://lisp.org.cn
---
æšæ¶å°æ€é®ä»¶æ¯å 䞺æšè®¢é
äºGoogleçœäžè®ºåäžçâLisp-cn(Lispäžæçšæ·ç»)â矀ç»ã
èŠæ¥çæŽå€é项ïŒè¯·è®¿é®https://groups.google.com/d/optoutã
--
--
Lisp-cn(Lispäžæçšæ·ç»)
CLUG http://lisp.org.cn
---
æšæ¶å°æ€é®ä»¶æ¯å 䞺æšè®¢é
äºGoogleçœäžè®ºåäžçâLisp-cn(Lispäžæçšæ·ç»)â矀ç»ã
èŠæ¥çæŽå€é项ïŒè¯·è®¿é®https://groups.google.com/d/optoutã
--
--
Lisp-cn(Lispäžæçšæ·ç»)
CLUG http://lisp.org.cn
---
æšæ¶å°æ€é®ä»¶æ¯å 䞺æšè®¢é
äºGoogleçœäžè®ºåäžçâLisp-cn(Lispäžæçšæ·ç»)â矀ç»ã
èŠæ¥çæŽå€é项ïŒè¯·è®¿é®https://groups.google.com/d/optoutã
--
--
Lisp-cn(Lispäžæçšæ·ç»)
CLUG http://lisp.org.cn
---
æšæ¶å°æ€é®ä»¶æ¯å 䞺æšè®¢é
äºGoogleçœäžè®ºåäžçâLisp-cn(Lispäžæçšæ·ç»)â矀ç»ã
èŠæ¥çæŽå€é项ïŒè¯·è®¿é®https://groups.google.com/d/optoutã
--
--
Lisp-cn(Lispäžæçšæ·ç»)
CLUG http://lisp.org.cn
---
æšæ¶å°æ€é®ä»¶æ¯å 䞺æšè®¢é
äºGoogleçœäžè®ºåäžçâLisp-cn(Lispäžæçšæ·ç»)â矀ç»ã
èŠæ¥çæŽå€é项ïŒè¯·è®¿é®https://groups.google.com/d/optoutã
--
--
Lisp-cn(Lispäžæçšæ·ç»)
CLUG http://lisp.org.cn
---
æšæ¶å°æ€é®ä»¶æ¯å 䞺æšè®¢é
äº Google çœäžè®ºåçâLisp-cn(Lispäžæçšæ·ç»)â矀ç»ã
èŠé订æ€çŸ€ç»å¹¶åæ¢æ¥æ¶æ€çŸ€ç»ççµåé®ä»¶ïŒè¯·åéçµåé®ä»¶å°lisp-cn+***@googlegroups.comã
èŠæ¥çæŽå€é项ïŒè¯·è®¿é® https://groups.google.com/d/optoutã