日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

从数据亲和力角度看语言

Home Forums 《冒号课堂》讨论区 从数据亲和力角度看语言

  • This topic is empty.
Viewing 2 reply threads
  • Author
    Posts
    • #1141
      Todd
      Member

      最近我对程序设计语言又有了一些新的体会,大致说来是从数据处理的角度来看待语言的差异。我抽象出了一个概念-“数据亲和力(Data Affinity)”,它指的是语言的数据模型与某种数据形式之间的匹配程度。数据亲和力也是决定语言适用于哪些应用场合的重要因素。比如:

      1. C语言的struct(语言的数据模型)和字节块(数据形式)之间可以建立起直接的映射关系,所以C语言具有较高的对字节块形式数据的亲和力,适用于需要进行直接内存操作的底层应用;

      2. Javascript的对象(语言的数据模型)和JSON数据(数据形式)之间可以非常方便的相互转换,所以Javascript具有较高的对JSON数据的亲和力,适用于在分布式系统之间用JSON进行通信;

      3. Shell对文本流形式的数据和文件具有较高的数据亲和力,适用于文本处理和文件操作应用.

      我发现数据亲和力和语言的范式没有必然的联系,比如:一门语言是面向过程的并不意味着它拥有对字节块形式数据的亲和力;一门语言是OOP的也不意味着它有对JSON数据的亲和力。根本上讲,数据亲和力取决于语言的数据模型,但也可能会和语言的强/弱类型、动/静类型有关系。C语言拥有字节块亲和力用到了弱类型特性;Javascript拥有JSON亲和力的关键是其动态类型。

      除了上面的例子,像SQL这样的DSL更是专门针对一种数据模型而量身定做的,所以DSL通常也会表现出某种数据亲和力。

    • #1371
      hui
      Keymaster

      数据的亲和力是个很好的视角。它与语言的范式关系不大,主要与语言的设计目的有关。C是系统语言,自然需要方便而高效地对内存数据进行操作。Javascript是网页操作语言,由于远离系统,同时对开发者的要求较为宽松,对数据类型的严格性要求较低,故被设计为动态语言和动态类型语言。JSON本就是为它设计的,二者的相容性自然高。Shell(包括perl、python等)的用途决定了它是一个粘合语言,必然要求对文本形式的数据的强亲和力。Lisp号称列表处理语言,自然对list类型的数据亲和力高。

      数据亲和力是语言的一个重要指标,因为亲和力越强编程效率越高。在这方面,早期的语言通常不如后来的语言。比如C、C++对unicode数据的亲和力就不如后来的Java和C#,Perl、Python等早期版本对unicode的亲和力就不如后期版本。又如,早期语言对XML、HTML数据的处理需要通过库,而Groovy等语言则已经内生支持它们了(C#、Java等语言也有此趋势)。再如,Perl、Ruby、Python、PHP等“敏捷”语言对list、map等常用类型的亲和力也比一般语言要强。

    • #1372
      Todd
      Member

      C/C++对Unicode的确很不友好,这个在应用层开发中是个大问题。

Viewing 2 reply threads
  • You must be logged in to reply to this topic.
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)