XLST 的坑
微软真的挖了很多坑,可能就像任正非说的,在90年代进入了无人区,差不多十年多时间有精力没有地方撒,无法判断前进方向,推出了很多错误的路线。现在遇到的 XLST 就是一个大坑。
XLM 在 00 年后开始热炒,这种标记性语言在技术层面确实有一定的价值。它是一种更根本的盒式标记性语言,比起HTML,它可以更好的表达数据。这个语言就像 LISP 一样,看起来很根本,使用可以非常灵活。这种东西是考验架构师/产品经理的重要关口。从市场来看,当时微软有很强的技术号召力,微软不是一家纯粹的我做产品给你用的公司,它很早就开放了API给开发人员做 Windows 应用,且推出了重磅级的开发工具。微软对开发人员的关注是非常大的,我们知道微软在 Java 之战后继续把焦点放在了面向对象这个方面,花了很多价钱在 .NET 上。
XLM 和 .NET 有什么关系呢?其实没有太多关系。XML 是一个标记语言,它的功能是传递结构化的数据,既然是传递数据就好好传递数据不好吗?不,当时的观念是 HTML 也是 XML 的一种,HTML 能做的 XML 也要能做,XML 要成为一种更根本的 HTML。它要有自己的样式表以便显示到UI。纯粹 XML 已经被定义为了数据载体,不适合放 UI 层,HTML 把 CSS JS 混在一起的做法是草台班子的搞法,新的XML必须避免这个坑,这样就发明了一种 M -> V 转换专用 XML,这就是 XLST。 XLST 实现了数据到UI的渲染定义,当渲染复杂时,还可以使用 XLST 编程,XLST 支持 等等编程特性,微软甚至还开发了调试功能。XLST 的编程能力很弱,不方便,怎么办?为了更好的服务开发人员,微软允许使用真正的编程语言,例如 Javascript, VBScript 甚至 C# 等。这些语言都可以方便的访问本地环境,相信用 XLST 开发桌面 UI 也不难。
在搞 .NET 的同时推出这么一个技术,真是自乱阵脚。的确,从理念来说,用 XML 也能做一切,只要有一个图灵完备的解释器就OK,甚至可以推出一个 XML.NET 语言。
XML 为什么失败了呢?其实作为数据表示语言 XML 也不能算完全失败,但是 XLST 的确真的失败了,而 XLST 一旦失败,XML 也就仅仅只能作为一个数据语言来用,最终它就只能和 JSON,yml 之类 PK,谈成功失败都没有太大意义,微软根本不值得花精力去折腾它。那么 XLST 为何失败呢?
XLST 失败的直接原因是 AJAX 的大规模应用,新登上舞台 JavaScript 只需要把 XML 当数据来用就可以实现 XML -> UI 了,并且 JS 还可以做更多。
但是它的失败其实是注定的。回顾起来 XLST 的特点是,它想把其它语言已经做到的东西用一种新的方法实现,这种方法还更蹩脚,这和 Excel Macrosheet 很像。Macrosheet 图灵完备,还可以使用 API 编程,甚至靠它就可以出窗体了。但这种“技术突破”却是公司精力的虚耗,你没有办法让市场大规模接受,你愿意花大价钱花很大的成本推当然也会有几个接受的人,但这些接受你的烂理念的人总有一天会发现,这个东西只能当玩具,然后非常恨你,形成负面口碑。而这些技术往往还会挖很多的坑,因为它是图灵完备的,能运行在客户机上,就会出现用它开发的各种恶意软件和病毒。可能当时很多人没有注意到,XML 有点像 LISP,语言特性很少但是非常完备,而 LISP 早已证明完备不等于好用,一方面人类不是机器,另一方面从低阶的完备到高阶的场景适应能力还有很长一段路,完备只能当毕业设计,适应场景才能真正赢得市场。
btw. 从这个角度出发也的确可以理解苹果禁止动态运行 JavaScript 的做法了,对程序员来说它可以动态升级,但对客户来说这是非常危险的,手机里放着客户的重要信息,不是一个电子玩具。当然更好的办法苹果应该发明一种普遍的手段检测恶意行为。
具体一点说,我们可以看到,XLST 的特点是模式匹配后执行一段代码,这些代码就专门操纵数据节点,可以看出这玩意儿一点面向对象的思维都没有,只是一组转换器函数的合集————你起码把 XLST 称为一个对象也算有点头脑————这套可悲的定义把它的应用范围极大的局限于转换,这就注定了它无法取得成功。
XML 真是一个悲伤的故事,从 XML 开始一个微软鼓捣一点新东西就会形成一股龙卷风的时代过去了。
继续折腾了一下 XSLT,它的作用是从 XML 输出 HTML 或者 TXT,这种功能照现在来看在 JSX 可以很好的处理,这也是声明式编程没落的一个案例。
XSL 致命的缺陷是它的操作都是围绕 XML 节点展开,不是面向对象的,整个XML风潮都有这个问题。
XLST 的坑的更多相关文章
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- 踩石行动:ViewPager无限轮播的坑
2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...
- 为C# as 类型转换及Assembly.LoadFrom埋坑!
背景: 不久前,我发布了一个调试工具:发布:.NET开发人员必备的可视化调试工具(你值的拥有) 效果是这样的: 之后,有小部分用户反映,工具用不了(没反应或有异常)~~~ 然后,建议小部分用户换个电脑 ...
- 首个threejs项目-前端填坑指南
第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- 关于微软HttpClient使用,避免踩坑
最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...
- iOS审核这些坑,腾讯游戏也踩过
作者:Jamie,专项技术测试工程师,在iOS预审和ASO优化领域从事专项测试相关工作,为腾讯游戏近100个产品提供专项服务. WeTest 导读 在App上架苹果应用商店的过程中,相信大多数iOS开 ...
随机推荐
- 【赵渝强老师】使用kubeadmin部署K8s集群
首先,我们来看一下整体的架构. K8s的部署方式: yum方式部署 二进制包:手动使用tar包来部署 minikube:单机版,用于开发测试. kubeadm:可以把kubeadmin看成一个部署工具 ...
- SpringBoot.3中的aot.factories到底有什么用?和以前的spring.factories一样吗?
首先,我们来澄清一下 aot.factories 和 spring.factories 之间的区别.这两个文件不仅名称不同,而且在功能上也存在显著差异.接下来,我们将深入探讨这两个文件的具体作用以及它 ...
- 2024年2月中国数据库排行榜:PolarDB夺魁首登顶,TiDB攀升回探花
银装素裹覆大地,春意初醒待来临.2024年2月墨天轮中国数据库流行度榜单出炉,表现最亮眼的无疑是PolarDB,其自23年7月以来一路高歌猛进,此次更是一举夺魁,彰显了云原生数据库的蓬勃发展态势,Oc ...
- 2022年12月中国数据库排行榜:OceanBase立足创新登榜首,华为腾讯排名上升树雄心
不经一番寒彻骨,怎得梅花扑鼻香. 2022年12月的 墨天轮中国数据库流行度排行榜 火热出炉,本月共有249个数据库参与排名,相比上月新增3个数据库.本月排行榜前十用一句话可以概括为:榜单前十一片红, ...
- 使用 ref 获取另外组件的数据
- kotlin关键字与操作符
硬关键字:始终解释为关键字,不能用作标识符 as - 用于类型转换 - 为导入指定一个别名 as? 用于安全类型转换 break 终止循环的执行 class 声明一个类 continue 继续最近层循 ...
- kali Linux 安装 AWVS 笔记
安装 AWVS 笔记 配置安装 https://www.zwnblog.com/archives/kali-an-zhuang-awvs 根据这篇文章 配置并安装出来的 设定的账号和密码 账号:adm ...
- tekton初次安装报错“containers with incomplete status: [place-tools]”
报错内容 在按照官方部署方式部署完毕以后,执行第一个taskrun的时候就报错了,报错如下 Status: Conditions: Last Transition Time: 2022-08-08T0 ...
- 16收16发ARINC429模块
6通道发送, 16通道接收* 发送通道:每路发送通道FIFO大小为:511 x 32bit(CHR32216/32316) ,缓存256条发送消息(CHR32216-EX/32316-EX)发送FIF ...
- 云原生爱好者周刊:利用 DNS 计算圆周率
开源项目推荐 dns.toys dns.toys 是一个比较有创意的 DNS 服务器,它利用 DNS 协议提供了很多非常有趣的功能和服务.例如查询时间.天气.圆周率.单位换算等等. Submarine ...