成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我從Icon編程語言中所學到的

開發 后端 前端
在很多方面﹐Icon是第一個“腳本語言”。它是一種非常高級別,具備出色的能力去處理文本數據并與其環境相結合的語言。迄今為止,它都是如此超前,這也許是它從沒有很流行的一個原因。早在Perl和TCL(這些語言開啟了腳本語言的熱潮)崛起之前好幾年,它就已經出現了。

在20世紀70年代末和80年代初期,Icon 編程語言主要由拉爾夫•格里斯沃爾德(Ralph Griswold)所設計的。在60年代,格里斯沃爾德負責過***個專門用于處理文本的編程語言 ――Snobol(String Orientated Symbolic Language)。Icon是基于Snobol思想而設計的下一代語言,然而它更加統一和完整。

在很多方面﹐Icon是***個“腳本語言”。它是一種非常高級別,具備出色的能力去處理文本數據并與其環境相結合的語言。迄今為止,它都是如此超前,這也許是它從沒有很流行的一個原因。早在Perl和TCL(這些語言開啟了腳本語言的熱潮)崛起之前好幾年,它就已經出現了。

對于一個泡在BASIC、Fortran、PL/I、Pascal和C里成長起來的人,Icon就是個徹頭徹尾的異類。然而它教會了我許多至今都很有用的東西。

空集(Nullology)

當你調用一個Icon函數,它會做以下兩件事之一:它可以返回一個值,或者它會失效。失效聽上去類似于現代的異常處理機制,但是Icon的失效有以下幾個不同。首先,當一個Icon函數失效時,沒有指標說明它為什么失效。再者,失效是預期的。它總在發生,而且是Icon工作方式的一個重要部分。(它有一個單獨的、原始的、針對真正異常條件的錯誤處理機制。)

許多Icon的函數都是生成器(generator)――它們可以返回多個值。在某些情況下,Icon將持續調用該函數直到它失效。所以在Icon里,失效真正的意思是“沒有更多的值”。例如,下面是一個完整的Icon程序,把它的輸入復制到它的輸出:

  1. every write(read()) 

子句Every表示“這樣做直到它失效”。write()把它的參數寫到標準輸出,read()從標準輸入返回連續的行,最終在達到文件結束時失效。

在C語言里,失效通常被一些特殊保留的返回值,或者其他特設機制所表示(那些失效指標都太容易被遺漏)。直接從C轉到Icon后,上面那個小程序驚醒了我,讓我見識到了簡潔、傳神的美感。

***課

重要的是去區分有和沒有。或者是一個函數的返回值,或者是一個變量的值,重要的是要能說“沒有一個”。

這一課幫我在幾年后認識到異常,也使我領會到其它語言,例如Lisp, Smalltalk, Ruby和(在某種程度上)Java,它們的變量包含可以為空的引用,而不是直接存儲數據。

一致性(Uniformity)

Icon是***個讓我用表達式語言做嚴肅工作的語言。也就是說,Icon沒有語句,只有包含結果值的表達式。我***次看到這個:

  1. sign := if count > 0 then 1 else -1 

起初我真的很困惑,但很快我就明白是怎么回事。在Icon里,我所用來思考的“if語句”事實上只是一個“if表達式”,就像在別處一樣,它會有一個結果值。為什么不應該呢?我曾經思考過這個問題,語句和我所熟悉的語言里的表達式之間的區別好像是人為的和任意的。進一步使用Icon的經歷證明了這一點。這當然可能造成濫用構造,產生費解的代碼。但是有時它們正是你做正確的事情所需要的。

第二課

通常情況下,你認為根本不相同的事情事實上完全相同。不要想當然認為你在某處學到的就是普遍真理。

這么多年來,這一課幫助我用許多新東西迅速武裝我的頭腦,包括語言,工具,編程范式和平臺。

事實(Truth)

我已經提到了生成器和失效的語義。然而一旦你有可以返回多個值甚至失效的表達式,就出現一個問題­――類似 E1 | E2 這樣的表達式是什么意思?在多個值有意義的上下文,你可能需要一個定義;但是在傳統環境下,你可能需要一個不同的。所以看起來熟悉的結構就像人們所習慣的。我不會討論細節(畢竟這不是一節Icon課),但是Icon設計師們能夠找到一個能工作在傳統結構和新結構兩種情況下的表達式,Icon思路共存,沒有特殊情況。所以,你可以做所有這些事情:

  1. if (i = 1 | i = 0) then ...  
  2. if i = (1|0) then ...  
  3. every write(read("header") | read("body") | read("footer")) 

并且它們實現你所期待的。在上例中,“|”像一個連接操作符,結果是連接那三個文件。但是操作符的實際語義是不變的――所有這三個例子使用單一的“|”定義,結合生成器,表達式失效和目標導向評估。

第三課

我們所受的關于編程的教育正如我們所學的科學――很方便想到世界是如何真正運轉,但事實是我們就是不知道。科學給予我們的是似乎能解釋世界的理論,因為它們符合所有我們所能想到的實驗。但是隨著我們對世界的了解不斷擴大,遲早我們會認識到之前的理論只是一個近似。一旦事情變得足夠快,足夠大,牛頓是不夠的,我們需要愛因斯坦。(然后它們變得足夠小,我們就需要普朗克和波爾)。單值函數,布爾邏輯是足夠的,但當把生成器投向混合后,你就需要更多地東西。

