微软真的挖了很多坑,可能就像任正非说的,在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 的坑的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  2. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  3. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  4. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  5. 踩石行动:ViewPager无限轮播的坑

    2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...

  6. 为C# as 类型转换及Assembly.LoadFrom埋坑!

    背景: 不久前,我发布了一个调试工具:发布:.NET开发人员必备的可视化调试工具(你值的拥有) 效果是这样的: 之后,有小部分用户反映,工具用不了(没反应或有异常)~~~ 然后,建议小部分用户换个电脑 ...

  7. 首个threejs项目-前端填坑指南

    第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...

  8. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  9. 关于微软HttpClient使用,避免踩坑

    最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...

  10. iOS审核这些坑,腾讯游戏也踩过

    作者:Jamie,专项技术测试工程师,在iOS预审和ASO优化领域从事专项测试相关工作,为腾讯游戏近100个产品提供专项服务. WeTest 导读 在App上架苹果应用商店的过程中,相信大多数iOS开 ...

随机推荐

  1. 多款国产操作系统安装数据库干货文档汇总(含Oracle/MySQL/国产数据库等)

    随着国产化的逐步推进,越来越多的企业选择将数据库安装在国产操作系统上.为帮助大家了解国产操作系统上的数据库成功搭建案例与搭建方式,本文整理了墨天轮数据技术社区上用户分享的实操文档,涵盖银河麒麟.中标麒 ...

  2. C#WebApi 对数据进行缓存加快前请求数据的速度

    using ClassLibrary1; using ClassLibrary2; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions ...

  3. 011 Python 的打印(花式变色打印)和注释(为什么加个#号就能注释)

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Datatime:2022/7/18 21:29 # Filename:011 Python 的打印和注释 ...

  4. go frame资源管理打包失败

    最近有个需求,需要使用golang做一个小工具,然后我就想既然是小工具,那就把前后端放在一个二进制文件中.恰好使用的项目架构是go frame,它已经提供了这样的能力,但是没想到碰到了一鼻子灰... ...

  5. druid连接池报错:sql injection violation, multi-statement not allow

    druid连接池报错:sql injection violation, multi-statement not allow 需要配置druid的 multi-statement-allow属性为tru ...

  6. appium环境搭建及命令行启动sdk模拟器-附踩坑以及解决过程

    安装教程这里就不阐述了,网上一大堆教程,下载完成后安装然后配置对应的环境变量即可 android sdk及java home配置: path配置: %ANDROID_HOME%\platform-to ...

  7. 操作系统_MPI程序设计

    一.实验环境搭建 本次MPI集群环境是在电脑中安装mpi的sdk和应用程序后在visual studio 2022 上配置MPI环境. VC++目录--->包含目录--->添加MPI的in ...

  8. PHP的json浮点精度难题

    前言 之前开发的接口需要用到json加签,有一次对接JAVA时,签名怎么都过不了,仔细对比了字符串,发现是PHP进行json_encode时,会将浮点型所有无意义的0给去掉(echo和var_dump ...

  9. CSS动画(毛玻璃按钮)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa4ofJ9W4ibgD5asQcBesp1f1CXVnrQmicnzqDPskBNEQC4ia0 ...

  10. reg文件书写规则

    reg文件可以很方便地用来修改注册表,这里记录一下reg文件的书写规则. 注释 分号(;)后面的内容是注释,导入时会忽略这些内容. 文件基本格式 首行写: Windows Registry Edito ...