溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Error —— 一個如同其名字一般的計劃 —— 的沉睡

發(fā)布時間:2020-06-22 09:15:03 來源:網(wǎng)絡 閱讀:306 作者:琉年 欄目:開發(fā)技術

  今天是2019年2月6日。
  一年半之前,我開始接觸到編程,不久后,出于對lisp的不滿,我開始設計一種新的編程語言,并臨時命名為“Error”(閱讀提醒:我至今未能確定規(guī)則,但有基于某時的規(guī)則的實現(xiàn))——我是個很沒有起名天賦的人。關于error我也曾在這里(51cto)發(fā)表了blog(/13535617/2061128),現(xiàn)在看來頗有幾分感慨。error是我對于編程體系的幻想,它似乎非得打破“語言”這個東西不可——但這也不是error獨有的,語言都不純粹地是語言。比如……c語言有預處理這個概念,python沒有。
  error像lisp一樣希望代碼也是數(shù)據(jù),但又希望嚴格劃分二者。于是引入了一個新的概念“error對象標記方法”,可以說它是個lisp一點的json。比如

(len: ["orange" "lemon" "ice"])

  通過冒號來區(qū)分表達式和表(我使用“元組”、“列表”、“元組調(diào)用”、“列表調(diào)用”這些稱呼)。error的語言部分就是用這種方法表示的,所以它可以被當做數(shù)據(jù)解析。而在運行的時候,調(diào)用式是無法被解析出調(diào)用者和參數(shù)的,預處理則可以。給error加入預處理的原因是,我覺得“在語言中指定哪些是運行前做”相當正義,這是不久之前的事。假如要在代碼中設定一些需要運算得到的常數(shù),沒有人希望每次運行時都計算吧?(python便如此。)可以使用error語言的預處理,也可以自己實現(xiàn)預處理。隨著對error的思考和時間推移,我漸漸意識到我好像不是在思考語言——這些根本無所謂用什么符號來表示,只要這些符號能夠確定出——一個error語法結構,類似抽象語法樹的東西。我發(fā)現(xiàn)我從來不知道error是什么,它只不過是一堆愿望的集合——就像人所說的“人工智能”一樣。
  但能明確到“語法結構”已經(jīng)不錯了。文本首先要變?yōu)閑rror語法結構(不管以何種文本,何種對應的處理方式),而預處理也是在語法結構上進行,而非文本上。其實完全可以用“修改語法樹”的說法,但我不喜歡“語法樹”這個詞,因為比起普通意義的樹,它多了很多限定的東西,和struct倒更像些。let(類比lisp的let,python的帶dict的eval)和getmethod(類比python的getattr、點操作符)就可以被看成預處理,或者說(靜態(tài)的)宏。但它們似乎也可以部分地以函數(shù)而非宏的形式存在,然后導致為語言添加很多其他東西——也是我在想到可以用預處理之前花了很多精力去糾結的東西。你可以輕松地寫下(let: [(x 1)(y 2)] (+: x x))、((getmethod: move): car)、(lambda: [a b] (+: a b))這種表達式,但你會想,這真的是函數(shù)嗎?(error默認所有參數(shù)惰性求值,故僅需延遲求參的if,for等都視作普通函數(shù)。)前者改變了“環(huán)境”(而環(huán)境是什么都很難說?。?,后二者則沒有類型推導可言(即使error并不推導類型,它們依舊顯得特殊)——“甚至把表達式當做運行時對象都已經(jīng)很特殊”——我對error的期望不停地在改變,譬如一開始error不自定義對象也不使用getmethod。而自定義對象能否和內(nèi)置對象統(tǒng)一起來,也是我一直不得其解的問題。
  error語言困擾了我很久。其實error曾經(jīng)并不被我放在心上,我思考的東西是人工智能和心理學。在一度失利下,error愈發(fā)牽引著我的注意力,就像上學時的聽課,總能給我做其他事的動力。而又隨著厭倦法則的持續(xù)作用,error對我也不那么吸引了(也正是我一開始所希望的)?,F(xiàn)在這個計劃——應當陷入沉睡了。而我所需要做的是,把目前已有的東西交代給虛無。
  在不考慮預處理的情況下,函數(shù)對象是要在運行時創(chuàng)建的。但我們似乎也“希望”能在運行前創(chuàng)建出函數(shù),和可能在運行時被閉包的函數(shù),等等;error對象標記方法中,原則上連整數(shù),小數(shù)都不允許出現(xiàn),因為只有字符串是無歧義的,要表示1只能用(int: "1")的形式,而int為宏,除了解決復數(shù)四元數(shù)的擴展紛爭,也算是致敬tcl語言;一個字符只要不是空白符和已占用的符號(雙引號,冒號,圓括號方括號)就可以作為標識符成分;error的一切都是對象,它如何與操作系統(tǒng)交互,如何讀寫文件和輸出,一直沒有思考,僅僅把它用在python的交互模式下了。原則上它應該也在函數(shù)式的系統(tǒng)中運行,但這些意味著什么,我沒有思考。
  目前有一個簡單的版本位于github的lamdba/error,此前有過棧實現(xiàn)來調(diào)用函數(shù)(甚至一度為了方便以后轉化為匯編,沒有使用類),但再讀起來很不方便,就放棄了,那些代碼始終潛藏在lamdba/error_s1的git里。目前的計劃是,為表達式對象封裝上一層,把宏附在這一層上,則模型就變成了“宏式的子項也是宏式”,重寫宏式的求值。不過此刻這個計劃就已經(jīng)停下了。本打算定義個常量,寫個遞歸,算了吧。
 ?。ㄓ诘厍颍?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI