文标题: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小时内与您取得联系。