C是TypeScript的最佳替补?
TypeScript非常优秀。它完美地结合了强类型和快速开发,因此非常好用,我在许多情况下都会默认选择这个库。但是,世上没有完美的语言,有些情况下TypeScript并不是最合适的工具: 性能至关重要(例如实时通信、视频游戏) 需要与原生代码(如C/C++或Rust)交互 需要更严格的类型系统(例如金融系统)
对于这些情况,TypeScript开发人员最好还是选用其他语言。C#、Go和Java都是非常好的选择。它们的速度远超 TypeScript,每种语言都有自己的长处。C#能与TypeScript配合得很好,我来解释一下为什么。 TypeScript 就是添加了 C# 的 JavaScript
C#能与TypeScript配合得很好,因为它们看上去就像是同一种语言。两者都是由Anders Hejlsberg设计的,而且从许多方面来看,TypeScript就是添加了C#的JavaScript。它们的特性和语法都很相似,因此在同一个项目中结合使用二者非常容易。更重要的是,C#的语言与TypeScript很相似,因此开发人员阅读和编写代码也非常轻松。
相反,Go是一种完全不同的语言:没有类,没有继承,没有异常,没有包级别的封装(只有类级别的封装),而且语法也完全不同。当然这并不一定是坏事,但开发人员的确需要重新思考并用不同的方式设计代码,因此,同时使用Go和TypeScript是比较困难的。不过,Java与C#很相似,但依然缺乏许多C#和TypeScript都有的功能。 C#和TypeScript的相似之处
也许你已经知道,C#和TypeScript有很多相似之处,如基于C的语法、类、接口、泛型等。下面,我来详细列举一下二者的相似之处: async/await lambda表达式和函数式数组方法 用于处理空的操作符(?,!,??) 解构 命令行界面(CLI)
async/await
首先,C#和JavaScript都使用async/await来处理异步代码。在JavaScript中,异步操作用Promise表示,而应用程序可以await一个异步操作结束。C#中的Promise其实是Task,概念上与Promise完全相同,也有相应的方法。下面的例子演示了两种语言中async/await的用法: async function fetchAndWriteToFile(url: string, filePath:string): Promise { // fetch() returns aPromise const response = awaitfetch(url); const text = awaitresponse.text(); // By the way, we"reusing Deno (https://deno.land) awaitDeno.writeTextFile(filePath, text); return text; } using System.IO; using System.Net.Http; using System.Threading.Tasks; async Task FetchAndWriteToFile(string url, stringfilePath) { // HttpClient.GetAsync()returns a Task var response = await newHttpClient().GetAsync(url); var text = awaitresponse.Content.ReadAsStringAsync(); awaitFile.WriteAllTextAsync(filePath, text); return text; }下面是JavaScript的Promise API与等价的C# Task API:
JavaScript API
等价的C# API
Promise.all()
Task.WaitAll()
Promise.resolve()
Task.FromResult()
Promise.reject()
Task.FromException()
Promise.prototype.then()
Task.ContinueWith()
new Promise()
new TaskCompletionSource() Lambda表达式和函数式数组方法
C#和JavaScript都用熟悉的=>语法(即箭头函数)来表示lambda表达式。下面是TypeScript和C#的比较: const months = ["January", "February", "March", "April"]; const shortMonthNames = months.filter(month => month.length< 6); const monthAbbreviations = months.map(month =>month.substr(0, 3)); const monthStartingWithF = months.find(month => { returnmonth.startsWith("F"); });
TypeScript中使用lambda表达式 using System.Collections.Generic; using System.Linq; var months = new List {"January","February", "March", "April"}; var shortMonthNames = months.Where(month => month.Length <6); var monthAbbreviations = months.Select(month =>month.Substring(0, 3)); var monthStartingWithF = months.Find(month => { returnmonth.StartsWith("F"); });
C#中使用lambda表达式
上述示例演示了C#的System.Linq命名空间中的一些方法,相当于JavaScript的函数式数组方法。下面是JavaScript的数组方法与等价的C# Linq方法:
JavaScript API
等价的C# API
Array.prototype.filter()
Enumerable.Where()
Array.prototype.map()
Enumerable.Select()
Array.prototype.reduce()
Enumerable.Aggregate()
Array.prototype.every()
Enumerable.All()
Array.prototype.find()
List.Find()
Array.prototype.findIndex()
List.FindIndex() 性能:C#很快。C#的ASP.NET Web框架一直在Techempower的评测中名列前茅,而C#的.NET CoreCLR运行时的性能每个主要版本都在提高。C#拥有优良性能的原因之一是,通过使用结构而不是类,应用程序可以最小化甚至完全消除垃圾回收。因此,C#在视频游戏编程中非常流行。 游戏和混合现实:C#是游戏开发最流行的语言之一,像Unity、Godot甚至Unreal游戏引擎都使用了C#。C#在混合现实中也很流行,因为VR和AR应用程序都是用Unity编写的。 由于C#拥有第一方库、工具和文档,因此一些任务非常容易实现,比如,在C#中创建gRPC客户端要比TypeScript方便得多。相反,在Node.js中使用TypeScript时,就必须找出正确的模块和工具的组合,才能正确地生成JavaScript gRPC客户端,以及相应的TypeScript类型。 高级功能:C#有许多其他语言没有的功能,如运算符重载、析构函数等。
如前所述,世上没有完美的语言。在设计语言时总要有所权衡,所以一些语言的速度更快,但使用难度会增加(例如Rust的借出检查)。另一方面,一些语言非常易用,但通常性能的优化难度就会增加(例如JavaScript的动态语言特性)。正因如此,我相信掌握一组相似的语言会非常有用:这些语言分别有各自的长处,但都很相似,而且能互相配合。例如,下面是我选择的一组语言:
TypeScript 最高层的语言,开发速度最快 性能并非最佳,但适用于大多数应用 不太适合与原生代码结合
C# 仍然是高级语言,支持垃圾回收,所以很容易使用,尽管并不如TypeScript那么容易。 从速度和内存占用量来看,其性能都优于 TypeScript 最重要的是,能够与底层很好地结合
C++ 开发难度较大(例如需要手动内存管理),因此开发速度会慢很多 但运行时的性能最佳!而且随处可用,能与许多已有的软件相结合 很像C#,而且标准库很好,但也有许多陷阱(大多数与内存管理有关)。我更希望使用Rust,因为它的内存安全性更好,但我的许多工作都要与已有的C++代码结合,因此使用C++会更容易。
中央空调选购指南各品牌对比(国产篇)前一片文章分析的中央空调日系篇,这次我们来讲讲中央空调国产篇。国产的中央空调起步晚,几大主要品牌基本都是师承日系产品,靠代工或合资积累经验,与我国汽车行业的发展很相似。草蛇灰线,伏
庭院无接触收快递更安全!小默智能可视门铃安装体验前言在外人看来居住在帝都4环别墅区,经常要担心被入户盗窃。实则高端小区出入都有严格的门禁措施和频繁的保安巡查,杜绝了外来无关人员的打扰。可真正烦恼的是,当有人串门或来快递时,完全听
花了近2万元买的折叠手机一个月死机23次厂方过了7天只修不换安先生购买的故障手机。受访者供图安先生花近2万元买了一款华为可折叠手机MATEX2,可是一个月左右竟死机23次。经过官方检测,发现是主板问题,但是华为官方表示,只能更换主板,无法换
1200万人预约,周杰伦演唱会谁赚了?撰文程靓编辑董雨晴5月17日,一则演唱会信息在8090后的朋友圈刷屏了。腾讯音乐娱乐集团(以下简称TME)在财报电话会中透露,将于5月20日和5月21日重映周杰伦摩天轮2013演唱
友商重压之下,淘宝现在的变化比过去10年都多淘宝,大家肯定都不陌生,作为国内最大的电商平台虽然一直在被京东拼多多等平台挑战,但是至今依然把持着最多的流量和交易额,每年的618双十一等购物节的流量主战场也是淘宝。而在时间进入到
vivoS15Pro,让你随时随地轻松地拍,同样可以拍得轻松最近,vivo官方旗下的S系列家族又多了个新成员vivoS15Pro,其作为轻薄的S系列的新成员却是以先锋影像旗舰而出道,但是其实力又远不止影像,可以说vivoS15Pro是一位实
形状各异的机箱(3)本期带来的形状不同机箱是海盗船Graphite380T黑,整体看像一个广场舞音箱泪奔泪奔泪奔,直奔主题这机箱虽然是itx机箱,但是散热做得很不错,盖板这些全是漏洞,更好地进行空气流
天玑8100为什么比天玑9000更值得购买?看看这个全面对比经过多款机型的实际检验,大家都知道骁龙8Gen1有点拉,在一些高负载场景中容易出现发热降频的现象,这时候,很多用户就会去捧天玑9000这颗处理器,不过在老阳的心目中,安卓阵营最值得
超竞界ROG夏季新品发布为用户带来硬核装备5月17日,超竞界ROG夏季新品发布会,ROG再度为用户带来硬核装备性能释放堪比台式机的ROG枪神6Plus超竞版游戏本和全能翻转本旗舰标杆ROG幻16翻转版,同时电竞潮品Slas
满配瑞声科技双X轴马达1亿像素主摄,传音发布王炸级新品5月16日,被誉为非洲机王的传音旗下三大手机品牌之一的Infinix重磅发布NOTE12系列,包含InfinixNOTE12VIPNOTE12ProNOTE125GNOTE12四款
刷手机APP挣钱与做梦差不多现在网络上充斥着大量的广告,需要在手机上刷开看,而且还给那么一丢丢的钱。这件事大家怎么看呢?视频加载中正是有这么多的洗脑广告,才有人给网络广告捧场。其实缪多多的拉人广告早已经给这些