這節課已經幫了我很多次去處理復雜、混亂、有時前矛后盾的商業規則和需求。受Icon例子的啟發,我經常成功找到更深、更簡單、更普遍的規則,能作為純粹的變化支持所有表面的合并。

表達(Representation)

當遇到Icon時,我還是一個Unix用戶,我已經相當精通用作文本模式的正則表達式。Icon有一種極其復雜的文本模式機制,不是基于正則表達式,但是實際上更強大。(經過Perl 6幾層經典正則表達式添加,Perl的正則表達式最終實現了威力相當于Icon模式的功能。但那是另一個故事了。)

語言和協議往往用看起來像簡單的算數表達式的語法來描述:

  1. X := T | T "+" X  
  2. T := E | E "*" T  
  3. E := "x" | "y" | "z" | "(" X ")" 

(僅支持變量x, y和z的加法和乘法。)

盡管很強大,但不可能實現一個像使用經典的正則表達式那樣的語法解析器。(如果你以某種方式成功,也將會非常困難去維護和擴展該解析器。)

但是使用Icon的可編程模式機制,你可以實現這樣的解析器:

  1. procedure X()  
  2. suspend [T()] | [T(), ="+", X()]  
  3. end  
  4.     
  5. procedure T()  
  6. suspend [E()] | [E(), ="*", T()]  
  7. end  
  8.     
  9. procedure E()  
  10. suspend [="x" | ="y" | ="z"] | [="(", X(), =")"]  
  11. end 

哇!這看起來就像語法!事實上會真的很容易去用語法編寫程序以生成解析器!

你可以這樣調用它:

  1. parseTree = line ? {X()} 

Icon里的yacc是一個為期一天的黑客。

第四課

語法很重要。如果語法適合問題域(problem domain),程序則很容易理解。這就是為什么如果一種語言要很好的處理繁雜的數據時,即使它是一個危險的語言功能、容易被濫用,但操作符重載是必不可少的。強大的正則表達式看上去就像“正則表達式”。

這一課讓我知道什么時候去寫一點特定領域語言,而不是試圖擠入我現有語言的領域。(通常這是一個很容易的事情。)它把我推向動態的、可塑的語言,如Ruby(我敢說還有Lisp)更主流的東西。

(語法很重要這一課也大大加強――但以消極的方式――在每次我使用XSLT時。幸運的是,很快我就能使用XQuery去做所有現在得用XSLT去做的工作。)

(全文完)

英文原文:Glenn Vanderburg,感謝@dryrun 的翻譯

譯文鏈接:http://blog.jobbole.com/42136/

責任編輯:林師授 來源: 伯樂在線
相關推薦

2013-04-11 09:23:36

.NET編程Haskell

2013-06-25 11:06:51

編程技巧蘋果

2016-01-18 10:06:05

編程

2013-10-16 09:59:39

程序員

2015-06-01 06:42:50

開源公司三大教訓

2021-03-09 09:55:02

Vuejs前端代碼

2011-07-11 10:34:40

編程技巧蘋果

2015-06-29 13:47:19

創業創業智慧

2022-03-27 09:06:04

React類型定義前端

2024-01-08 07:02:48

數據設計模式

2021-07-26 07:47:36

C# 工作面試

2024-03-26 11:54:35

編程抽象代碼

2015-07-20 11:32:07

編程語言

2020-09-22 08:09:13

Kubernetes 集群裸機

2013-12-26 09:34:12

開發學習

2020-09-25 06:32:25

前端

2020-12-31 10:47:03

開發Vuejs技術

2021-10-25 05:43:40

前端技術編程

2022-08-26 09:51:49

索引簽名編程語言

2010-03-17 18:38:53

Java編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 农村真人裸体丰满少妇毛片 | 午夜精品久久久久久久99黑人 | 色小姐综合网 | 国产精品成人一区二区 | 国产日韩欧美在线观看 | 一区二区视频 | 精品产国自在拍 | 少妇淫片aaaaa毛片叫床爽 | 中文字幕一区二区三区在线观看 | 成人av观看 | 日韩国产黄色片 | 精品国产乱码久久久久久a丨 | 日本激情视频中文字幕 | 91精品国产欧美一区二区 | 91久久国产综合久久 | av毛片| 久久精品久久久久久 | 精品久久久久久亚洲综合网站 | 欧美 日韩 亚洲91麻豆精品 | 日韩av一区二区在线观看 | 欧美不卡一区二区三区 | 日韩精品免费在线观看 | 亚洲黄色av | 在线观看中文字幕视频 | 免费国产黄网站在线观看视频 | chinese中国真实乱对白 | 亚洲成人精品久久久 | 亚洲精品乱 | 涩爱av一区二区三区 | 男女羞羞视频在线看 | 福利社午夜影院 | 欧美精品成人一区二区三区四区 | 99国产视频 | 午夜免费视频 | 99在线视频观看 | 欧美一区二区三区在线视频 | 在线观看成人 | 国产一区亚洲二区三区 | 蜜桃视频成人 | 久久99精品国产 | 久久久久久中文字幕 |