走向更强的 Literal 的时代
正如 声明式编程的没落 - 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 的时代的更多相关文章
- 利用pyinotify监控文件内容,像tailf命令但比它更强
Linux的tail/tailf命令使用了内核提供的inotify功能,下面的Python例子也使用inotify实现比tail/tailf更强的监控文件功能. watchfile.py #!/usr ...
- Delphi属性比对象的域有更强的功能
8.4 Delphi自定义组件(3) http://tech.163.com 2006-04-29 11:49:34 来源: 清华大学出版社 网友评论0 条 论坛 3. 测试未安装的组件 在将新组 ...
- 更强的 JsonPath 兼容性及性能测试
更强的 JsonPath 兼容性及性能测试 最近给自己的json框架snack3添加了json path支持.搞好之后,找了两个市面上流行框架比较性测试,以助自己改进框架的性能和兼容性. 测了一圈之后 ...
- 更强、更稳、更高效:解读 etcd 技术升级的三驾马车
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 陈星宇(宇慕 ...
- C# 数据操作系列 - 18 让Dapper更强的插件
0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展.是的,没错.在实际开发中我们经常用Dapper作为对EF Core ...
- 权益满满 | PGConf.Asia2020大会诚邀赞助商!携手走向更大世界!
转: 权益满满 | PGConf.Asia2020大会诚邀赞助商!携手走向更大世界! 关于PostgresConf.CN&PGConf.Asia2020大会作为全球最大.最知名的PG序列会议, ...
- SOLOv 2:实例分割(动态、更快、更强)
SOLOv 2:实例分割(动态.更快.更强) SOLOv2: Dynamic, Faster and Stronger 论文链接: https://arxiv.org/pdf/2003.10152. ...
- Python装饰器:套层壳我变得更强了
Python装饰器:套层壳我变得更强了 Python装饰器:套层壳我变得更强了 关于作用域和闭包可以聊点什么? 什么是作用域 什么是闭包 装饰器:套层壳我变得更强了 参考资料 昨天阅读了<Pyt ...
- 一个比 Redis 性能更强的数据库
给大家推荐一个比Redis性能更强的数据:KeyDB KeyDB是Redis的高性能分支,侧重于多线程.内存效率和高吞吐量.除了性能改进外,KeyDB还提供主动复制.闪存和子密钥过期等功能.KeyDB ...
- 比Everything更强的文件搜索工具,支持文件名、文件内容和文件图片上的文字搜索,文件内容搜索工具,文件图片内容搜索工具,OCR图片文本识别搜索,文件快速搜索工具,文字识别文件搜索工具
Windows自带的文件搜索功能想必不需要过多吐槽,搜索速度简直是在龟爬,所以小编很早之前就在用Everything进行文件搜索了, 不过,今天的主角不是它,而是比它更更更更更强的一款软件! 这款软件 ...
随机推荐
- iOS程序内语言切换使用小结
随着时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等:想在应用程序中实现语言的自由切换,需要配置多个语言的文件,根据用户的动态选择获取不同语言文件下的语言文件,从而显示到界 ...
- document.write 和 innerHTML 的区别
a document.write 是整个页面的内容,会重写页面b innerHTML 是某个元素的内容,只有给body的innerHTML设置内容才会重写页面
- MYSQL存储过程-练习5 游标
MYSQL存储过程-练习5 游标 1 DELIMITER $ 2 CREATE PROCEDURE sp_cur() 3 BEGIN 4 DECLARE bkname VARCHAR(200); 5 ...
- 008 Python、Anaconda、pip、Pycharm、Jupyter 的下载
下述所有软件的具体做法:https://www.cnblogs.com/nickchen121/p/10718112.html python 下载 搜一下 python:https://www.pyt ...
- Oracle ASM 常用巡检脚本
1.查看磁盘组 sqlplus "/ as sysasm" set line 200 set pagesize 200 select group_number,name,state ...
- 云原生周刊:KubeSphere 3.4.1 发布 | 2023.11.13
开源项目推荐 Inspektor Gadget Inspektor Gadget 是一组用于调试和检查 Kubernetes 资源与应用程序的工具(或小工具).它在 Kubernetes 集群中管理 ...
- 工作中的技术总结_JQuery_20210825
工作中的技术总结_JQuery_20210825 JQuery此前接触不多,所以先把此次接触的一些基本操作 1.DOM节点的取值或者赋值: 语法: $(selector).val(value) 参数 ...
- ABC372 (D,E)
ABC372 (D,E) D 一道比较简单的二分查找题目. 观察到每个数能成为 \(j\) 的条件是独立的,因此想到统计每个数能成为它前面哪些数的 \(j\). 对于每个\(ed\), 二分 \(1 ...
- performance.timing:利用performance.timing进行性能分析
window.onload = function(){ setTimeout(function(){ let t = performance.timing console.log('DNS查询耗时 : ...
- .NET现在可以做什么,有哪些公司在用的?
前言 本文大姚和大家一起来分析一下.NET现在可以做什么,.NET未来的发展趋势在哪,有哪些公司在使用的. .NET简单介绍 .NET是一个开源(MIT License).免费.跨平台的开发人员平台框 ...