Forth?什么鬼?
為什么需要這么奇妙的語言呢?
作為掉入IT坑的不幸者,還要研究IT考古學。。。有前瞻的先鋒去玩AI,自然也要有后進的老頭子去挖墳。
先進的語言很無厘頭,看了半天不懂每個細節,而功能一目了然。
落后的語言很邏輯,一眼看穿每個細節,而功能一頭霧水。
歷史沉淀的太久,太龐大,每個人都知道萬里長城就是一塊一塊磚在那壘,可人人都覺得了不起,而且除了秦始皇帝,以后就是有唐城,漢城,明城,也不會有第二枚徽章頒發出去。
Forth,就是久遠歷史中的長城基石,在長城自身都成為古董的時代,非刨墳掘墓不可窺其究竟。
tutorial
http://www.forth.org/tutorials.html
forth語言IDE
https://www.forth.com
Forth的開發者很酷,在他的書里面有這么幾句話:那誰就要問了,既然forth這么有效,為什么我沒有使用它?這是因為你不知道有Forth!
Forth是一種高級語言
Forth是一種匯編語言
Forth是一個操作系統
Forth是一系列開發工具
Forth是軟件設計哲學
如果說“那誰”還沒鎮住我,這后面幾句話確實把我雷到了,如今是2019年,通過考古挖墳我才知道有Forth。當然,更不可思議的是如今,當今最核心的機器中完成最重要控制的東西竟然是Forth寫的,而且從開發到現在少說也有30多年了,這是什么鬼?簡直是IT界的p53基因啊!不由得讓我想起了人類胚胎發育過程的反演現象,真的是從走了一遍IT長征。
長征開始。
/ 后面都是注釋
ASCII 字符(8位)
Binary 二進制數
Byte 8位數
Cell 16位數
Decimal 10進制數
Hexadicimal 16進制數
Octal 8進制數
冒號如果在行首表示定義,用:后面跟的標記定義后續到;結尾的所有動作/內容。我理解等同于宏定義
:表示行首
; 表示行尾(與:配合)
" xxxx" 表示文本串
. 表示從棧中彈出并顯示
3 4 + . stack push 3,stack push 4, 彈出4和3執行+,結果push進stack,.彈出stack并顯示(也就是結果7)。為甚么是3,4,+而不是3,+,4呢?這是由于機器真正在執行的時候真的是先把數字壓棧,最后才統一考慮運算器問題,否則運算器準備好,待計算的東西還不ready,豈不是要等?Forth還是機器語言嘛。
DUP 在stack中再copy出個副本
OVER,與DUP類似,但跳一格,把stack前一個cell里的東西dup出來
ROT,堆棧里cell轉一下(rote),bottom的cell翻到最頂,其它依次下沉
DROP,這個不用說了,干掉堆棧里最后一個
.S 把stack里的東西全搞出來。(最后一個一定是0)
SWAP,交換堆棧內的兩個單元
DABS,返回雙位數的絕對值
n 1 DO balabala LOOP from 1 to n do balabala loop
很奇怪的表達方式:
數字中間的,./-:沒什么切實的含義,僅僅分隔數字 / -放在數字開頭當然表達負數,和在中間不同)。將數字分割為兩個數字之后有啥用?數字最大值只有65535啊,要更大,那就要分割了,例如:
200,000 會壓到堆棧兩個數,200和0,顯示出來呢?用D.就打印雙長度了。與此同時需要使用到的是數字轉換過程標記<# #> /分別是開始和結束,其中的#S則將數字轉為ASCII, #表示一個數字,例如<# #S ### #>
我們做這種定義:
: UD. <# #S #> TYPE ; /TYPE表示打印出來
12,345 UD. 12345ok
12. UD. 12ok
0 UD. 0ok
: .PH# <# # # # # 45 HOLD #S #> TYPE SPACE ; / 其中#是一個數字, 4個#就是4個數字(從右邊/棧底數?!),45 HOLD代表ASCII字符,對應的是-,#S是堆棧里剩余的數字,然后打印出來以上,最后加上空格。
!代表store,把xx存到變量,@表示提取到堆棧
VARIABLE DATE
12 DATE ! /表示定義變量DATE,把12保存(賦值)到DATE
DATE @ /表示提取出DATE的數值并保存到堆棧
EXECUTE 調用子程序
R> 表示返回上一層調用
用了一周時間終于讀完一本入門小冊子,按我的讀書法和理解程度,估計還要讀個五七八遍才行。欲知后事如何,且聽下一遍繼續。
總結
以上是生活随笔為你收集整理的Forth?什么鬼?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python关键字匹配_python正则
- 下一篇: 孤独