正如 声明式编程的没落 - Inshua - 博客园 分析,声明式编程由于不符合软件工程需要,实际上正在淘汰,但与此同时,它的特征被过程式编程吸收为了Literal,中文翻译字面量。

什么是 Literal,在 JS 里有

  • 数字 123,123.123, 0x123, 0b0101 在 Java 里可以有 0b0101_0101 的变化
  • 字符串 "abdd" "a'b'cd" , 多行文本 """abcd""", 以及模板字符串 abcd{1+2}
    • C# 里有 @"C:\Temp"
    • python 里则有 f"abcd{1}", r"C:\Temp"
  • 数组 [1,2,3]
  • 动态对象
  • 布尔值 true, false 及空值 null 等

react 的 JSX 也可以视为一种字面量,实际上各种js都试图引入一些特殊的字面量,例如 rhino 里就曾经把 XML 引入作为字面量。

即使C语言也有一些字面量,但是大部分语言里字面量都不被认真对待,许多语言里声明变量和初始化是两步操作,见惯了Java里繁琐的 HashMap 初始化的朋友对此应该不陌生。

我们看到字面量在不停的前进,JSX 和模板字符串表现出一个趋势,代表了字面量的发展方向,那就是混合即兴代码。和古老的年代不同,数据结构逐渐稳定下来,需要用到字面量的要素越来越清晰,无非就是字符串、对象、数组、键值对以及Tag。就结构来说即线性结构和树状结构。

d2js 给出了一种更高级的字符串字面量的形态

sql{.
selec t name, age from person where true
code{.
if(cond){
sql{. and cond .}
}
.}
.}

这种形态可以完全混合代码,与模板字符串相比,它进退的空间更大。如果将 sql 视为字符串————事实上 sql 确实是一个字符串变量————这里传递出一个更高级的观念:通过宿主语言可以控制字符串创建过程

谁也不应该轻视这种思维,我们可以做一些扩展,譬如在数组字面量引入宿主语言控制:

var arr = [0, {for(i in 1..100) .push(i)}, 101, 102]
var arr = [0, {for(i in 1..100) if(i %2) .push(i)}, 101, 102]

又如在对象字面量引入宿主语言控制

var obj = {
"name" if(lang=="en") else "姓名" : "John",
if(lang=="zh"){
"属相": "猴"
}
}

又如树形结构引入宿主语言

var html = Form {
if(!validate()){
Label[class="illegal-input"]{
"输入不合法"
}
}
Input,
Submit
}

字面量提供了即兴编写结构的可能,让开发者的思路不至于因编程语言设计局限而不停切换,不但能提升开发效率,也可以大幅提升程序可读性。

从语言特点来说,它以过程式为宗,以声明式语言为用,是编程语言未来发展的必然趋势。

