node和c#语言对比

总述

Node和c#分别作为动态弱类型语言和静态强类型语言中的典型代表,带来了在代码结构,工程组织上的极大区别,两者截然不同的异步模型也可堪一列。面试时也常有人问道,这里总结下这个问题。

类型系统

Node和C#都有相似的基础类型,但是这些类型在编译及运行时行为有很大的差别。

  1. C#在编译过程中会检查类型匹配,类型转换,仅允许安全的隐式转换(int->double),有精度损失的(double->int)转换则必须进行显示的转换,不同类型的转换更是需要api(Convert)支持。

  2. Node 则会按照下图的规则自动转换类型,因而有时会出现些奇怪的情况,也带来了工程上的麻烦之处。 输入图片说明

动态静态

  1. Node 动态语言,变量申明之后,可以随意变换其类型,eg:
 var p=123;
 p="hello";

  1. C# 静态语言,变量一旦申明,就无法改变,编译器会检查这些错误并报告出来。
 var p=123;
 p="hello"; //error

编程范式

  1. C# 面向对象编程,整个语言都是有class构成,通过类之间的互相引用构成复杂的系统。

  2. Node 相对自由的多,即可进行面向对象编程,也可以命令式编程,甚至可以函数式编程,函数为第一公民,参数约束小,我很喜欢这种自由代码能力,然而也要承认这种自由无约束的代码给代码工程带来了很多麻烦之处,现在有很多工具(jslint)等在工程实践中对这个进行限制,

异步模型

  1. c# 基于多线程并发运行,可以进行传统意义上的异步同步控制。

  2. Node 基于Event Pool,大致实现为系统中存在一些队列,运行过程中向队列中添加任务,Js脚本执行完成后,主线程不断循环,循环过程中访问这些队列,取出任务并执行,可以理解为将任务延迟到触发时执行(文件读取,time,网络访问etc),避免了进程block,平衡了多个异步任务,同时Node也利用一些三方库做文件操作,网络访问等,这些库丰富了Node底层操作能力,同时自身是可以多线程的,这也强化了node的IO处理能力。

猜你喜欢

转载自my.oschina.net/hunjixin/blog/1789327