前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 node和c#语言对比

原 node和c#语言对比

作者头像
魂祭心
发布2018-05-17 16:06:51
1.1K0
发布2018-05-17 16:06:51
举报
文章被收录于专栏:魂祭心魂祭心

总述

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

类型系统

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

  1. C#在编译过程中会检查类型匹配,类型转换,仅允许安全的隐式转换(int->double),有精度损失的(double->int)转换则必须进行显示的转换,不同类型的转换更是需要api(Convert)支持。
  2. Node 则会按照下图的规则自动转换类型,因而有时会出现些奇怪的情况,也带来了工程上的麻烦之处。
输入图片说明
输入图片说明

动态静态

  1. Node 动态语言,变量申明之后,可以随意变换其类型,eg:
代码语言:javascript
复制
 var p=123;
 p="hello";
  1. C# 静态语言,变量一旦申明,就无法改变,编译器会检查这些错误并报告出来。
代码语言:javascript
复制
 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处理能力。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总述
  • 类型系统
  • 动态静态
  • 编程范式
  • 异步模型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档