zoukankan      html  css  js  c++  java
  • 什么样的 Code 更像是 Configuration

    Code is Configuration这篇文章中,说到了我对Ruby on Rails优点的理解,那就是RoR的代码相当于是配置,所以能做到习惯优于配置。有人说,这是动态语言的优点,然后把动态语言和静态语言区分开来讨论各自的优劣,然而我觉得这是不能绝对划分的,语言的动态与静态是一个过渡。

    举个例子,virtual函数的override也算是一种动态,因为程序是运行时查表寻找最顶层的override函数然后执行的,和所有的动态特性一样,这需要牺牲一些效率。然而我们没有把C#称之为动态语言,因为它还是要经过静态编译才能执行,但这不妨碍它拥有部分的动态特性。因此,语言不能简单的话分为动态与静态两类,这之间是可以平滑过渡的。

    既然语言没有动态与静态的绝对划分,那么代码就是配置的概念也应该没有绝对的划分,我们只能讨论怎么样的代码更像是配置。为了说明为什么代码可以说是“更像配置的”,这里就再举一个例子。同样是创建一个复杂的Toolbar,在MFC里面大部分的代码都是用来“实现”这个Toolbar的,虽然MFC已经对Win32API进行了封装,但使用起来还是很像调用API的风格。而在WinForm创建复杂Toolbar的话,大部分代码都是创建控件然后设置属性,这样看起来就更像是“配置”。所以使用WinForm的代码比调用MFC的代码更像是配置。注意我这里说的是“更”,既然存在B比A更好,那就还可能存在C比B更好。比WinForm更好的是什么呢?WPF和C# 3.0,前者能够隐藏更多的实现细节,后者能够让属性设置代码更简洁,让代码看起来更像是在配置控件。

    如果抛开执行效率不说,给你设计一门全新的语言,应该如何做到Code is Configuration呢?这先要看看单纯的Configuration是怎样的,例如XML,抛开背后的实现细节,单纯用XML来写程序,或者说是“配置程序”,你又愿意吗?肯定不愿意,因为虽然它的层次结构好,然而写起来很麻烦,和自然语言的差距太大了。因此,理想中的语言应该尽可能贴近自然语言的情况下,同时也能够尽量隐藏实现细节提供高度抽象的可配置性,而后者通常越是动态语言就越容易做好。说到这两点特性,你是否突然想起一门正走向消亡的语言呢?贴近自然语言一直是BASIC所强调的,而同时又是动态语言的,那就是VBScript了。然而最大量使用VBScript的应该就是ASP了,而ASP正在逐步被ASP.NET取代。或许将来有一天,VB.NET能够重新加入动态语言的特性,配合非编译的ASP.NET,能够打造一个好像ASP那样适合RAD的ASP.NET。

  • 相关阅读:
    值得收藏的146条经典民间偏方[转]
    删除暴风文件夹内的stormliv.exe
    【转】VLAN技术浅谈
    [转载]双击.dsw文件时另开VC6.0,而不会关掉原来已打开的项目的解决办法(转载)
    JVM系列1:Java内存区域
    并发系列3:Lock锁以及核心类AQS
    并发系列1:并发基础知识
    JVM系列2:垃圾收集器与内存分配策略
    JVM系列3:类加载机制
    源码解析之AQS源码解析
  • 原文地址:https://www.cnblogs.com/cathsfz/p/673775.html
Copyright © 2011-2022 走看看