走向更强的 Literal 的时代的更多相关文章

  1. 利用pyinotify监控文件内容,像tailf命令但比它更强

    Linux的tail/tailf命令使用了内核提供的inotify功能,下面的Python例子也使用inotify实现比tail/tailf更强的监控文件功能. watchfile.py #!/usr ...

  2. Delphi属性比对象的域有更强的功能

    8.4 Delphi自定义组件(3) http://tech.163.com 2006-04-29 11:49:34 来源: 清华大学出版社 网友评论0 条 论坛   3. 测试未安装的组件 在将新组 ...

  3. 更强的 JsonPath 兼容性及性能测试

    更强的 JsonPath 兼容性及性能测试 最近给自己的json框架snack3添加了json path支持.搞好之后,找了两个市面上流行框架比较性测试,以助自己改进框架的性能和兼容性. 测了一圈之后 ...

  4. 更强、更稳、更高效:解读 etcd 技术升级的三驾马车

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 陈星宇(宇慕 ...

  5. C# 数据操作系列 - 18 让Dapper更强的插件

    0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展.是的,没错.在实际开发中我们经常用Dapper作为对EF Core ...

  6. 权益满满 | PGConf.Asia2020大会诚邀赞助商!携手走向更大世界!

    转: 权益满满 | PGConf.Asia2020大会诚邀赞助商!携手走向更大世界! 关于PostgresConf.CN&PGConf.Asia2020大会作为全球最大.最知名的PG序列会议, ...

  7. SOLOv 2:实例分割(动态、更快、更强)

    SOLOv 2:实例分割(动态.更快.更强) SOLOv2:  Dynamic, Faster and Stronger 论文链接: https://arxiv.org/pdf/2003.10152. ...

  8. Python装饰器:套层壳我变得更强了

    Python装饰器:套层壳我变得更强了 Python装饰器:套层壳我变得更强了 关于作用域和闭包可以聊点什么? 什么是作用域 什么是闭包 装饰器:套层壳我变得更强了 参考资料 昨天阅读了<Pyt ...

  9. 一个比 Redis 性能更强的数据库

    给大家推荐一个比Redis性能更强的数据:KeyDB KeyDB是Redis的高性能分支,侧重于多线程.内存效率和高吞吐量.除了性能改进外,KeyDB还提供主动复制.闪存和子密钥过期等功能.KeyDB ...

  10. 比Everything更强的文件搜索工具,支持文件名、文件内容和文件图片上的文字搜索,文件内容搜索工具,文件图片内容搜索工具,OCR图片文本识别搜索,文件快速搜索工具,文字识别文件搜索工具

    Windows自带的文件搜索功能想必不需要过多吐槽,搜索速度简直是在龟爬,所以小编很早之前就在用Everything进行文件搜索了, 不过,今天的主角不是它,而是比它更更更更更强的一款软件! 这款软件 ...

随机推荐

  1. 记录JDK8到JDK17各个版本的更新重点

    虽然大多数公司还是用的JDK8但是也要去了解和学习一下新得东西 ## JDK8新特性(2014年初)(LTS版本) 1.Lambda表达式 2.函数式编程 3.接口可以添加默认方法和静态方法,也就是定 ...

  2. USB总线-Linux内核USB3.0主机控制器驱动框架分析(十二)

    1.概述 如下图所示,Linux内核中USB主机体系结构由五部分组成,分别为Application Software.USB Class Driver.USB Core((USB Driver).US ...

  3. sqlSugar 使用原生模式链接数据库

    using System.Reflection; using zhulongxu_webapi_pro.Tools; namespace zhulongxu_webapi_pro.Services { ...

  4. 通过python提取csv文件中包含某个关键字的单元格

    通过python提取csv文件中包含某个关键字的单元格 def search(lines, pattern): previous_lines = [] for li in lines: if patt ...

  5. KubeSphere + Argo CD,实现真正的 GitOps!

    来自社区用户 willqy 的分享 Argo CD 简介 Argo CD 是用于 Kubernetes 的声明性 GitOps 持续交付工具,应用程序定义,配置和环境应为声明性的,并应受版本控制,应用 ...

  6. Fluent Operator:云原生日志管理的一把瑞士军刀

    作者:程德昊,Fluent Member,KubeSphere Member Fluent Operator​ 介绍 随着云原生技术的快速发展,技术的不断迭代,对于日志的采集.处理及转发提出了更高的要 ...

  7. 几张图带你了解.NET String

    String 字符串作为一种特殊的引用类型,是迄今为止.NET程序中使用最多的类型.可以说是万物皆可string 因此在分析dump的时候,大量字符串对象是很常见的现象 string的不可变性 str ...

  8. DRF-Authention组件源码分析及扩展

    drf 认证组件 1.认证组件源码执行流程 在该图中,我把与认证组件无关的代码都删除了,只留下了认证的代码,方便解析.每行注释的开头数字即代表了执行顺序 注意事项: 第5步中的self.authent ...

  9. 一份阅读量30万+免费且全面的C#/.NET面试宝典

    前言 C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺.扩充知识面和大家共同学习进步.该知识库主要由自己平时学习实践总结.网上优秀文章资料收集(这一部分 ...

  10. mac 搭建 paho.mqtt.cpp 二次开发环境搭建

    mac 搭建 c mqtt 二次开发环境搭建 参考教程 # 下载源码 git clone https://github.com/eclipse/paho.mqtt.c.git # 使用make 编译 ...