tag 标签: 编程语言

相关博文
  • 热度 3
    2022-5-28 14:25
    1203 次阅读|
    0 个评论
    写在前面 它们不厌其烦地执行人的指令;它们收集世间万物的知识,供人顷刻之间随心调取;它们是现代社 会 的 中流砥柱,但其存在却往往备受忽 视。 它们就是计算机,是人类迄今为止最伟大的发明成就,是登峰造极、至高无上的终极工 具 。 计算机科学的问 世,推动了人类历史上最非比寻常的社会变革之一。 而 = = 编程语言 == 作为计算机的灵魂,存在感却远远高于计算机,它就像一个纽带把我们和计算机深深的 联系在了一起 。 编程语言 的 发展更是和计算机的演变有着密不可分的关系。 不 知道大家有没有好奇过,世界上第一门编程语言是什么? 今天就由我带领大家穿越到这一切的起点,去看一看计算机和编程语言的爱恨情仇 。 正文 图灵机 不 同的的人面对计算机有着不同的给关注点,有人觉得计算机的设计很巧妙,有人觉得计算机的结构布 置很酷,有人觉得计算机的界面很漂亮 … … 但计算机的美妙之处并 不在于其闪烁的灯光、旋转的磁盘、成排的芯片和电线,而在于, 这些部件的背 后隐藏着一个优雅而简单的想法。这个想法同晶体管、操作系统、网络和文字处理器毫无关联,也不 可 能 有 任何关联,因为它的诞生时间比这些设备都早。 图灵的相关生平,这里不多做赘述,这里我们只关注他的 “ 可计算性理论 ” 。 还 记得当时初学冯诺依曼结构时,我们班里的同学还就冯诺依曼机与图灵机谁的贡献最大,而吵的不可 开交,最后也是谁也没说服谁 。 冯诺依曼机大家都不陌生,可以简单地理解成冯诺依曼机更侧重于硬件的实 现 。 图灵 机 偏重的抽象模型是 “ 可计算 ” 和 “ 不可计算 ” 这个计算机的边界 1. 世界上有很 多问题,其中只有一小部分是数学问题; 2. 在 数 学问题中,只有一小部分是有解的; 3. 在 有解的问题中,只有一部分是理想状态的图灵机可以解决的; 4. 在后一 类的问题中,又只有一部分是今天实际的计算机可以解决的。 这 个时候可能有人就要说了,这和今天要讲的世界上第一个编程语言有什么关系?你这不是上来就先给 计算机定下了一个边界了吗 ? 是的,先展示这段的目的就是为了告诉大家: 不要迷信计算机,不要迷信我们的编程语言。 不 管是在人工智能和深度学习大行其道的今天,有些问题也是无法用计算机去解决的,我们要始终怀着 一种敬畏之心来面对这个世界。 打孔卡片 这一 切都要从打孔卡片开始说起。 美国宪法中要求, 每 10 年就得进行一次人口普查。到了 19 世纪末期,人口增长的实在是太频繁了,以至 于 18 8 0 的人口普查历时 8 年才最终完成,当时还都是通过纸和笔来完成的。 1890 年 , Herman Hollerith 被授命去解决这一问题,他最终使用了穿孔卡来存储数据,并用一台制表机 ( tabulating machine )来进行统计和排序。 在 2 0 世纪的大部分时间里,穿孔卡在数据处理行业得到了广泛的应用, 其中专业且日益复杂的单元记 录机器被组织成半自动数据处理系统,使用穿孔卡进行数据输入、输出和存储 。 1896 年, Hollerith 成立了制表机器公司,开始了自己的事业。他把自己的设备和卡片出售给大的保 险公 司 ,以及包括英国,意大利,德国,俄罗斯,澳大利亚,加拿大,法国,挪威,波多黎各,菲律宾等国 在内 的多国政府。 他的公司后来跟别 的 公司进行了合并,并在 1924 年最终成为了国际商业机器公司。没错,它就是 IBM 。 这就是我们的第一站:打孔机和打孔卡片 。 有 人可能会有疑问,这打孔卡片也算是一门编程语言吗?这就要看大家怎么去定义编程语言了。 在 我看来,只要其涉及数据处理与一定的计算规则都可以称为一种语言。就像我们常说的: 程 序 = 数据 + 算法 哪怕这 些数据只是最常见的自然数,哪怕这些算法只是加减乘除。 机器代码 打孔卡片靠其出 色的能力盛行了一段时间,但你能想想那硕大的机器和成吨种的卡片吗? 幸运的是这些都只是暂时的,而拯救我们的就是电子学与计算机科学的结合,让我们脱离了笨重的机械 式计 算机。 晶体管的出现更是让 “ 开 / 关 ” 动作变 得简洁又优雅。 而 我们这次的主角 —— 机器代码,就是这一开一关动作的化身: 0 和 1 。 机 器 代码之所以被称为机器代码,就是因为这种代码是可以直接被机器(计算机)所读取。 用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统令的集 合 。 大 家 可以随便打开一个自己用任何一种高级语言编译好的二进制文件( . bin )来查看这些机器码到底长 什么 样子。 最右边就是我们的机器码,但为什么不是 01 组合,怎么还有其他数字和字母呢 ? 这是因为二进制表示的数字实在是太小了,所以大多采用的是十六进制来表示 。 汇编语言 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义 。 手编 程序时, == 程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每 步所使用的工作单元 处在何种状态 == 。这是一件十分繁琐的工作。 编写程序花费的时间往往是实际运行时间的几十倍或几百倍,而且, == 编出的程序全是些 0 和 1 的指令代 码 ,直观性差,还容易出错 == 。 那么有没有一种方式, 让我们能够更容易的记住这些机器指令? 汇编语言闪亮 登场。 汇编语言的主体是汇编 指 令。汇编指令和机器指令的差别在于指令的表示方法上, 汇编指令是机器指令 便于记忆的书写格式。说 白了,汇编语言就是 == 助记符 == ( Mnemonics )。 可能有人会问,我们用 汇 编语言编写程序,可是计算机只认识机器指令,那该怎么办? 这时候就需要一 个能将汇编语言转换成机器指令的工具,我们称其为编译器。程序员用汇编语言写出源代码,再用 汇 编 编 译器将其编译为机器码,最后由计算机执行。 再者,汇编语言指令是机器指令的一种符号表示,而不同类型的 CPU 有不同的机器指令系统,也就有 不 同的汇编 语言,所以, == 汇编语言程序与机器有着密切的关系 == 。 所以,除了同系列、不同型号 CPU 之间的汇编语言程序有一定程度的可移植性之外,其它不同类型 (如:小型机和微机等) CPU 之间的汇编语言程序是无法移植的,也就是说, == 汇编语言程序的通用性 和可 移 植性要比高级语言程序低 == 。(因为高级语言可以再不同类型的计算机上用不同的编译器翻译成 机 器语言) Fortran Fortran 语 言 最初是由 IBM 公司在 50 年代开发的。 当 时,创建语言的目的是专门解决一组特定的问题: Fortran 语言的目的是科学处理。 它仍然是在高性能计算领域最流行的语言之一,而且作为基准,用于世界最快的超级计算机程序的 语 言 的 排名。 Fortran 语言建立使 用 星号乘法,这是今天仍在使用的所有语言中的约定。 这是它的外 观: CO BOL COBOL ( Common Business - Oriented Language ) 被 设计用于商业用途。这是企图使编程语言更类似于英语,让程序员和管理人员可以读取它。 它的设计者有 Grace Hopper (发现 “ Bug ” 的人),以及发明了类似英语的数据处理语言 FLOW - MATIC 的人,也是 最 合适,帮助创建一个看起来类似英文通用商业语言的人选。 这 是一个 COBOL 的 Hello World 程序 : IDENTI FICATION DIVISION . PROGRA M - ID . HELLO - WORLD . ENVIRO NMENT DIVISION . DATA D IVISION . PROCED URE DIVISION . MAIN . DI SPLAY ' Hello , world .' . ST OP RUN . ALGOL 60 ( ALGOrithmic Language 1960) 是一个委员 会 推动的,非常好,有影响力的语言 , 发布于 1960 年。 它从来没有得到普及, 但 它推出了许多重要概念,包括摆脱 GOTO 。在行与行之间跳来跳去行的语言, 如 BASIC ,难以遵循程序的流程,导致编写 程序容易出错。 ALGOL 60 引入结构化程序设计和模块:它使用 BEGIN 和 END (因为大括号是不可用),感谢 ALGOL 60 现在我们有了代码块,而不是 GOTO 。 ALGOL 也不希望太过专业,从而适合良好的科学和业务处理 下面是 它的样子: procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; comment The absolute greatest element of the matrix a, of size n by m is transferred to y, and the subscripts of this element to i and k; begin integer p, q; y := 0; i := k := 1; for p:=1 step 1 until n do for q:=1 step 1 until m do y then begin y := abs(a ); i := p; k := q end end Absmax P ascal Pascal 是在 1968 - 1969 年设计 , 由 Niklaus Wirth 出版于 1970 年,其灵感来自 ALGOL 它最初是非常流行的,虽然最初设计为教学工具,很长一段时间很多人用它做通用编程。 但是,它 不是模块化不够,有一些使得编程难的设计挑战。 比 如有一个片段 : while a b do WriteLn ( ' Waiting ' ) ; if a b then WriteLn ( ' Condition met ' ) { no semicolon allowed ! } else WriteLn ( ' Condition not met ' ); for i : = 1 to 10 do { no semicolon for single statements allowed ! } WriteLn ( ' Iteration : ' , i ); r epeat a : = a + 1 until a = 10 ; case i of 0 : Write ( ' zero ' ); 1 : Write ( ' one ' ); 2 : Write ( ' two ' ); 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 : Write ( '?' ) end ; B 在贝尔实验室开发于 1969 年 , 它的灵感来自于 Fortran 和 BCPL 。 还 记得有个同学开玩笑说,既然有 C 语言,那肯定会有 B 语言和 A 语言,没想到还真有 B 语言(其实还有个 E 语 言就不说了)。 B 引入 了 += 操作符 ( 尽管写成 =+), 以及自增 / 自减操作符 ( ++ 和 – ) printn ( n , b ) { extrn putchar ; auto a ; if ( a = n / b ) /* assignment , not test for equality * / printn ( a , b ); /* recursive * / putchar ( n % b + '0' ); } C 语言 C 诞生于 B 加上从 Pascal 加入一些好的想法。它是在贝尔实验室(再次)的 Dennis Ritchie 在 1969 年 和 1973 年之间开发。 相比较于机器语言与汇编语言来说, C 已经拥有 == 更强的表达能力,可方便地表示数据的运 算和程序的 控制结构 ,能更好的描述各种算法,而且容易学习掌握 == 。 但 高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。 关于编程语言就说到这里,如果把每一门语言都说一遍的话,可能几天几夜都说不完 。 感兴趣的同学可以去维基百科上看一 看 第一个编译器是什么语言编译的?自举 除了第 一个编程语言外,相信大家肯定还有一个疑问: 世界上第一个编译器使用什么语言来编译的? 这 就 类似于那个世界上是先有鸡还是先有蛋的问题。 其实在编译原理中,有一个概念:自 举 。 == 编程语言是自举的 == ,指的是说,我们能用自己写出来的程序编译自己。但是自举,并 不要求这门语 言的 第一个编译器就是用自己写的。 比 如,这里说到的 Go ,先是有了 Go 语言,我们通过 C ++ 写了编译器 A 。然后呢,我们就可以用这个 编译器 A ,来编译 Go 语言的程序。接 着,我们再用 Go 语言写一个编译器程序 B ,然后用 A 去编译 B , 就得到了 Go 语言写好的编译器的可执行文件了。这个之后,我们就可以一直用 B 来编译未来的 Go 语 言程序,这 也就实现了所谓的自举了。 更详细的关于鸡蛋 问题,可以直接看 Wikipedia 上这个链接,里面讲了多种这个问题的解决方案。 https://en.wikipedia.org/wiki/Bootstrapping_(compilers) 写在最后 在上文 中 ,我们大致了解了计算机和编程语言的发展史。 如果从严谨一点的角度去考虑的 话, Fortran 语言应该是世界上第一门高级编程语言。 编程语言千千 万,这些语言之间没有高低贵贱,更不存在什么歧视链, 有的只有不同的应用环境适合哪 一种编程语言。 最后 祝愿大家不管使用哪一种语言都能 bug 少少 !!! ( 室友和同门都申请离校回家了,我还悲惨的在学校呆 着,可快点解封吧 ~ 我要出去吃烧烤,吃火锅! ) 参 考 文献: 《 计 算机 : 一部历史》彼得 · 本特利 http://foorious.com/articles/brief-history-of-programming-languages/ https://segmentfault.com/a/1190000004303544 https://time.geekbang.org/column/article/91793 https://www.cnblogs.com/ysocean/p/7580162.html
  • 热度 17
    2015-11-26 14:14
    1329 次阅读|
    0 个评论
    我从学习编程开始已经累计超过二十年了。截至现在,我开办过的编程入门课程的数量也有半打之多。我在教授编程上花费的所有时间,总数大约是一千多个小时。以下是我的一些肺腑之言,至少给我的学生反复唠叨过不下一次。注意,这些内容没有前后顺序之分。 欢迎来到编程世界 编程的确很难。 不管你有多么擅长编程,你的学习能力和解决问题的经验始终是拖慢你前进脚步的唯一因素。等你更加擅长编程这门技艺的时候,你就会对此更加确信。编程还有一个有趣的特点 - 你永远都不会对其产生厌倦感。如果你曾经有过,你一定在什么地方做错了,你也许需要将已经重新写过的代码再进一步优化或者抽象一下。 编程可能是你做过的所有事情当中,最为令人困扰的事情之一。一般情况下,编程都会经历尝试解决问题、陷入困难、再次尝试、后退一步、灵光乍现并且最终让程序跑了起来这些步骤。感受困扰是很正常的事情,这种现象不可能完全消失。(当你的编程技艺更加娴熟之后,你只需解决更难的问题,问题甚至可以不重样)。你应该学会适应这种令人困扰的感觉,因为这种困扰会让解决问题变得越来越有满足感。 无论你的问题有多么令人困扰,一定有一个现成的解决方案。在你的编程能力提高之后,你将会有更多的自信和更好的解决办法。这不仅能让这种困扰的感觉得以改善,而且还会促使你进一步去解决难度更大的问题。(如果这些事情太简单了,也就失去了趣味性!) 当我们还是小孩子时,我们几乎在每一件事情上的表现都不尽人意,但是我们对此毫不在乎。作为成年人,我们把一件事情彻底搞糟的机会并不多。请拥抱这种感觉吧 - 这是一件很正常的事情,你正在从事着很多人压根没有能力从事的工作。 你应该知道学习编程的第一个小时与第十个小时的情景和状况完全不同,而且也与第一百个小时有很大差异。这个家伙在他的博客上声称,在完成一万小时训练之后,他的高尔夫球球技已经发生了质的飞跃。编程实际上也是如此。 你所具有的魔力远比你自己想象的强大得多。编程就像一种魔法。好好想一想 - 我们为了编写程序,努力学习和钻研那些传说中的圣书(计算机 + 互联网)。魔法师可以教授其他魔法师如何创造他们各自的魔法技巧。我们不仅可以同时进行上述这些活动,还能够创造人们喜闻乐见的奇妙设备或装置。(如互联网和移动电话)。如果缺少了我们这种技能,这些创新根本无法实现。 善于使用互联网。你在学习编程的第一年里碰到的每一个问题,在你之前有很多很多人已经体验过了。所有问题的答案都记录在互联网上。你搜索查询的水平越高,快乐时光就会越快来临。忠告:如果你不理解这些代码的功能和原理,请不要随意使用它们。 作为程序员,当我们编程时,我们会随身携带一个工具箱。 这套工具就是我们的所有技能的一种体现。首先你需要学习的东西(变量、循环等等)就像是螺丝刀和榔头,你会在每天的工作中用到它们。当你的阅历变得更加丰富时,你开始学习如何使用更加高级的工具,尽管这些工具的用处可能并不广泛,但是在解决某些特定问题上非常顺手。(例如,树状数据结构、通配符、Valgrind、各类代码调试器等等)。编程所涉及的绝大多数领域(游戏设计、Web 开发、数据库应用)也都有它们各自的领域问题和解决方案。结果是,你解决过的任何问题,当再次碰到时,将会非常容易解决。 每个程序都是由代码组成的。 你可以阅读、修改和鼓捣这些代码,甚至绝大多数其由他人编写的程序。只要涉及计算机方面的内容,学习资源到处都是。 掌握和精通编程的最好方法就是编写很多很多的代码。你需要做的事情就是持续不断地构建程序。作为一名老师,我的最大职责就是尽我所能扶你上马。你的知识和技能一旦超过一个临界值,我坦白地告诉你,只要给你足够的时间,任何问题你都能自行解决。尽管放心大胆地坚持下去。就像一位智者所说,『只要功夫深,铁杵磨成针』。 阅读很多很多代码。 总有一些程序员比我们都要『聪明』。他们已经编写了很多代码和程序,如果你愿意的话,你可以随时阅读它们。或许它们现在就存放在 Github 上。 据说,在你学习编程的过程中,掌握第二门语言最为艰难。 第一门编程语言帮助你形成了最基本的编程思维模式(我可是认真的哦!),但是,当你开始学习第二门编程语言的时候,你就必须重新审视这些基本原则和概念。(如果哪门编程语言不能让你颇费些周章的话,那它或许不值得专门学习)。在第二门语言之后,你在学习新语言方面,将会变得非常娴熟。我自己就能在一周之内快速掌握任何一门命令式语言。 没有最好的编程语言。 有些编程语言及工具可能在一些特定问题上优于其它编程语言。当你学习不同的编程语言时,不要总是试图迁移你已有的编程思维模式。相反,你应该在新的环境下,学习如何按照新习惯或者新模式进行思考与设计。 保持童心,多做傻事。 编程本身就像一套巨大的乐高玩具,充满了各种各样亟待解决的有趣问题。请在让这个玩具变得更加有趣这件事情上多花些心思。这项任务比其他任何一门学科的作业都要有趣许多。 最好的程序员喜欢在工作之余开展一些额外的编程活动。如果你真的擅长编程,你可能会发现你自己从来就没有离开过『工作』。 当你在编程过程中陷入某种困境时,请在纸张上编写你的程序。我没有开玩笑。这个办法非常神奇。在编程竞赛中,这个方法几乎就是标配。(我之所以认为这个办法有效,是因为当你无需考虑语法时,你会有更多脑力用于解决实际的问题。) 我相信我时常还会冒出一些其它方面的建议 - 但是正如上述绝大多数建议那样,如果它们真的非常重要,你一定会积极开动脑筋,自己把它们想出来。 祝你编程愉快 :D
  • 热度 19
    2015-9-2 15:37
    1219 次阅读|
    1 个评论
    机器人的开发语言一般为C、C++、C++ Builder、VB、VC等语言,主要取决于执行机构(伺服系统)的开发语言;而机器人编程分为示教、动作级机器人编程语言、任务级编程语言三个级别;机器人编程语言分为专用操作语言(如VAL语言、AL语言、SLIM语言等)、应用已有计算机语言的机器人程序库(如Pascal语言、JARS语言、AR-BASIC语言等)、应用新型通用语言的机器人程序库(如RAPID语言、AML语言KAREL语言等)三种类型。目前主要应用的是SLIM语言。 机器人编程语言(一) 伴随着机器人的发展,机器人语言也得到发展和完善。机器人语言已成为机器人技术的一个重要部分。机器人的功能除了依靠机器人硬件的支持外,相当一部分依赖机器人语言来完成。早期的机器人由于功能单一,动作简单,可采用固定程序或示教方式来控制机器人的运动。随着机器人作业动作的多样化和作业环境的复杂化,依靠固定的程序或示教方式已满足不了要求,必须依靠能适应作业和环境随时变化的机器人语言编程来完成机器人的工作。 自机器人出现以来,美国、日本等机器人的原创国也同时开始进行机器人语言的研究。美国斯坦福大学于1973年研制出世界上第一种机器人语言——WAVE语言。WAVE是一种机器人动作语言,即语言功能以描述机器人的动作为主,兼以力和接触的控制,还能配合视觉传感器进行机器人的手、眼协调控制。 在WAVE语言的基础上,1974年斯坦福大学人工智能实验室又开发出一种新的语言,称为AL语言。这种语言与高级计算机语言ALGOL结构相似,是一种编译形式的语言,带有一个指令编译器,能在实时机上控制,用户编写好的机器人语言源程序经编译器编译后对机器人进行任务分配和作业命令控制。AL语言不仅能描述手爪的动作,而且可以记忆作业环境和该环境内物体和物体之间的相对位置,实现多台机器人的协调控制。 美国IBM公司也一直致力于机器人语言的研究,取得了不少成果。1975年,IBM公司研制出ML语言,主要用于机器人的装配作业。随后该公司又研制出另一种语言——AUTOPASS语言,这是一种用于装配的更高级语言,它可以对几何模型类任务进行半自动编程。 美国的Unimation公司于1979年推出了VAL语言。它是在BASIC语言基础上扩展的一种机器人语言,因此具有BASIC的内核与结构,编程简单,语句简练。VAL语言成功地用于PUMA和UNIMATE型机器人。1984年,Unimation公司又推出了在VAL基础上改进的机器人语言——VAL Ⅱ语言。VALⅡ语言除了含有VAL语言的全部功能外,还增加了对传感器信息的读取,使得可以利用传感器信息进行运动控制。 20世纪80年代初,美国Automatix公司开发了RAIL语言,该语言可以利用传感器的信息进行零件作业的检测。同时,麦道公司研制了MCL语言,这是一种在数控自动编程语言——APT语言的基础上发展起来的一种机器人语言。MCL特别适用于由数控机床、机器人等组成的柔性加工单元的编程。 机器人语言品种繁多,而且新的语言层出不穷。这是因为机器人的功能不断拓展,需要新的语言来配合其工作。另一方面,机器人语言多是针对某种类型的具体机器人而开发的,所以机器人语言的通用性很差,几乎一种新的机器人问世,就有一种新的机器人语言与之配套。 机器人语言可以按照其作业描述水平的程度分为动作级编程语言、对象级编程语言和任务级编程语言三类。 动作级编程语言 动作级编程语言是最低一级的机器人语言。它以机器人的运动描述为主,通常一条指令对应机器人的一个动作,表示从机器人的一个位姿运动到另一个位姿。动作级编程语言的优点是比较简单,编程容易。其缺点是功能有限,无法进行繁复的数学运算,不接受浮点数和字符串,子程序不含有自变量;不能接受复杂的传感器信息,只能接受传感器开关信息;与计算机的通信能力很差。典型的动作级编程语言为VAL语言,如AVL语言语句“MOVE TO (destination)”的含义为机器人从当前位姿运动到目的位姿。 动作级编程语言编程时分为关节级编程和末端执行器级编程两种。 关节级编程 关节级编程是以机器人的关节为对象,编程时给出机器人一系列各关节位置的时间序列,在关节坐标系中进行的一种编程方法。对于直角坐标型机器人和圆柱坐标型机器人,由于直角关节和圆柱关节的表示比较简单,这种方法编程较为适用;而对具有回转关节的关节型机器人,由于关节位置的时间序列表示困难,即使一个简单的动作也要经过许多复杂的运算,故这一方法并不适用。 关节级编程可以通过简单的编程指令来实现,也可以通过示教盒示教和键入示教实现。 末端执行器级编程 末端执行器级编程在机器人作业空间的直角坐标系中进行。在此直角坐标系中给出机器人末端执行器一系列位姿组成位姿的时间序列,连同其他一些辅助功能如力觉、触觉、视觉等的时间序列,同时确定作业量、作业工具等,协调地进行机器人动作的控制。 这种编程方法允许有简单的条件分支,有感知功能,可以选择和设定工具,有时还有并行功能,数据实时处理能力强。 机器人编程语言(二) 对象级编程语言 所谓对象即作业及作业物体本身。对象级编程语言是比动作级编程语言高一级的编程语言,它不需要描述机器人手爪的运动,只要由编程人员用程序的形式给出作业本身顺序过程的描述和环境模型的描述,即描述操作物与操作物之间的关系。通过编译程序机器人即能知道如何动作。 这类语言典型的例子有AML及AUTOPASS等语言,其特点为: (1) 具有动作级编程语言的全部动作功能。 (2) 有较强的感知能力,能处理复杂的传感器信息,可以利用传感器信息来修改、更新环境的描述和模型,也可以利用传感器信息进行控制、测试和监督。 (3) 具有良好的开放性,语言系统提供了开发平台,用户可以根据需要增加指令,扩展语言功能。 (4) 数字计算和数据处理能力强,可以处理浮点数,能与计算机进行即时通信。 对象级编程语言用接近自然语言的方法描述对象的变化。对象级编程语言的运算功能、作业对象的位姿时序、作业量、作业对象承受的力和力矩等都可以以表达式的形式出现。系统中机器人尺寸参数、作业对象及工具等参数一般以知识库和数据库的形式存在,系统编译程序时获取这些信息后对机器人动作过程进行仿真,再进行实现作业对象合适的位姿,获取传感器信息并处理,回避障碍以及与其他设备通信等工作。 任务级编程语言 任务级编程语言是比前两类更高级的一种语言,也是最理想的机器人高级语言。这类语言不需要用机器人的动作来描述作业任务,也不需要描述机器人对象物的中间状态过程,只需要按照某种规则描述机器人对象物的初始状态和最终目标状态,机器人语言系统即可利用已有的环境信息和知识库、数据库自动进行推理、计算,从而自动生成机器人详细的动作、顺序和数据。例如,一装配机器人欲完成某一螺钉的装配,螺钉的初始位置和装配后的目标位置已知,当发出抓取螺钉的命令时,语言系统从初始位置到目标位置之间寻找路径,在复杂的作业环境中找出一条不会与周围障碍物产生碰撞的合适路径,在初始位置处选择恰当的姿态抓取螺钉,沿此路径运动到目标位置。在此过程中,作业中间状态作业方案的设计、工序的选择、动作的前后安排等一系列问题都由计算机自动完成。 任务级编程语言的结构十分复杂,需要人工智能的理论基础和大型知识库、数据库的支持,目前还不是十分完善,是一种理想状态下的语言,有待于进一步的研究。但可以相信,随着人工智能技术及数据库技术的不断发展,任务级编程语言必将取代其他语言而成为机器人语言的主流,使得机器人的编程应用变得十分简单。 一般用户接触到的语言都是机器人公司自己开发的针对用户的语言平台,通俗易懂,在这一层次,每一个机器人公司都有自己语法规则和语言形式,这些都不重要,因为这层是给用户示教编程使用的。在这个语言平台之后是一种基于硬件相关的高级语言平台,如C语言、C++语言、基于IEC61131标准语言等,这些语言是机器人公司做机器人系统开发时所使用的语言平台,这一层次的语言平台可以编写翻译解释程序,针对用户示教的语言平台编写的程序进行翻译解释成该层语言所能理解的指令,该层语言平台主要进行运动学和控制方面的编程,再底层就是硬件语言,如基于Intel硬件的汇编指令等。 商用机器人公司提供给用户的编程接口一般都是自己开发的简单的示教编程语言系统,如KUKA、ABB等,机器人控制系统提供商提供给用户的一般是第二层语言平台,在这一平台层次,控制系统供应商可能提供了机器人运动学算法和核心的多轴联动插补算法,用户可以针对自己设计的产品应用自由的进行二次开发,该层语言平台具有较好的开放性,但是用户的工作量也相应增加,这一层次的平台主要是针对机器人开发厂商的平台,如欧系一些机器人控制系统供应商就是基于IEC61131标准的编程语言平台。最底层的汇编语言级别的编程环境我们一般不用太关注,这些是控制系统芯片硬件厂商的事。 各家工业机器人公司的机器人编程语言都不相同,各家有各家自己的编程语言。但是,不论变化多大,其关键特性都很相似。比如Staubli机器人的编程语言叫VAL3,风格和Basic相似;ABB的叫做RAPID,风格和C相似;还有Adept Robotics的V+,Fanuc,KUKA,MOTOMAN都有专用的编程语言,但是大都是相似.而由于机器人的发明公司Unimation公司最开始的语言就是VAL,所以这些语言结构都有所相似。 VAL语言是美国Unimation公司于1979年推出的一种机器人编程语言,主要配置在PUMA和UNIMATION等型机器人上,是一种专用的动作类描述语言。 VAL语言是在BASIC语言的基础上发展起来的,所以与BASIC语言的结构很相似。在VAL的基础上Unimation公司推出了VALⅡ语言;而后来staubli收购了Unimation公司后,又发展起来了VAL3的机器人编程语言。 学习的话,一般来说各家机器人的官方网站都会有这些介绍资料,但是详细的资料就会比较欠缺。
  • 热度 29
    2014-7-10 22:01
    1639 次阅读|
    0 个评论
    硬件工程师该如何成为软件专家 要想成为某个方面的专家可不是件容易的事,需要付出艰辛的努力,尤其是涉及到嵌入式软件方面。嵌入式技术的变化速度至少可以说是很快的。虽然用来编写软件的编程语言仍然是C和C++,但相关技术、编译器、工具链、支持工艺和技术在无穷无尽的革命浪潮中一直在勇往直前。你只要稍歇一会儿,就只有望洋兴叹了。尽管变化神速,但仍有一些事件是工程师想要与时俱进并成为软件专家可以做的。 专注于某个领域中的一个特定专业 尽管社会或项目经理认为工程师应该是从概念开始一直到生产的每个方面的专家,但每个方面都是专家是不现实的。想成为无所不能的专家不仅没有足够的日常时间,也没有足够的资源。一个很明显的解决方案是在某领域中寻找一个感兴趣而且有需求的小众市场,然后全力以赴加以攻克。只有当工程师完全掌握了这种技术,并且维护它很轻松时,才应分出精力去寻找其它小众市场。另外应该时刻关注对这个专业市场的行业观点,如果开始变得过时或即将失去实用性,工程师就可以在意外变成老古董之前转移到一种新的专业技术。 硬件工程师该如何成为软件专家 【 分页导航 】 • 第1页: 专注于某个领域中的一个特定专业 • 第2页: 每周抽出时间与时俱进 • 第3页: 积极参加社交媒体 • 第4页: 参加会议或网上研讨会 • 第5页: 不要忘了获取经验 延伸阅读: 编程大师的成功秘诀 成功制作工程师简历的十个技巧 《电子设计技术》网站版权所有,谢绝转载 每周抽出时间与时俱进 光阴似箭,日月如梭,稍不注意,时间就会从我们的指头悄悄遛走。对生活、工作和项目负担的追求占据了工程师的大部分时间,并且很容易超出工程师的可控范围。因此有必要每周抽出一定的时间来学习和巩固专业知识。午饭时间或周末早晨是可以充分利用的好时间,否则这些时间很容易就浪费了。分配的时间长短很大程度上取决于感兴趣的领域和变化速度有多快。用于提高这些技能的时间可以少至一周一个小时、长至一周一天。不管怎样,你不用这些时间就白白失去了! 阅读书藉和杂志 阅读书藉和杂志是消磨零碎时间的一种好方法。每个行业都有一份能作为每个工程师知识库基础的媒体资源和著作清单。嵌入式软件行业也不例外。本文作者认为有大量书藉是学习和理解常用嵌入式软件的理想基础。下面是一些例子,包括: 1.David Simon编写的《嵌入式软件初级读本》 2.Jack Ganssle编写的《嵌入式系统设计艺术》 3.Elecia White编写的《嵌入式系统设计》 市面上有许多有关嵌入式软件方面的书藉和杂志可以用来保持工程师不落伍,并且还有助于特定市场中的专业化发展。首先要确定感兴趣的主题,然后搜索出这些资源。一些可供阅读的最佳在线杂志包括《电子技术设计》(EDN),还有《Embedded》。 【 分页导航 】 • 第1页: 专注于某个领域中的一个特定专业 • 第2页: 每周抽出时间与时俱进 • 第3页: 积极参加社交媒体 • 第4页: 参加会议或网上研讨会 • 第5页: 不要忘了获取经验 延伸阅读: 编程大师的成功秘诀 成功制作工程师简历的十个技巧 《电子设计技术》网站版权所有,谢绝转载 积极参加社交媒体 一般来说,社交媒体有时看起来似乎铺天盖地、很无趣也很浪费时间。然而,正确地利用这些渠道被证明是完全值得的。在电脑网络空间中任一时刻都存在着数不清的广博知识等待你去发现和利用。上面有许多文章、技巧和提示、网站链接以及更多永远不会让工程师特别留意到的东西,除非他们能够积极参与社会媒体。一些本来可能被忽略的技术讨论通过简单地寻找相关的散列标签可以被轻松发现。从中流露出的信息可以很容易将职业人员与专家区别开来。 但只是消费媒体永远只能成为一个工程师。为了获得参与社交媒体的全部影响力,你应该发表自己的知识、专业技能和经验。这不仅有助于让学到的经验教训公诸于世,而且能使其他人从这些信息中受益。社交媒体上有数不清的年轻工程师可以从经验丰富的年长工程师那里学到东西。为了试图鼓励这种努力,本文作者经常会在推特上发表一些常用技巧,并赋于散列标签#EmbeddedTips。参与这些讨论时不仅只是阅读这些技巧,而且要发表你自己的见解! 使用时事通讯获得最新的提示与技巧 成为某方面专家的另外一种最佳途径是订阅时事通讯,它能自动向电子邮件直接发送最前沿的技术。这方面最好的一个例子是覆盖《电子技术设计》、《电子工程专辑》、《Embedded》等的UBM时事通讯。每周都会有相关的文章和故事发送出来,因而能节省工程师很多宝贵的互联网漫游搜索的时间。还有像Jack Ganssle和Michael Barr等软件专家专门撰写的定期时事通讯,这些邮件也专注于行业内的一些专业主题。本文作者还每月发表一份嵌入式时事通讯,内容涉及C基本原理、提示与技巧、贸易工具和感兴趣的新闻集锦。(感兴趣的读者可以上http://bit.ly/156NXX8网站注册) 【 分页导航 】 • 第1页: 专注于某个领域中的一个特定专业 • 第2页: 每周抽出时间与时俱进 • 第3页: 积极参加社交媒体 • 第4页: 参加会议或网上研讨会 • 第5页: 不要忘了获取经验 延伸阅读: 编程大师的成功秘诀 成功制作工程师简历的十个技巧 《电子设计技术》网站版权所有,谢绝转载 参加会议或网上研讨会 会议和网上研讨会是获得专业知识的好地方。Design West是嵌入式软件领域中的一个极好例子。那里不仅有覆盖每个可能想到的主题的一周课程和培训,而且参加会议的很多是业内专家。会议是与这些专家面对面交流、咨询问题和获取他们知识和经验的极佳机会。在这些会议上知识膨胀的速度绝对是惊人的!但有时许多公司不允许或者没有时间参加会议。在这些情况下,参加在线培训和网上研讨会同样不错。IEEE Spectrum会定期赞助业内专家主持的网上研讨会,作者认为这都是很好的机会!尝试至少一年参加一次会议,一个月参加一次网上研讨会。 成为IEEE认证的软件开发专家 很少有什么比某人名字后面的头衔和职称更能暗示其专业才能的了。在软件行业内有一些认证项目可供工程师展示其才能。这些项目包括专业技能考试和IEEE认证的软件开发专家(CSDP)。通过这些考试意味着拥有了通过考试所具备的最低限度的理解力和知识。另外,他们还有经验要求。要想通过认证,工程师不仅要有书本上的知识,还必须花时间实际编写软件!这些认证通常能让雇主大概知道他们的雇员能做什么。 【 分页导航 】 • 第1页: 专注于某个领域中的一个特定专业 • 第2页: 每周抽出时间与时俱进 • 第3页: 积极参加社交媒体 • 第4页: 参加会议或网上研讨会 • 第5页: 不要忘了获取经验 延伸阅读: 编程大师的成功秘诀 成功制作工程师简历的十个技巧 《电子设计技术》网站版权所有,谢绝转载 不要忘了获取经验 阅读理解书藉是不错,但没有实际经验工程师也不可能成为专家!他们必须沉下心来编写代码!找到一个便宜的开发套件,然后开始编程。 提出一个项目、一项发明或只是找到一个感兴趣的问题,然后借助软件解决。从中学到的问题和技能是仅靠阅读文章或书本永远学不到的。 在一天结束时,不管工程师成为了专家,还是只是掌握了先进的开发技术,他们都不应忘记享受解决遇到的问题。毕竟这是工程师最乐意和最擅长做的事情之一。 原作者:Jacob Beningo 【 分页导航 】 • 第1页: 专注于某个领域中的一个特定专业 • 第2页: 每周抽出时间与时俱进 • 第3页: 积极参加社交媒体 • 第4页: 参加会议或网上研讨会 • 第5页: 不要忘了获取经验 延伸阅读: 编程大师的成功秘诀 成功制作工程师简历的十个技巧 《电子设计技术》网站版权所有,谢绝转载
  • 热度 17
    2011-8-7 07:30
    1531 次阅读|
    0 个评论
    TIOBE 8月份编程语言排行榜 已经发布,本月热点是新的函数型编程语言F#。从上月25名的位置杀出重围一跃而至本月排名第19的位置,F#仍然还有上升劲头,有可能会在下月进一步提升。 大多数人会认为函数型编程语言的鼻祖Lisp的劲敌,应该是热门的Scala(#66),Clojure(#107),Haskell(#35)或者Erlang(#48)等等。但结果却出乎意料,是微软的F#语言抢得先机。不过,最近F#的渐渐流行并不出人意料。除了本身设计优秀之外,微软在最新版本的Visual Studio 2010提供支持,更使F#获得扩大群众基础得天独厚的优势。 当然,实际上TIOBE的这个榜单前15、前10更能反映实际情况。15名之后历史上变化非常大,份额与后十几名的也相差不大,而且绝对数字又很小,统计误差影响很大。F#是否能成为一种主流语言,还有待观察。 事实上,从 Google Trends的比较 来看,F#的势头并非一片光明。函数式语言里总体上Erlang更受欢迎,但数据显示最近F#势头不错。Clojure受关注较少。(Scala和Haskell均有很强的同义词影响,无法表征语言流行度,因此省去。) 相比之下,中国的情况更差,甚至没有什么数据。Erlang一枝独秀,没有什么竞争。 其他语言里,Java依然独领风骚,位居第一,份额还有所增长。紧随其后的C、C++的座次不变,份额一升一降。 与上月相比PHP与C#的名次对调,C#的份额也有较大下降。值得注意的是,而Objective-C继续强劲上升,有可能在今年超过C#和PHP。 以下是前20名编程语言排行 前10名编程语言走势图 以下是21-50编程语言排名 必须声明,这个榜单本身采集的是英文世界的数据,虽然在反映趋势上有一些参考意义,但与中国的实际情况不完全符合,而且,这张采样本身也有相当大的局限性。 【说明】 TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新。这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引 擎(诸如Google、 MSN 、雅虎)以及Wikipedia和YouTube进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语 言所编写的代码数量多少。 这个排行榜可以用来考查你的编程技能是否与时俱进,也可以在开始开发新系统时选择语言时用来进行策略性的决策。排行榜的详细定义可以参考 这里 。
相关资源