当前位置: 首页 > 科技观察

十一种值得深入理解的物联网编程语言_0

时间:2023-03-18 11:17:57 科技观察

对于物联网项目来说,选择编程语言的重要性从来不在做硬件平台的决定之下。在今天的文章中,我们将一起了解11种编程语言,并仔细看看哪一种最适合您的下一个编程项目。物联网开发项目目前在全球许多企业中如火如荼地进行。新硬件平台的出现使工程师能够比以往更轻松地在物联网应用中构建嵌入式系统。一旦选择了合适的硬件平台,接下来要做的就是为其开发应用软件——不要太兴奋,此时摆在我们面前的选择会越来越具有挑战性。不久前,我们对编程语言的选择还受到硬件平台选项的严格限制。然而,如今大多数现代平台都基于开源标准,支持多种编程语言类型,因此这种灵活性自然会带来更多潜在的选择。而这正是我们今天要解决的问题。那么我们应该如何为特定的物联网项目选择编程语言呢?在某些情况下,我们的潜在选择仍然受到当前硬件平台的限制。但是,在其他情况下,您可以根据具体因素选择语言类型,例如企业开发团队对该语言的熟悉程度,其在业务环境中被整个物联网系统的其他组件使用的能力,或者其代码输出的大小。更小,执行效率更高,或者写得更快等等。我们先从众多选项中选出了11种最优秀的语言,它们都可以很好的完成嵌入式系统的编程任务。它们涵盖了所有领域,从通用的C++和Java到专门用于嵌入式用例的Go和Parasail。每种语言都有自己的优点和局限性。看完今天的文章,也希望大家能在评论中发表自己的看法和偏好的语言选择,帮助我们更好的了解如何构建自己的嵌入式和物联网开发项目。C语言作为最初用于电话交换机编程的语言,C确实是我们在考虑嵌入式系统开发时应该首先考虑的一个合理选择。C语言是软件开发界的通用语言,几乎适用于现有的所有高级嵌入式系统平台。虽然有些平台不能直接支持C语言,但不可否认它还是以基本的形式存在,支持SDK中的专用语言。好消息是,专业的程序员必须对C语言有比较深入的了解——如果做不到这一点,那么公司应该拨出专项资金帮助大家完成学业,这有利于程序员的职业发展和商业运作的前景这将是物有所值的。从现在的角度来看,C语言确实有很多过于古老的因素:它是一种过程语言,而不是面向对象的语言;它没有内置的图形用户界面;它使用编译而不是解释机制。然而,所有这些负面因素使其成为物联网开发项目最强大的候选语言之一。C++自从20世纪80年代初整个编程世界的发展开始向面向对象语言滚动以来,Fortran、Cobol和C等过程式语言似乎注定要被遗忘。目前,Fortran和Cobol已经完全沦为小众语言(虽然Cobol的小众范围相当可观,但其定位局限性仍然非常明显),而C语言继续留在大众视野中得益于BjarneStroustrup的工作————贡献是为C语言开发了面向对象的预处理器,即C++。C++保留了C语言的特点,但同时增加了数据抽象、类、对象等机制。这一切使得C++成为我们在Linux系统环境下编写嵌入式和物联网代码时的热门选择。这门编程语言从诞生至今已经跨越了30多年,但在当今的嵌入式和物联网开发领域仍然具有强大的生命力。#p#JavaC和C++从一开始就被设计成可以直接控制它们运行的??硬件平台。当需要对硬件进行非常细粒度的监视和控制时,这个特性确实很有优势,但这也意味着我们编写的代码需要从非常具体的角度来考虑硬件情况。而且用编程界的行话来说,代码不太适合移植。Java被设计为面向对象的语言,因此具有极好的可移植性:编译器几乎没有硬件依赖性。Java要对特定的硬件进行特定的、精确的控制,需要依赖硬件支持的库,并从中调用通用代码。所有这一切都使Java成为一个非常有吸引力的经济地位:企业只需一次性投资Java代码开发,就可以获得足够的开发成果来运行在许多不同的平台上。Java也是目前在数以千计的计算机科学和电子工程项目中使用的最流行的主流编程语言之一。因此,我们很容易从人才市场上找到能够胜任相关工作的人选。但另一方面,选择Java的问题在于,我们必须保证我们选择的平台能够支持Java(目前只有少数几个强大的平台提供Java支持能力),同时还要保证这些硬件能够支持我们在为了实现特定控制功能所需的库。JavaScript从表面上看,人们很容易误以为JavaScript是Java语言的衍生版本。完全可以理解,但完全错误。两种语言在某种程度上确实有相似或重叠的地方(例如,某些库兼容两者),但两者的开发过程是完全独立的,不共享任何语法或语义。顾名思义,JavaScript是一种脚本语言,广泛用于构建Web前端应用程序。如果您计划在RaspberryPi硬件平台上使用Apache服务器从Arduino传感器网络中提取数据,那么JavaScript绝对是一个不错的起点。自Netscape创立以来,JavaScript迅速发展成为一种功能齐全的语言。但是不要把它当作一个轻量级的嵌入式控制器——它使用的解释结构意味着我们需要承担它的运行成本。也就是说,至少像树莓派这样的系统可以承受JavaScript带来的性能损失。#p#Python是一种在假期空闲时间开发的编程语言,以一个著名喜剧团体的名字命名,从表面上看似乎不太可能成为严肃的开发项目的候选者。然而事实证明,Python已经成为当今Web开发领域最具活力的语言选择之一,其应用范围已经扩展到嵌入式控制和物联网领域。Python在很多方面都具有出色的灵活性。例如,作为一种解释型语言,它可以提交给单个运行时编译器,或者它的代码可以通过一个内置的预编译器来运行,这样就可以分发它紧凑的可执行代码。最让编程团队兴奋的是,Python语言有自己的一大侧重点,即高度重视代码内容的可读性。该语言的设计指南提到了代码可读性和简洁优雅语法的重要性。凡是尝试过解读别人的C语言代码并希望对其进行优化的人,应该都能深刻感受到代码可读性在实际工作中的关键作用。和本文提到的其他语言一样,Python要充当嵌入式语言的前提是其运行的嵌入式平台需要具备一定的计算能力。如果你想开发一个应用程序,可以把数据以某种数据库格式组织起来,然后汇总成表格进行信息控制,那么Python绝对是一个有竞争力的候选编程语言候选者。Go首先要强调一点:这里是“Go”,不是“Go!”两者属于两种完全不同的语言,功能定位也完全不同。Go由谷歌开发,广泛适用于各种处理器和平台。虽然它只是源于C设计理念的众多编程语言中的一种,但在针对特定的嵌入式编程类型时,它拥有大量远优于C语言的功能特性。Go添加了一个显式哈希表类型,该类型对于从各种传感器和执行器收集和发送数据非常有用。Go语言还深度支持使用传感器和设备网络的能力——当然,这也增加了潜在的风险。Go语言可以支持在许多不同的通道上进行并行输入、输出和处理。如果使用得当,此功能可实现协调良好的整个传感器和执行器组合。然而,此功能的风险在于通道可能无法相互感知。如果程序员粗心,一个不协调的系统可能会导致不可预测的行为。从技术角度来看,这显然不是什么好事。#p#RustRust语言是由Mozilla公司开发的。与Mozilla拥有的其他软件类似,Rust是一个开源项目,并且具有非常快的发展速度。Rust语言具有Go的许多特性,但它也解决了Go的一个主要问题。由于Go语言不能在不同的数据结构“通道”之间自动共享信息,因此在最终开发的程序中可能存在所谓的“竞争条件”。说白了,这是一种不可控的状态,由于不同的进程在激烈的冲突中运行,系统无法完成工作。Rust语言包含消除竞争条件的函数,使得构建高度并发的程序更加可靠。同样,Rust语言对运行平台的性能也有一定的要求,但如果你的开发团队要开发涉及大量并发机制的应用,那么Rust和Go都是值得认真考虑的编程语言选择。Parasail如果你对你的物联网应用的并行处理能力有一定的要求,那么Parasail语言也是一个值得尝试的选择。之前我们在介绍Go和Rust语言的时候,已经在编程概念中提到了并发机制。如果您不知道并发和并行的区别(或者您的开发团队无法清楚地解释两者的区别),那么请在开始编码之前仔细搜索相关资料,并确保您在开始之前完全清楚做决定。Parasail是一种编译型面向对象语言,它一直在发展,因此它可以通过类似于Java、Python、C#甚至Ada(很难相信你会在现代语言中看到Ada的名字)的语法进行编程。不要误会我的意思,如果你打算建立一个物联网项目,那么使用Ada编程绝对是一个不错的选择。但是,如果您需要使用具有高度并行性的嵌入式代码,那么Parasail是理想的语言选择。#p#B#今天我们提到的很多语言都是大型系统语言,所以要让它们在嵌入式平台上流畅运行,我们需要对它们进行具体的调整。但是,B#不同。它的设计初衷是一种专注于小事的高效嵌入式控制语言。嵌入式虚拟机(EmbeddedVirtualMachine,简称EVM)让B#语言可以运行在各种不同的平台上,内存占用仅为24k——远低于我们前面提到的其他软件包的运行要求。B#语言在某种程度上类似于C#(如果你或你管辖的技术团队开发过Microsoft.NET项目,你一定对C#很熟悉)。但是,与C#相比,B#去掉了相当多嵌入式项目中不用的特性,增加了对实时控制功能的支持——这在实际使用环境中显然是非常重要的。如果你的项目未来要运行在轻量级的嵌入式平台上,其规模和复杂度都低于RaspberryPi,那么B#绝对是一个值得认真考虑的编程语言选择。汇编语言如果你想严格遵循更传统的设计思想,或者你需要使你的项目尽可能紧凑,那么汇编程序是实现你目标的最佳选择。汇编语言可以构建和封装纯机器代码,从而保证每个人在处理器上都有最理想的执行效率。好消息是它的性能要求保持在最低水平,熟练的maven可以使用汇编语言来实现许多其他编程机制中根本不存在的优化技巧。坏消息是汇编语言编程无法在Internet上发挥作用:您几乎找不到任何实用的工具来帮助您发现开发结果中的各种错误。此外,汇编语言代码和相关的编程技能通常是不可转移的。具体来说,我们可以为一个处理器编写相关代码,但并不意味着我们可以为其他处理器编写具有相同功能的代码。对于硬核程序员和那些寻求极致优化的人来说,汇编语言可以将其大小保持在最低限度,并保证不包含任何其他环境因素。但可以肯定的是,汇编语言绝对不是构建原型解决方案的最佳方式——如果你有更多的空间和处理性能,那么请先使用高级语言,现代语言中的许多优点仍然可以提供帮助。ForthForth是另一种专门为嵌入式系统编程设计和优化的语言。虽然它的主要定位是实现系统级的编程,但是Forth还有一个不可替代的优势:它有点像编程界的俚语。例如,如果一群人以世界语为母语并倾向于用它与我们交流,那么不知道世界语会使我们处于非常尴尬的境地。在编程界,Forth就是这样一个相当于世界语的存在。Forth语言是一种面向堆栈的语言。如果您经常使用那些旧的HP计算器之一(提供RPN操作模式的那种),您肯定会对Forth有所了解。作为一门诞生于1970年代的语言,Forth在具有相关能力的程序员手中可以实现可观的生产力和执行效率的提升——而其他人无法使用甚至无法阅读它编写的结果。如果您的开发团队中有大量的Forth程序员,请享受它带来的完全不同的工作体验。而如果你对Forth一无所知,打算开发一个新的嵌入式项目,并且愿意接受这门语言带来的开发学习曲线,那么不妨试试。但是,如果你身边没有现成的Forth程序员储备,同时又想快速搭建一个原型设计方案,那么请直接选择其他语言。原标题:11种值得了解的物联网编程语言