走向更强的 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进行文件搜索了, 不过,今天的主角不是它,而是比它更更更更更强的一款软件! 这款软件 ...
随机推荐
- 线段树介绍(segment tree)
1.引入 给定一个区间\([1, n]\),希望你实现一种数据结构,支持以下操作: 1.修改\(i\)号节点的值. 2.询问区间\([i, j]\)中所有节点的和. 这不是树状数组板子 3.修改区间\ ...
- Gradio 5 稳定版正式发布
在过去的几个月里,我们一直在努力工作,今天,我们想向大家展示成果:Gradio 5 稳定版现已发布. 有了 Gradio 5,开发者可以构建 生产级的机器学习 Web 应用,这些应用不仅性能优越.可扩 ...
- threejs 父元素 相对位置 position 网格对象
设置position都是相对于父元素的位置设置的 // 导入 threejs import * as THREE from "three"; import { OrbitContr ...
- day17-打印三角形及Debug
打印三角形 之前学习C++的时候也曾做过,于是乎凭借记忆又试了试,也还能试出来.代码如下: #include<stdio.h> int main(){ int i,j; for(i= ...
- Octave 安装教程
Octave 用心写著. Octave为GNU项目下的开源软件.同时它也是一种语言,专注于解决线性计算问题.因为对于矩阵计算的优化,使得其速度远高于循环计算.语法兼容Linux shell. Octa ...
- Shell之根据关键字符串替换文件中的行
KEY="所要搜索的关键字符串"FullPath=所要搜索的文件的路径str="要替换行的字符串" 根据关键字符串定位行号:line=`sed -n ' ...
- C++ STL 容器简介
1.总述 C++ STL(Standard Template Library)是 C++ 标准库的一部分,包括了许多数据结构的实现,提供了许多好用的轮子,同时,其设计思想也非常值得学习.其中,容器是 ...
- 3.5 Linux命令行下如何识别文件类型?
对于第一次使用 Linux 命令行的用户,可能真的搞不清楚哪个是文件,哪个是目录,究其原因是很难直接通过名字看出来目录和文件的区别. 虽然从名称上不容易分辨,但是可以从颜色上进行区分.一般情况下,Li ...
- win10本地客户端配置SSL并使用MQTTX
1. 本地下载Openssl(默认安装即可,最后一个将打赏取消勾选) Win32/Win64 OpenSSL Installer for Windows - Shining Light Pro ...
- 【性能测试】01基础知识篇-并发用户、RPS、TPS的解读
本文介绍并发用户.RPS.TPS的基本概念以及三者之间的关系. 术语定义 并发用户:在性能测试工具中,一般称为虚拟用户(Virtual User,简称VU),指的是现实系统中操作业务的用户. 说明 并 ...