文標題:Your Guide to Ordinals and BRC-20s
作者:Delphi Creative, Marlon
發布日期:02.15.2024
2023 年是 Bitcoin 歷史上最具變革性的年份之一。在此之前,Bitcoin 以停滯不前的網絡而聞名,但隨著銘文的出現,Bitcoin 進入了一場激動人心的技術革命。
首先要說的是 Ordinals,這項新技術的發展引領了一個全新的市場,人們迅速接納和擁抱了 Ordinals。通過數字藏品、元協議和 BRC-20 等新興 Bitcoin 代幣標準,一個生機勃勃的生態正在快速生長,其市值已經超過了 18 億美元。
曾經僵化的 Bitcoin 網絡現已成為歷史,它充滿了令人興奮的諸多新元素。但究竟什么是銘文,它們的價值主張是什么?Ordinals 和 BRC-20 如何運作?最重要的是,你如何讓自己參與其中并在這個生態系統中收獲你想要的一切?
Crypto 最令人困惑的部分之一是行話 (術語),它確實是一個陌生俚語的迷宮。為了消除混淆,本文中的所有加密原生術語都以斜體書寫,并會即時給于解釋,或在文末的詞匯表中給予定義。
聰 (Satoshis)
在深入研究 Ordinals 之前,我們需要了解它的基礎:Satoshis。
Satoshis,通常縮寫為 “Sats”,是 BTC 的最小面額。一個 BTC 相當于 1 億個 Sats,反之亦然,1 億個 Sats 構成一個 BTC。該名稱來源于 Bitcoin 的匿名創造者中本聰 (Satoshi Nakamoto)。BTC 的最大供應量硬頂為 2100 萬,因此 Sats 的最大供應量硬頂則為 2.1 萬億 Sats。
Stats 存在的意義是什么?
Sats 是 Bitcoin 網絡的原生貨幣。因此它們用于支付交易費用,并且由于其面額小,因此可以進行小額支付。
并非所有的 Sats 都是一樣的!
在 Bitcoin 運行的過程中,存在幾個由 Bitcoin 技術中硬編碼的關鍵機制而產生的重復事件。這些重復事件給我們提供了一種簡單的方法來對 Satoshis 進行分類,即:通過它的稀缺性。
我們如何追蹤稀有的 Sats?
這就是由前比特幣核心貢獻者 Casey Rodarmor引入的 Ordinal 理論 (Ordinal Theory) 發揮作用的地方。概括而言,Ordinal 理論關注的是給每個 Satoshi 一個唯一的標識符。
該理論提出了一種 Satoshis 的編號方案,根據其開采順序為每個 Sat 分配一個唯一的編號。這樣一來,跟蹤、轉移和收集 Sat 便可成為現實,為基于稀有度的交易開辟了一個全新的市場。
銘文:Ordinals 的誕生
2021 年,Bitcoin 完成了名為 “Taproot” 的關鍵升級,旨在幫助網絡擴展。Casey Rodarmor 開創了一種獨特的方式,利用 taproot 的一些功能將數據嵌入 Bitcoin 區塊鏈上,尤其是 Satoshis 上,銘文就此誕生。刻有銘文的 Sat 現在通常被稱為 Ordinal。
理解 Ordinal 最簡單方式就是想象有人在一枚硬幣上雕刻藝術作品。如果硬幣的持有者愿意,他們仍然可以把這枚硬幣花掉 (買一碗螺螄粉),但那些藝術作品會永遠刻在硬幣上面。銘文也是如此,一旦有人將數據綁定到單個 Sat,他們就可以花費那個 Sat 來傳輸與其相關的數據。
隨著使用 Sats 理論跟蹤和識別 Sats 的新能力的出現,將任意數據刻入 Sats 的熱潮開始了,一個全新的生態系統就此誕生。
2023 年 2月初,銘文總數超過 6000 萬,展示了該生態蓬勃發展的強勁勢頭。
Sats 上刻入的任意數據可以包括圖片、GIF、視頻,甚至 HTML 代碼。數據的唯一限制是 Bitcoin 區塊大小的限制 (4MB)。需要注意的是,每個銘文都需要付費,就像在 Bitcoin 網絡上進行的任何其他交易一樣。為刻錄 Sats 而支付的交易費用通常因文件大小而異,文件越大費用越貴。
NFTs vs. Ordinals NFT 與 Ordinals
帶有銘文圖片的 Ordinals 類似于以太坊上的 NFT。因此,人們開始稱它們為 Bitcoin NFT。盡管兩者之間存在相似之處,但 Ordinals 與 NFT 有 4 個明顯區別:
Mempool 內存池
在與支持 Ordinals 的應用程序交互之前,了解比特幣內存池至關重要。
比特幣交易不會直接添加到 Bitcoin 區塊鏈中。相反,交易首先會進入一個隊列,被稱為內存池。所有有效交易都會位于這個等待區,然后被驗證并打包進一個區塊中,這個過程大約需要 10 分鐘。當鏈繁忙時,大量交易進入內存池,礦工難以快速處理它們,這就會導致擁堵和交易時間變長。而產生的直接結果就是:交易費用增加。
比特幣礦工收到交易費用作為驗證和向區塊鏈添加交易的獎勵。用戶可以選擇每筆交易的交易費用,這意味著,為了鼓勵礦工優先考慮他們的交易,用戶可以增加交易費用。提供給礦工的費用越高,激勵就越大,因此,該交易在內存池中的優先級就越高。
下面是 mempool 瀏覽器的屏幕截圖。
在這里你可以查看幾個指標,例如當前 gas 費用、區塊高度和平均區塊時間。內存池區塊瀏覽器還投射了比特幣區塊鏈的視覺效果,其中待處理的區塊為橙色,已確認的區塊為藍紫漸變色。在右上角,您可以輸入任何交易 ID 或錢包地址來獲得更多詳細信息,例如該交易在隊列中的位置或者特定地址持有的代幣。總體而言,內存池是與應用程序交互時跟蹤交易的重要工具。
在 Ordinals 出現后不久,一個 Twitter 名為 redphone 的人首次踢出了一種新的代幣標準。Domo 將這一想法付諸于實施,并設計了新的代幣標準:BRC-20。BRC-20 銘文迅速流行起來,并開始在與 Ordinals 相關的交易中占據絕對主導地位。
BRC-20 是刻有 JSON 數據的 Ordinals,可以創建和傳輸 Token。它包括三個 Token 函數:部署、鑄造和轉移。Token 的所有權由最新的轉賬收據來證明,在實操中,錢包和其他應用程序會讀取這些轉賬收據,并將 BRC-20 余額分配給擁有轉賬收據的地址。
最初由 Domo 創建的 BRC-20 代幣合約是 。最初,每批的鑄造費是美元。最近,ORDI 的市值超過了 14 億美元,而目前的代幣交易價格是 67.72 美元!這意味著如果有人以 5 美元的價格鑄造了一批原始的 1,000 ORDI,現在的價值已經超過 67,000 美元。
有興趣了解更多關于 BRC-20 代幣的復雜性嗎?查看 Delphi Digital的這些深入探討:
本章節將介紹如何創建和使用比特幣錢包,以及各個錢包對銘文交互的優劣勢,如果你已經是這方面的行家,請跳過此章節。
首要任務是創建比特幣錢包并為其提供資金。比特幣錢包將存儲你的 Sats 和 Ordinals,以及與各種應用程序交互。
這里最重要的一點是:你的錢包必須集成一個獨立的地址用于 Ordinals,或者有凍結已刻錄 Sats 的能力。如前所述,Sats 是 Bitcoin 網絡的原生貨幣,用于支付交易費用。Ordinals 只是刻錄了數據的 Sats,這就帶來了一個風險,那就是你可能會無意中使用你珍貴的 Ordinal Sats 來支付交易費用。
因此,強烈建議使用支持兩個地址或能夠凍結 Sats 的錢包,以防丟失刻有銘文的 Stas。
有兩個還不錯的錢包支持該功能,Unisat和 Xverse。Unisat 提供了更好的應用程序互操作性,而 Xverse 則更側重于用戶體驗。選擇權在你手中!在下面的教程中,我們使用了 Xverse 錢包。
安裝你的比特幣錢包
訪問 Xverse 網頁。Xverse 錢包可作為移動應用程序或瀏覽器擴展程序使用。為了以后可以更好地與應用程序交互,建議使用瀏覽器擴展。要安裝瀏覽器擴展程序,請單擊下載并將擴展程序添加到 Chrome。
創建你的比特幣錢包
一旦安裝完畢,點擊瀏覽器擴展下的圖標,然后點擊 “創建錢包”。每個新錢包都會生成一個獨一無二的助記詞,通常由 12 個單詞組成。
這是你的錢包私鑰,如果你的錢包丟失,這是幫助你恢復錢包的唯一途徑,因此一定要妥善保管!因為任何拿到這個助記詞的人都可以完全控制你的錢包和資產。通常,建議將助記詞以物理方式寫下來(例如寫在小本本上),而不是以電子方式存儲 (例如存在電腦文檔或手機相冊),以避免因設備受損而導致未經授權的訪問。
備份助記詞后,請選擇正確的單詞以確認已存儲助記詞。最后,創建一個密碼。每次你想從瀏覽器擴展程序訪問錢包時都會使用它。
與你的比特幣錢包初次見面
你的錢包顯示了你的代幣余額,并且可以通過它發送、接收、交換和購買代幣。在 ”設置“ 里,你可以訪問助記詞,以及更改顯示幣種。目前,我的代幣余額全部為零。
當點擊 “發送” 或 “接收” 時,你的錢包會顯示三個不同的比特幣地址,與銀行帳號類似,在發送或接收資金時必須提供這些地址。在這里,Xverse 的用戶友好性派上了用場。
第一個地址是你的 BTC 地址,應始終用于為你的錢包提供資金。你的 BTC 存儲在這里,用于支付交易費。切勿使用該地址手動接收 Ordinals 或 BRC-20 代幣,以避免用 ordinal Sats 支付交易費用。
第二個地址僅適用于 Ordinals 和 BRC-20 代幣。在部署和鑄造銘文時,Xverse 會自動確保將 Ordinals 和 BRC-20 代幣發送到此地址。但是,如果你執行的是一個點對點交易 (直接接收),請確保提供此地址以接收 Ordinals 和 BRC-20。
第三個地址是 Stacks NFT 和 SIP-10 代幣,這超出了本指南的范圍,不贅述。
為你的錢包注資
你可以通過幾種不同的方式為你的錢包注資:
如果你想與下面列出的任何應用程序進行交互,我們建議你先使用少量的資金嘗試,直到你完全熟練掌握該過程為止。
盡管 Ordinals 生態仍然相對年輕,但有幾個應用程序支持 Ordinals 和 BRC-20 代幣的交易。以下是一些值得一試的應用程序列表:
Ordinal 市場促進了 Ordinal 和 BRC-20 的購買、銷售和交換。通過這些平臺,你可以毫不費力地出售你的 Ordinals 和 BRC-20s 代幣,并搜羅各種收藏品。此外,這些市場經常允許用戶部署、鑄造和轉移銘文。
如果按規模和交易量作為標準,排名前三的市場是 OKX、Unisat 和 Magic Eden。雖然 OKX 目前在這場競賽中處于領先地位,但它將某些功能限制為僅使用原生 OKX 錢包的用戶。另一方面,Unisat 和 Magic Eden 提供了更為友好的用戶體驗。
快速推薦
盡管你可以在這些市場上交易 Bitcoin NFT,但 Ordinals Market 和 Ord.io 涵蓋了更廣泛的 NFT 收藏,是跟蹤過去 24 小時、30 天、90 天等趨勢收藏的絕佳工具。
創建銘文和部署任何類型的 Ordinal 的最簡單方法之一是 OrdinalsBot 應用程序。通過集成的 API,用戶可以批量生成銘文訂單,這在創建整個收藏集時尤為方便。API 服務的支付可以使用閃電網絡或者直接在 Bitcoin 上進行。
它支持所有類型的銘文,附加功能包括刻錄到特定的 Satoshi 類型,例如僅在 uncommon sats 上刻錄。
Magisat 是一個專門用于交易 Rare Sats 的市場。你可以交易、購買和出售 Satoshis,涵蓋任何稀有和奇怪的 Sats,例如披薩 Satoshis。Pizza Satoshis 比特幣社區一個非常典型的案例,與 2010 年的披薩事件有關 (一名程序員用 1 萬個 BTC 買了 2 張比薩餅,它號稱是 BTC 第一次可以作為真實貨幣購買實物商品)。此外,Magisat 可讓你掃描錢包中的任何 Sats 以查看其稀有度。
Ordinalhub 是一個聚合器,一種將來自不同市場的 Ordinals 聚合到一個平臺的工具,并提供趨勢、近期銷售和底價展示等功能。它通過幫助用戶找到最優惠的價格來簡化交易,因為通常 BRC20 代幣和收藏品在不同平臺上的價格不盡相同。
Liquidium 是首批支持去中心化金融(簡稱 DeFi)的 Ordinals 應用程序之一。該協議允許使用 Ordinals 銘文作為抵押品對比特幣進行點對點借貸。目前,借貸市場第一梯隊包括 NodeMonkes、Bitcoin Frogs 和 RSIC。
AlexGo 的總交易量已經超過 8 億美元,TVL 為 1.22 億美元,是比特幣 L2 上 DeFi on Stacks 的領先協議之一。它通過四個應用程序提供對 Ordinals 的支持:
銘文領域最早的突破性發展之一是遞歸 (recursion) 的引入。遞歸銘文于 2023 年 6 月首次受到關注,最近遞歸銘文總數已經超過 35 萬。
概括而言,遞歸銘文允許新銘文調用和引用現有銘文中的數據。這聽起來可能很無聊,但其影響深遠!
首先,遞歸提供了一種實用的方法來規避 Bitcoin 區塊的 4 MB 限制。通過將數據拆分為相互引用的,處于不同區塊中的多個銘文,從而讓我們可以輕松地將大文件上傳到 Bitcoin 網絡。遞歸的另外兩個顯著好處是提高存儲效率和降低交易成本。
最重要的是,遞歸是大量開發者工具的起源。通過遞歸,代碼庫能夠用銘文構建。因此,Ordinals 真正達到了下一個優化水平。例如,現在我們可以使用遞歸創建 Bitcoin 上的高質量 NFT 集,由于它遞歸可以讓創作者利用現有的銘文庫,從而聚合收藏品的銘刻特征 (traits),以達到簡化數千個獨特 NFT 的創建過程,而無需像以前那樣單獨創建數千個 NFT 集。
BRC-20 代幣只有三個函數(部署、鑄造和轉移),不僅功能有限,而且在開發中也是靜態的。于是,新的實驗性代幣標準逐個涌現,并立志成為 BRC-20 的改進版本。以下是當前兩種替代方案的速覽:
CRBC-20
名為 Cybord 的 CRBC-20 代幣標準利用了銘文可以直接存儲任意數據的特性。因此,銘文的費用大大降低,索引過程大大簡化,使 CRBC-20 成為 BRC-20 的一種更便宜、更快捷的替代品。
ORC-20.
與 CRBC-20 一樣,ORC-20 解決了 BRC-20 的局限性,并專注于增強安全性和靈活性。與 BRC-20 不同的是,ORC-20 支持更廣泛的數據格式,允許交易逆轉,并且向后兼容 BRC-20。此外,ORC-20 通過運行可重復使用的銘文來節省交易費用,成本更低。
在 2023 年初,Bitcoin 經歷了以銘文為中心的重大發展,創造了不可變的數字資產:Ordinals 和 BRC-20s 代幣。盡管新興的 Ordinal 還不夠成熟,但現在它的市值已經超過了 17 億美元,并且毋庸置疑的是,它通過讓用戶能夠在 Sat 上存儲各種數據而推動了 Bitcoin 的革新。
該生態目前包括中心化和去中心化交易所、市場、流行的代幣標準以及基于其技術的協議等。由于處于早期階段,伴隨著新的代幣標準的出現,Ordinals 支持者的投機和熱情也隨之高漲,甚至 DeFi 應用程序也開始嘗試 Ordinals 的金融化。
此外,現貨比特幣 ETF 最近獲得批準,標志著機構采用的一個里程碑。盡管長期效應存在爭議,但 Ordinals 和 BRC-20 生態有望從 Bitcoin 的廣泛采用和不斷增長的需求中受益。
盡管生態蓬勃發展,但質疑聲從未間斷,一些 Bitcoin 愛好者群體主張開發者消除 Ordinal 技術及其相關元素。盡管這種批評具有多面性,但它源自技術本身的缺點和對比特幣網絡的影響,因此他們甚至將銘文視為系統漏洞。
詳細介紹此論述超出了本指南的范圍。然而重要的是要承認,Ordinals 和 BRC-20 交易導致了 Bitcoin 區塊空間需求的爆炸式增長,這可能會對 Bitcoin 的網絡健康產生負面影響。擁擠的內存池導致不合理的高交易費用和漫長的確認時間只是負面后果之一。另一方面,銘文是礦工保護網絡的重要收入來源。即將到來的比特幣減半,大約發生在 2024 年 4 月下旬,當礦工的區塊獎勵減半時,將進一步動搖這場辯論。
盡管 Ordinals 和 BRC-20 的未來可能還是一個不確定性因素,但圍繞其生態的發展依然很狂熱。希望本指南不僅能激起你的興趣,而且鼓勵你進一步探索比特幣的 Ordinals 世界。為了保持你的好奇心,并為你指明研究它的潛在途徑,這里有兩個即將發生的趨勢值得關注:
Trac Network:去中心化索引的先驅
要使 Ordinals 正常工作,需要 Ordinals 索引。在不涉及技術復雜性的情況下,了解 Ordinal 和 BRC-20 交易是通過鏈上數據的鏈下索引完成的,這一點很關鍵,它讓整個網絡可以識別、跟蹤和排序 Ordinals,這意味著索引是關鍵的基礎設施。
若要在雙方之間交換銘文,兩個實體必須運行相同的索引。目前,絕大多數項目都在使用 ord 索引器來解決兼容性問題,這使得這個重要的基礎設施非常中心化。對單個索引器的依賴會帶來嚴重的技術風險,因此一些協議正在努力構建可行的競爭對手。其中之一是 Trac Network。
Trac Network 的核心產品是 Trac Core,其價值主張是:去中心化的開源索引器。它通過引入治理代幣 來實現去中心化的目標。這意味著,TRAC 持有者能夠通過對關鍵開發項目進行投票來影響方向并管理 Trac Core 的發展。
目前的交易價格為 4.65 USD,市值為 970 萬美金,然而目前為止,這個去中心化索引器尚未完全發布。
有關更多信息,請查看 《Many Words On Trac Network》。
Rune:同質化代幣協議
Ordinal Theory 的創建者 Casey Rodarmor 正在開發一種同質化代幣協議,預計發布日期為 4 月。這種新的同質化比特幣代幣協議被稱為 Rune,基于 Ordinals 技術棧,旨在解決當前 BRC-20 代幣標準的許多問題。例如,使用 Rune 協議創建的代幣將不需要鏈下基礎設施,從而消除了針對 BRC-20 的許多爭議點。
由于它是由提出 Ordinal 理論 (Ordinal Theory) 的同一個人構建的,因此針對 Ordinal 官方代幣發行的猜測遍布社區。這樣的代幣標準可能具有取代 BRC-20 的真正潛力。
Aaron 在這里總結了 Casey Rodarmor 關于 Rune 的最新播客,這是一座 alpha 的金礦。
特別感謝 Redphone 和 Gutz 對本報告的寶貴反饋和貢獻。
義:不同的地理信息系統或地理信息系統與其他信息系統之間實施數據雙向交換時采用的數據格式
引自百度百科
據百度百科上的描述數據交換這個詞最早是在《地理信息系統名詞》第二版,很明顯不是用來做編程的。在編程方面數據交換格式僅僅是一種格式,當前主流使用的格式有 3 種 : XML、JSON、YAML
既然是一種格式,那么它就需要標準,因為通過標準可以限定各個格式中的具體內容
XML(全稱EXtensible Markup Language),在我看來它是一種古老的數據交換格式,因為從我接觸到編程開始它就已經存在了
標準所在網址:https://www.w3.org/TR/1998/REC-xml-19980210
最新文檔地址:https://www.w3.org/TR/REC-xml/
其實XML的標準一直是1.0,至少我沒有見過其他的,一般情況下我們在編寫XML文檔的時候都需要遵循一個約束文件,這個約束文件中規定了你可以編寫的內容。約束文件存在的方式也有兩種,原來是 DTD 格式現在主流的是 Schema
XML 如果想完整的學習還是比較費勁的,不過一般情況下要求約束文檔能看懂,XML內容會編寫即可
參考網址:https://www.w3school.com.cn/x.asp
Delphi解析可使用 TXMLDocument(Delphi自帶),此外也可以使用微軟的 MSXML2 我沒有這種需求所以并沒有深入研究
官方文檔:http://docwiki.embarcadero.com/Libraries/Sydney/en/Xml
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。相比于XML格式JSON更為簡單明了
標準文檔地址:http://www.json.org/json-zh.html
具體的語法規則可以參考上面網址的文檔內容,中文的
Delphi官方(當前最新版本DelphiXE10.4.2)已經支持對于JSON的解析了,官方文檔地址
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON
需要注意的是有些類是Tokyo 10.2新增的,在使用的時候需要檢查一下自己的版本
YAML (全稱YAML Ain’t Markup Language),YAML不是標記語言的意思,YAML是便于人閱讀基于unicode 編碼的各種語言的序列號標準。
YAML語言的設計參考了JSON,XML和SDL等語言。YAML 強調以數據為中心,簡潔易讀,編寫簡單
官網地址:http://yaml.org
一個讓人頭皮發麻的站點
學習的話可以參考 阮一峰 老師的博客內容,地址:https://www.ruanyifeng.com/blog/2016/07/yaml.html
沒有找到官方支持,不過在GitHub上有一個開源庫是支持Delphi解析YAML格式數據的,有興趣的朋友可以去研究
地址:https://github.com/neslib/Neslib.Yaml
最后我想說我非常討厭這種數據格式,和python一樣依靠縮進和空格控制語法。。。
將原來視頻中講解的代碼在DelphiXE10.4.2上進行了重構
uses
System.JSON, System.Generics.Collections, System.JSON.Serializers,
System.SysUtils;
type
{ 實體類,主要是用于JSON字符串和類對象的互相轉換 }
TStudent=class(TObject)
private
FName: string;
FAge: Integer;
public
property Name: string read FName write FName;
property Age: Integer read FAge write FAge;
constructor Create; overload;
constructor Create(FName: string; FAge: Integer); overload;
end;
constructor TStudent.Create;
begin
end;
constructor TStudent.Create(FName: string; FAge: Integer);
begin
Self.FName :=FName;
Self.FAge :=FAge;
end;
begin
{ 定義一個JSON字符串 }
var
UserJson :='{"FName":"小黑","FAge":18}';
{ 創建序列化對象 }
var
Serializer :=TJsonSerializer.Create();
{ 反序列化,其實就將字符串轉為對象 }
var
Student :=Serializer.Deserialize<TStudent>(UserJson);
Writeln('反序列化:' + Student.Name + ',' + Student.Age.ToString);
{ 列表轉換,將TLIst容器轉為字符串,也可以說是數組轉換 }
var
List :=TList<TStudent>.Create;
List.Add(TStudent.Create('小白', 30));
List.Add(TStudent.Create('蕭薔', 30));
// 創建序列化對象
Serializer :=TJsonSerializer.Create();
Writeln('序列化:' + Serializer.Serialize < TList < TStudent >> (List));
var
{ 一個比較復雜的json字符串 }
Users :='{"FListHelper":{"FCount":2},"FItems":[{"FName":"小白","FAge":30},{"FName":"蕭薔","FAge":30}],"FComparer":{}}';
// 創建序列化對象
Serializer :=TJsonSerializer.Create();
{ 可以嘗試下這里會不會有問題,當字段匹配時居然可以直接轉換 }
var
UserList :=Serializer.Deserialize < TList < TStudent >> (Users);
for var Stu in UserList do begin
Writeln('反序列化:' + Stu.Name + ',' + Stu.Age.ToString);
end;
{ 獲取指定字段 }
Writeln(TJSONObject.ParseJSONValue(Users).GetValue<TJSONObject>
('FListHelper').GetValue<string>('FCount'));
Writeln(TJSONObject.ParseJSONValue(Users).GetValue<TJSONArray>('FItems')
.Count.ToString);
Readln;
end.
其實Delphi自帶的JSON解析已經夠用了,如果不能滿足你的話有一個開源庫你可以嘗試,不過我看它最近一次更新代碼是 3 年前....
Github地址:https://github.com/hgourvest/superobject
學習資料(萬一老師的博客):https://www.cnblogs.com/del/category/215158.html
片由 h heyerlein 發布在 Unsplash 上
如果我們把人類的現代文明看作一輛汽車,那么軟件開發行業就像汽車的發動機,編程語言就像發動機的燃料。那么問題來了,你應該學哪種編程語言?
學習一門新的編程語言在時間、精力和腦力上的投入都非常巨大,但它可以提高你的軟件開發技能,并給你的職業生涯帶來提升,正如我在另一篇博客中所寫的:
博客網址:https://medium.com/@md.kamaruzzaman/5-reasons-to-learn-a-new-programming-language-in-2020-bfc9a4b9a763
通常,你應該選擇一種能有助于你事業發展的編程語言。另外,你還可以學習一門受歡迎程度正在上升的語言。
我對主流編程語言非常尊重。但在這里,我列出現代編程語言,這些語言可以提高你的工作效率,使你成為一個更好的開發人員。此外,我還將涉及更廣泛的領域:系統編程,應用程序開發,網絡開發,科學計算。
「現代編程語言」這個詞是模棱兩可的。許多人認為像 Python、JavaScript 這樣的語言是現代編程語言。但同時,他們認為 Java 是一種古老的編程語言。事實上,它們都出現在同一時間:1995 年。
大多數主流的編程語言是在上個世紀發展起來的,主要是在 20 世紀 70 年代(例如 C)、20 世紀 80 年代(例如 C++)、20 世紀 90 年代(例如 Java、Python、JavaScript)。這些語言不是為了利用現代軟件開發生態系統而設計的。盡管其中的許多語言中有改進特性,比如并發性和自我調整,但是它們也提供了向后兼容性,并且不能丟棄舊的、過時的特性。
在這一點上,Python 做的很好,它在 Python 2 和 Python 3 之間做了一個明確的劃分。這些語言通常提供 10 種方法來做同樣的事情,而不關心開發人員用起來是否方便。根據 StackOverflow developer 的調查,大多數主流的舊編程語言都在「最可怕的語言」類別中占據了榜首:
圖片來源:Stackoverflow
我將以第一款 iPhone 發布的時候,也就是 2007 年 6 月 29 日作為新舊編程語言之間的界限時間點。在 iPhone 發布之后,一切都發生了變化。在這個列表中,我主要考慮 2007 年后的編程語言。
首先,開發現代編程語言是為了充分利用現代計算機硬件(多核 CPU、GPU、TPU)、移動設備、大數據集、快速網絡、容器和云。此外,大多數現代編程語言使用起來都更容易,主要體現在:
簡潔的代碼
內置的并發支持
空指針安全
類型推斷
更簡單的特性集
低認知負荷
混合所有編程范例的最佳特性
其次,列表中的許多編程語言都具有破壞性,將永遠改變軟件行業。其中一些已經成為主流編程語言,而另一些則等待取得突破。至少作為第二種編程語言來學習這些語言是明智的。
在之前的一篇博文「20 個 2020 年軟件發展趨勢預測」中,我預測了 2020 年許多現代編程語言的突破:
文章網址:https://towardsdatascience.com/20-predictions-about-software-development-trends-in-2020-afb8b110d9a0
Rust
圖片來源:Thoughtram
系統編程語言是由 C、C++等主導的,盡管它們可以完全控制程序和硬件,但它們缺乏內存安全性。即使它們支持并發性,但是在比你保證并發安全性的情況下,使用 C/C++編寫并發程序是很有挑戰性的。其他流行的編程語言是可解釋性的語言,如 Java、Python、Haskell,它們提供安全性,但需要很多的運行時間或虛擬機。由于運行時很大,像 Java 這樣的語言不適合系統編程。
有很多人嘗試過將 C/C++的特性和 Haskell,Java 的安全性結合起來,但目前看來,Rust 是第一個實現這一目的的產品級編程語言。
Graydon Hoare 最早將 Rust 作為一個副產品開發出來。他受到了研究性的編程語言 Cyclone 的啟發。Rust 是開源的,Mozilla 與許多其他公司和社區一起進行語言開發。Rust 于 2015 年首次發布,很快就引起了社會各界的關注。在以前的文章中,我深入研究了 Rust,并論證了為什么在大數據域中使用 Rust 來代替 C++、Java 是一個更好的選擇:
文章網址:https://towardsdatascience.com/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842
主要特性:
通過所有權和借用的概念提供內存安全性和并發安全性。
內存安全和并發安全的編譯時間保證,即如果一個程序代碼編譯了,那么它既是內存安全的,也沒有數據競爭。這是 Rust 最吸引人的特點。
它還提供了 ML,Haskell 的表示方式。Rust 具有不變的數據結構和函數式編程特性,提供函數式并發和數據并發。
Rust 的速度非常快。
由于沒有運行時,Rust 提供了對現代硬件(TPU、GPU、多核 CPU)的完全控制。
Rust 有 LLVM 支持。
受歡迎程度:
自 2015 年首次亮相以來,Rust 一直被開發者所喜愛,并在 StackOverflow 開發者調查中連續四年(2016、2017、2018、2019)被評為最受歡迎的語言:
圖片來源:Stackoverflow
根據 GitHub Octoverse 的說法,Rust 是僅次于 Dart 的增長第二快的語言:
圖片來源:Octoverse
流行編程語言網站 PyPl 也將 Rust 排在第 18 位,并呈上升趨勢:
圖片來源:PyPl
對比它提供的功能集,難怪像微軟、亞馬遜、谷歌這樣的科技巨頭最終宣布將 Rust 作為一種長期的系統編程語言。
在過去的 5 年里,Rust 的吸引力每年都在增加:
圖片來源:Google Trends
主要用在:
系統編程
無服務器計算
業務應用程序
主要競爭語言:
C
C++
Go
Swift
Go
圖片來源:Wikimedia
谷歌是最大的網絡公司之一。本世紀初,Google 面臨著兩個擴展問題:開發擴展和應用程序擴展。開發擴展意味著他們不能通過增加開發人員來增加更多的功能,應用程序擴展意味著他們無法輕松開發一個可以擴展到「Google」級機器集群的應用程序。2007 年左右,谷歌開始創建一種新的「實用」編程語言,這種語言可以解決這兩個問題。在 Rob Pike(UTF-8)和 Ken Thompson(UNIX 操作系統)中,兩個世界上最有才華的軟件工程師創建了一種新的語言。
2012 年,谷歌發布了 Go 編程語言的第一個官方版本。Go 是一種系統編程語言,但不同于 Rust。它也有一個運行時和垃圾收集器(幾兆字節),但與 Java 或 Python 不同的是,這個運行時包含了生成的代碼。最后,Go 生成一個本機二進制代碼,可以在沒有附加依賴項或運行時的情況下在計算機中運行。
主要特性:
Go 具有一流的并發支持。它不通過線程和鎖提供「共享內存」并發性,因為編程難度要大得多。相反,它提供了基于 CSP 的消息傳遞并發性。Go 使用「Goroutine」(輕量級綠色線程)和「Channel」進行消息傳遞。
Go 最具殺傷力的特點是簡單,它是最簡單的系統編程語言,一個萌新軟件開發人員可以在幾天內編寫出高效的代碼。一些最大的云原生項目(Kubernetes,Docker)是用 Go 編寫的。
GO 也有嵌入式垃圾收集器,這意味著開發人員不需要擔心像 C/C++那樣的內存管理問題。
谷歌在 Go 上投入了大量資金,因此,Go 擁有大量的工具支持。對于新的 Go 開發人員來說,有一個龐大的工具生態系統。
通常,開發人員花費 20% 的時間編寫新代碼,80% 的時間維護現有代碼。由于其簡單性,Go 在語言維護領域表現出色。如今,Go 在商業應用程序中得到了廣泛的應用。
受歡迎程度:
自 Go 首次問世以來,軟件開發社區已經欣然接受了它。在 2009 年(首次亮相)和 2018 年,Go 通過 TIOBE 指數進入編程語言名人堂排行榜。難怪 Go 的成功為 Rust 這樣的新一代編程語言鋪平了道路。
Go 已經是一種主流編程語言。最近,Go 團隊宣布了「Go 2」的計劃,目的只是讓語言更加穩固。
在幾乎所有流行編程語言比較網站,Go 的排名很高,超過了許多現有的語言。以下是 2019 年 12 月的 TIOBE 指數評級,Go 排名第 15 位:
圖片來源:TIOBE
根據 Stackoverflow 的調查,Go 是十大最受歡迎的編程語言之一:
圖片來源:Stackoverflow
根據 GitHub Octoverse 的統計,Go 也是增長最快的十大語言之一:
圖片來源:Octoverse
谷歌還顯示,過去五年里,Go 的吸引力不斷增強:
圖片來源:Google Trends
主要用例:
系統編程
無服務器計算
業務應用程序
云本機開發
主要競爭語言:
C
C++
Rust
Python
Java
Kotlin
Java 是企業軟件開發中無可爭議的王者。近年來,Java 已經受到了很多批評:冗長,需要大量的樣板編碼,復雜,容易發生意外。然而,關于 Java 虛擬機(JVM)的爭論很少。JVM 是軟件工程領域的杰作,它提供了一個經過時間考驗的運行時。在上一篇文章中,我詳細討論了 JVM 的優點:
文章網址:https://towardsdatascience.com/programming-language-that-rules-the-data-intensive-big-data-fast-data-frameworks-6cd7d5f754b0
多年來,像 Scala 這樣的 JVM 語言試圖回答 Java 的缺點,并希望成為更好的 Java,但是失敗了。最后,Kotlin 出現了,尋找更好 Java 的旅程似乎已經結束。Jet Brains(流行 IDE IntelliJ 背后的公司)開發了 Kotlin,它運行在 JVM 上,解決了 Java 的缺點,并提供了許多現代特性。與 Scala 不同,Kotlin 比 Java 簡單得多,并在 JVM 中提供 Go 或 Python 式的開發效率。
谷歌宣布 Kotlin 是開發 Android 的一流語言,并提高了 Kotlin 在社區的接受度。同樣流行的 Java 企業框架 Spring 也從 2017 年開始在 Spring 生態系統中支持 Kotlin。
主要特性:
Kotlin 的 USP 是它的語言設計。我總是將 Kotlin 看作 JVM 上的 Go/Python,因為它的代碼簡潔明了。因此,Kotlin 的生產效率很高。
與許多其他現代語言一樣,Kotlin 提供了空指針安全、類型推斷等功能。
因為 Kotlin 在 JVM 中運行,因此你可以使用現存的 Java 庫龐大的生態系統。
Kotlin 是開發 Android 應用程序的一流語言,已經超越 Java 成為開發 Android 應用程序的第一語言。
Kotlin 有 JetBrains 和開源的支持。所以,Kotlin 有很好的工具支持。
有兩個有趣的項目:Kotlin Native(將 Kotlin 編譯為本機代碼)和 Kotlin.js(Kotlin 轉換為 JavaScript)。如果他們成功了,那么 Kotlin 可以在 JVM 之外使用。
Kotlin 還提供了一種編寫 DSL(領域特定語言)的簡單方法。
受歡迎程度:
自 2015 年首次發布以來,Kotlin 的受歡迎程度正在飆升。根據 Stack Overflow,Kotlin 是 2019 年第四受歡迎的編程語言:
圖片來源:Stackoverflow
Kotlin 也是增長最快的編程語言之一,排名第四:
圖片來源:Github Octoverse
熱門編程語言排名網站 PyPl 將 Kotlin 列為第 12 位最受歡迎的編程語言,并有很高的上升趨勢:
圖片來源:Pypl
自從谷歌宣布 Kotlin 是開發 Android 應用程序的一流語言以來,Kotlin 的受歡迎程度快速上升,如下圖所示:
圖片來源:Google Trends
主要用例:
企業應用程序
Android應用程序開發
主要競爭語言:
Java
Scala
Python
Go
TypeScript
JavaScript 是一種優秀的語言,但 2015 年以前的 JavaScript 有許多缺點。甚至著名的軟件工程師 Douglas Crockford 也寫過一本書《JavaScript: The Good Parts》,并暗示 JavaScript 有很多不好的部分。由于沒有模塊化和「回調地獄」,開發人員不喜歡維護特別大的 JavaScript 項目。
Google 甚至開發了一個平臺,將 Java 代碼轉換為 JavaScript 代碼(GWT)。許多公司或個人試圖開發更好的 JavaScript,例如 CoffeeScript、Flow、ClojureScript,但微軟的 TypeScript 無疑是其中最突出的。由 Delphi 的創建者 Anders Hejlsberg 領導的一組微軟工程師創建了 TypeScript,把它作為 JavaScript 的靜態類型的模塊化超集。
在編譯期間,TypeScript 被編譯為 JavaScript。2014 年首次發布以來,TypeScript 迅速引起社會關注。當時谷歌還計劃開發一個靜態類型的 JavaScript 超集。谷歌對 TypeScript 印象深刻,他們沒有開發新的語言,而是與微軟合作改進 TypeScript。
Google 使用 TypeScript 作為其 SPA 框架 Angular2+ 的主要編程語言。另外,流行的 SPA 框架 React 提供了對 TypeScript 的支持。另一個流行的 JavaScript 框架 Vue.js 聲明他們將使用 TypeScript 開發新的 Vue.js 3:
圖片來源:Vue.js Roadmap
此外,node.js 的創建者 Ryan Dahl 決定使用 TypeScript 開發一個安全的 node.js 替代品 Deno。
主要特性:
與列表中的 Go 或 Kotlin 一樣,TypeScript 的主要特性是語言設計。憑借其清晰干凈的代碼,它是最優雅的編程語言之一。就開發人員的生產力而言,它與 JVM 上的 Kotlin 或 Go/Python 不相上下。TypeScript 是最高效的 JavaScript 超集。
TypeScript 是 JavaScript 的強類型超集。它特別適合大型項目,并被正確地稱為「大規模的 JavaScript」。
「三大」單頁應用程序框架(Angular、React、Vue.js)為 TypeScript 提供了極好的支持。在 Angular 中,TypeScript 是首選的編程語言。在 React 和 Vue.js 中,TypeScript 越來越流行。
兩個最大的科技巨頭:微軟和谷歌正在合作開發 TypeScript,它得到了一個充滿活力的開源社區的支持。因此,對 TypeScript 的工具支持是最好的支持之一。
由于 TypeScript 是 JavaScript 的超集,它可以在 JavaScript 所有的地方運行。TypeScript 可以在瀏覽器、服務器、移動設備、物聯網設備和云上運行。
受歡迎程度:
開發人員喜歡 TypeScript 優雅的語言設計。在 Stackoverflow 開發者調查中,它在最受歡迎的語言類別中與 Python 并列第二:
圖片來源:Stackoverflow
TypeScript 是增長最快的 Web 編程語言之一,在 GitHub Octoverse 上排名第五:
圖片來源:Octoverse
根據 GitHub 貢獻,TypeScript 也進入了前 10 名(排名第 7):
圖片來源:Octoverse
TypeScript 在過去的一年中吸引了越來越多的眼球,這反映在 Google 趨勢上:
圖片來源:Google Trends
主要用例:
Web 用戶界面開發
服務器端開發
主要競爭語言:
JavaScript
Dart
Swift
Steve Jobs 拒絕在 iOS 中支持 Java(和 JVM),因為他認為 Java 將不再是一種主要的編程語言。我們現在知道 Steve Jobs 對 Java 的評價是錯誤的,但是 iOS 仍然不支持 Java。相反,蘋果選擇 Objective-C 作為 iOS 中的主流編程語言。Objective-C 是一門很難掌握的語言。而且,它具備現代編程語言所要求的高開發效率。
在蘋果,Chris Lattner 和其他人開發了 Swift ,它是一種多范式、通用、可編譯的編程語言,為 Objective-C 提供了一種替代方案。Swift 的第一個穩定版本于 2014 年發布。Swift 還支持 LLVM 編譯器工具鏈(也由 Chris Lattner 開發)。Swift 與 Objective-C 代碼庫具有良好的互操作性,并且已經成為 iOS 應用程序開發的主要編程語言。
主要特性:
Swift 的一個致命優點是它的語言設計。它使用更簡單、簡潔和干凈的語法,為 Objective-C 提供了一個更高效的替代方案。
Swift 還提供了現代程序語言的特性:null 安全性。
Swift 是一種編譯語言,它和 C++一樣快。
Swift 支持 LLVM 編譯器工具鏈。因此,我們可以在服務器端甚至瀏覽器編程(使用 WebAssembly)中使用 Swift。
Swift 提供自動參考計數(ARC)支持,這樣可以限制內存管理不當。
受歡迎程度:
和許多其他現代語言一樣,開發人員也非常喜歡 Swift。根據 StackOverflow 的調查,Swift 在最受歡迎的編程語言中排名第六:
在 TIOBE 的編程語言排行榜中,Swift 在 2019 年已升至第 10 位。考慮到這門語言才 5 歲,這是一個相當了不起的成就:
圖片來源:TIOBE Index
Google trends 還顯示,Swift 的受歡迎程度先急劇上升,隨后在最后幾次飽和中趨勢略有下降:
圖片來源:Google Trends
主要用例:
iOS 應用程序開發
系統編程
客戶端開發(通過 WebAssembly)
主要競爭語言:
Objective-C
Rust
Go
Dart
Dart 也是 Google 發布的編程語言。Google 是網絡和安卓領域的關鍵玩家,在網絡和應用程序開發領域開發自己的編程語言也就不足為奇了。
Dart 是一種支持強類型和面向對象編程的通用編程語言。Dart 也可以被轉換成 JavaScript,并且可以運行在 JavaScript 運行著的任何地方(例如 Web、移動、服務器)。
主要特性:
與 Go 一樣,Dart 也非常注重開發人員的工作效率。Dart 由于其干凈、簡單、簡潔的語法,極大地提高了生產效率,深受開發人員的喜愛。
Dart 還提供強大的類和面向對象的編程。
Dart 是少數支持 JIT 編譯和 AOT 編譯的語言之一。因此,Dart 可以以 JavaScript 運行時(V8 引擎)為目標,Dart 可以編譯成快速的本機代碼(AOT 編譯)。
跨平臺的原生應用開發平臺 Flutter 選擇 Dart 作為編程語言來開發 iOS 和 Android 應用。從那以后,Dart 變得越來越流行。
與 Go 一樣,Dart 也有出色的工具支持和 Flutter 巨大的生態系統。Flutter 的日益流行只會增加 Dart 的流行程度。
受歡迎程度:
根據 Github Octoverse,Dart 是 2019 年增長最快的編程語言,去年它的受歡迎程度翻了五倍:
根據 TIOBE,Dart 居于第 23 位,僅僅 4 年時間,它已經超越了其它很多編程語言:
圖片來源:TIOBE index
它也是 StackOverflow 開發者調查中排名第 12 位的最受歡迎的編程語言之一:
圖片來源:StackOverflow
除了 Flutter,Dart 的受歡迎程度在過去兩年也經歷了巨大的改善,這一點在 Google 中很明顯:
圖片來源:Google Trends
主要用例:
應用程序開發
前端開發
主要競爭語言:
JavaScript
TypeScript
Julia
前面列出的編程語言都是由大公司開發的,但 Julia 不是。在技術計算中,通常使用 Python、Matlab 等動態語言。這些語言提供易于使用的語法,但不適合大規模的技術計算,他們使用 C/C++庫來處理 CPU 密集型任務。由于代碼是在兩種語言之間轉換的,因此總會有一些性能損失。
為了解決這個問題,麻省理工學院的一組研究人員計劃從頭開始創建一種新的語言,它利用了現代硬件的優勢,并結合了其他語言的最佳部分。他們在麻省理工學院創新實驗室完成這項工作,還發表了以下宣言:
資料來源:Julia Presentation
Julia 是一種動態的高級編程語言,為并發、并行和分布式計算提供一流的支持。Julia 的第一個穩定版本于 2018 年發布,很快就得到了社區和業界的青睞。Julia 可以應用于科學計算、人工智能等許多領域,最終解決「兩種語言」的問題。
特性:
和 Rust 一樣,Julia 的主要特點是語言的設計。它試圖在不犧牲性能的情況下,結合現有的編程語言在高性能和科學計算中的一些最佳特性。到目前為止,它做得很好。
Julia 是一種可選類型的動態編程語言。因此,Julia 很容易學習,而且效率很高。
它以多分派編程范式為核心。
它內置了對并發、并行和分布式計算的支持。
它還為 I/O 密集型任務提供異步 I/O。
它速度非常快,可以用于需要數百萬線程的科學計算。
受歡迎程度:
在許多領域,Julia 主要與 Python 競爭。由于 Python 是最流行的編程語言之一,Julia 成為主流還需要幾年時間。
Julia 相對年輕(只有一歲),但在 TIOBE index 中仍排在第 43 位:
圖片來源:TIOBE
Google Trends 也顯示出過去的時間里,程序員對 Julia 的穩定興趣。
但考慮到 Julia 背后的功能集和公司數量,如 NSF、DARPA、NASA、Intel,Julia 何時取得突破只是個時間問題。
主要用例:
科學計算
高性能計算
數據科學
可視化
主要競爭語言:
Python
Matlab
via:https://towardsdatascience.com/top-7-modern-programming-language-to-learn-now-156863bd1eec
雷鋒網雷鋒網雷鋒網
*請認真填寫需求信息,我們會在24小時內與您取得聯系。