21

如果我要制作机器人,你推荐我哪种语言?在我们的大学里,我们可以选择多种语言。大多数学生选择Ada只是因为我们的老师使用它。

经过一番研究,我发现 ada 是旧的。你怎么认为?值得学习吗?

4

8 回答 8

32

是的。非常如此,在我看来。

Ada 在其他编程语言中经常被忽视的两点非常出色:

  • 通用系统:包、函数和过程都可以是通用的。这对于根深蒂固的 DRY [ Don't Repeat Yourself] 原则特别有效。是的,你可以过度使用泛型,但我在(其他语言)项目中看到的是剪切和粘贴编程似乎更常见。[如果需要在该代码点修复错误,那只会引入多个故障点。]
  • 原生多任务处理。语言级任务处理功能的一大优点是多线程不会让人觉得“粘在上面”,也不是笨拙的扩展,而是集成到语言中。

也就是说,学习/使用 Ada 还有其他充分的理由。一个是挑剔的编译器,由于如此挑剔,它迫使你开始以自然减少编程错误的方式思考。(就像禁止andor在同一个条件。)

另一个是子类型的概念;子类型与 OOP 中的对象相反,不是扩展您进行的进一步的衍生,而是缩小类型(它是可接受的值),您越远离基本类型。{用适当的集合来考虑它;Integer 是您的基本类型,Natural 是您的非负整数,Positive 是您的正整数......并且使用 Ada 2012,您可以对您的子类型进行有趣的排除,例如 Primes 是 Positives 的子类型(对不起最后一点有点含糊;我还在学习 2012 年的东西)。}

使用 Ada 2012,您还可以在子程序上设置前置条件和后置条件;仅此一项就可以使您的库更加稳定。(与空排除指针一样。)

于 2012-09-18T02:23:19.630 回答
21

Peter Norvig 的建议可能与此相关:

当被问到“我应该使用什么操作系统,Windows、Unix 还是 Mac?”时,我的回答通常是:“使用你朋友使用的任何操作系统。” 你从朋友那里学到的优势将抵消操作系统之间或编程语言之间的任何内在差异。

十年自学编程

整篇文章很好读。

顺便说一句,Ada 是我学习的第一门语言。学习 Ada 首先有一个主要优势:没有人使用 Ada,所以我被迫在做任何其他事情之前学习另一种语言,从而获得洞察力。初级程序员可能遇到的最糟糕的问题之一是认为用他们的第一语言完成事情的方式就是完成事情的方式。学习一门新语言很容易,而且非常有价值。

于 2012-09-18T00:02:19.837 回答
12

如果您的老师和大多数同学都使用 Ada,那么最好使用 Ada。它是一种非常好的语言,适用于小型和大型程序。它非常易读,它(在某种程度上)保护你免受许多常见错误的影响。

Ada 用于软件工程。正如 darkestkhan 所说,这不是一种“黑客和希望最好的”语言。

Paul Stansifer 的建议非常好:学习几种语言。确保您有大量工具可供使用——不要将自己限制在一种语言上。你从学习不同的语言中获得的观点是非常有价值的。给猫剥皮的方法肯定不止一种——比如看看 Haskell。您将获得关于如何解决问题的全新视角。

语言语法是学习如何编程的最少部分。困难的部分是学习如何将复杂的现实世界问题建模成在非常有限的编程语言范围内有意义的东西。凭借其强大的类型系统、任务模型、泛型和用于实时和并发编程的可靠工具,Ada 非常适合这项工作。

由于您要专门询问机器人技术,因此一本好书可能是 John W. McCormick、Frank Singhoff 和 Jerome Hugues 的“Building Parallel, Embedded, and Real-Time Applications with Ada”。这是一本非常好的读物。

http://www.cambridge.org/gb/knowledge/isbn/item5659578/?site_locale=en_GB

于 2012-09-18T07:59:20.807 回答
7

艾达绝对值得。除了 Shark8 写的两件事之外,还必须补充一点,几乎所有的语言都专注于写作而不是阅读的容易性(而且大多数情况下你会写一次,读很多次)。此外,围绕 Ada 的文化与主流文化完全不同——专注于程序的正确工作和源代码的可读性,而不是“破解并使其工作,同时指望运气不会引入错误”。

至于年龄 - 哦,拜托 - C 甚至更老。语言时代本身有什么如此重要?在谈论年龄问题之前,您应该先看看 Ada 83 中的内容(提示:主流语言在 90 年代后半期开始达到 Ada 83 的功能集,许多功能 [特别是子类型] 仍然没有主流)。除了最新的 Ada 标准是从 2012 年开始的 - 如果你可以称之为旧的,那么我不知道什么是“新的”。

于 2012-09-18T05:00:25.133 回答
4

C++ 并不完全是你所知道的春鸡。我认为这一切都比艾达年轻十岁。

更糟糕的是,C++ 和 C# 都从 C 中派生出它们语言的核心,而 C 实际上比 Ada早了十年。

在 16KB 是很多 RAM 并且硬盘驱动器与工业空调一样大的时代,C 旨在使编译器的构建更容易(而不是程序员的工作)。C++ 基本上是从 60 年代后期的 C 语言开始的,带有 OO 特性,而 C# 本质上是微软对 C++ 的调整,使其更像 Java。从本质上讲,C# 和 C++ 实际上比 Ada 更老。

有很多时髦的新语言需要学习(在某些时候你应该学习它们)。但是,C++ 和 C# 不是它们。

于 2012-09-18T14:01:19.347 回答
4

虽然 Shark8 对 Ada 作为一门语言有一些非常好的观点,但这个问题专门针对机器人技术。在这方面,我会说“不要打扰”。在从事从乐高到最先进的机器人手臂和手等各种机器人技术的 10 多年经验之后,我从未见过使用 Ada 的机器人系统。

归根结底,机器人技术很难。如此之难,以至于您无法独自解决所有问题。这意味着要利用大量现有的库和框架。这意味着您将使用他们的语言、界面等。您的机器人系统可能包含大量代码,其中只有一小部分是为您的特定应用程序定制的。虽然可以在 Ada 中编写您的小部分并做一些包装器或接口,以便它可以与其余代码配合使用。但我想你会发现这是一项工作量很大却收效甚微的工作。

在开始一个新的机器人项目时,我采取务实的方法。我查看现有的工具、库和实用程序,然后选择最适合我需要的一种。然后我使用它使用的任何语言。95% 的时间是 C++ 或 Python。

于 2012-09-22T00:30:01.887 回答
3

与大多数其他语言相比,Ada 更注重工程。与普通的编程语言不同,Ada 提供了强大的数据工程能力。也就是说,在 Ada 开发人员甚至开始开发算法之前,她/他就设计(工程)数据。

Ada 类型模型允许设计精确的数据。一个简单的例子是:类型 Channel 是范围 1..135;

这里整数数据类型的每个实例都属于该预先约束的值范围。这极大地简化了使用此类实例的算法。

基本原则是,当数据被精确地设计时,相关的算法就会变得不那么复杂。此功能在其他语言中很少见。在 Ada 中,这是常见的做法。

通过支持将数据工程这一概念作为整个软件工程过程的子集,我们可以显着降低整体软件设计的圈复杂度。

我的示例只是对 Ada 中全方位数据工程能力的一个小尝试。然而,正是这种数据工程能力使其成为安全关键型软件的理想选择,在这个 21 世纪的软件环境中,这是它现在最常用的利基市场。

于 2020-02-10T23:52:50.717 回答
2

这取决于你想用这种语言做什么。Lisp 甚至比 Ada 还要古老,并且在人工智能中被广泛使用。学你想学的语言,学你容易学的语言,容易理解它的概念。然后你可以走得更远,学习更多的语言。

于 2012-09-17T15:30:57.467 回答