122

Ruby 正在变得流行,很大程度上是受到 Ruby on Rails 的影响,但感觉它目前正艰难度过青春期。Ruby 和 Smalltalk 之间有很多相似之处——磁悬浮就是证明。尽管有更不寻常的语法,Smalltalk 拥有 Ruby 的所有(如果不是更多)面向对象的美。

从我读到的内容来看,Smalltalk 似乎让 Ruby 更胜一筹:

Ruby 似乎只是在重新发明轮子。那么,为什么 Ruby 开发人员不使用 SmallTalk 呢?Ruby 有什么 Smalltalk 没有的?

郑重声明:我是一个 Ruby 人,在 Smalltalk 方面几乎没有经验,但我开始想知道为什么。


编辑:我认为GNU Smalltalk已经解决了易于编写脚本的问题。据我了解,这允许您在常规的旧文本文件中编写 smalltalk,并且您不再需要在 Smalltalk IDE 中。然后,您可以使用以下命令运行脚本

gst smalltalk_file
4

28 回答 28

88

我更像是一个 Pythonista 而不是 Ruby 用户,但是出于同样的原因,同样的事情也适用于 Ruby。

  • Smalltalk 的架构有些孤立,而 Python 和 Ruby 是从头开始构建的,以促进集成。Smalltalk 从未像 Python 和 Ruby 那样真正获得混合应用程序支持,因此“smalltalk 作为嵌入式脚本语言”的概念从未流行起来。

    顺便说一句,Java 并不是与其他代码库交互的最简单的东西(JNI 相当笨拙),但这并没有阻止它获得人们的关注。IMO 接口参数很重要 - 易于嵌入并没有伤害 Python - 但这个参数仅具有中等分量,因为并非所有应用程序都需要此功能。此外,Smalltalk 的更高版本确实在很大程度上解决了孤立问题。

  • 大多数主要的 smalltalk 实现(VisualWorks、VisualAge 等)的类库都很大,并且以相当陡峭的学习曲线而闻名。Smalltalk 中的大多数关键功能都隐藏在类库的某个地方,甚至是流和集合之类的基本内容。语言范式对于不熟悉它的人来说也是一种文化冲击,浏览器呈现的程序的零碎视图与大多数人习惯的完全不同。

    总体效果是,Smalltalk 因难学而获得了(有些应得的)声誉。要成为一个真正精通 Smalltalk 的程序员需要相当多的时间和精力。Ruby 和 Python 更容易学习并使新程序员跟上速度。

  • 从历史上看,主流的 Smalltalk 实现非常昂贵,并且需要特殊的硬件才能运行,从 1983 年发布的 net.lang.st80可以看出。Windows 3.1、NT 和 '95 以及 OS/2 是第一个在主流硬件上能够支持具有良好本地系统集成的 Smalltalk 实现的大众市场操作系统。以前,Mac 或工作站硬件是能够有效运行 Smalltalk 的最便宜的平台。一些实现(尤其是 Digitalk)很好地支持 PC 操作系统,并且确实成功地获得了一些牵引力。

    然而,OS/2 从未如此成功,Windows 直到 1990 年代中期才获得主流认可。不幸的是,这恰逢 Web 作为一个平台的兴起和 Java 背后的巨大营销推动力。Java 在 1990 年代后期占据了大部分的注意力,使得 Smalltalk 有点被淘汰了。

  • Ruby 和 Python 在更传统的工具链中工作,并且没有与特定的开发环境紧密耦合。虽然我使用的 Smalltalk IDE 已经足够好了,但我还是使用 PythonWin 进行 Python 开发,主要是因为它有一个很好的编辑器,带有语法高亮,而且不会被踩到。

    然而,Smalltalk 被设计为与 IDE 一起使用(事实上,Smalltalk 是最初的图形 IDE),并且仍然具有其他系统无法复制的一些不错的功能。使用高亮和“显示”测试代码仍然是我在 Python IDE 中从未见过的非常好的功能,尽管我不能代表 Ruby。

  • Smalltalk 加入 Web 应用程序派对的时间有点晚。诸如 VisualWave 之类的早期尝试从未取得过巨大的成功,直到 Seaside 出现后,一个像样的 Web 框架才在 Smalltalk 圈子中得到认可。与此同时,Java EE 已经有了一个完整的接受生命周期,从狂热的狂热粉丝开始推广它,最后变得无聊并转向 Ruby;-}

    具有讽刺意味的是,Seaside 开始在行家中获得一些共识,所以我们可能会发现 Smalltalk 骑着它重新流行起来。

话虽如此,一旦您弄清楚了如何驱动它,Smalltalk 就是一个非常好的系统。

于 2008-10-09T21:16:21.697 回答
79

当我早上离开家去上班时,我经常在决定是左转还是右转离开我的车道(我住在街道中间)。无论哪种方式都会让我到达我的目的地。一种方式将我带到高速公路,根据交通情况,这条高速公路可能会让我最快地到达办公室。至少在路上我开得很快,而且我很有可能在上班的路上看到一两个漂亮的女孩:-)

另一种方式让我可以沿着一条非常迷人、多风的小路行驶,那里有完整的树木覆盖。这条路非常令人愉快,而且这两种方法肯定更有趣,尽管这意味着我到办公室的时间比我走高速公路的时间要晚。每种方式都有其优点。在我赶时间的日子里,我通常会走高速公路,虽然我可能会遇到交通,而且我也增加了发生事故的机会(如果我不小心我的匆忙)。其他的日子,我可能会选择林间小路,继续开车,欣赏风景,意识到自己迟到了。我可能会尝试加快速度,提高自己获得罚单或造成事故的机会。

两种方式都不比另一种更好。他们每个人都有自己的好处和风险,每个人都会让我达到我的目标。

于 2008-10-11T15:52:12.320 回答
25

我认为你的问题有点忽略了这一点。 不应该选择,你应该两个都

如果您确实处于可以选择下一个框架(vm、基础架构)的位置,那么您需要决定使用什么,并且可以从您的应用程序打算做什么的角度提出一个具有优缺点的特定问题。

我用过 smalltalk(喜欢它)和 ruby​​(喜欢它)。

在家里或在开源项目中,我可以使用我喜欢的每一种语言,但在工作时我必须采用。

我开始使用 ruby​​(在工作中),因为我们需要一些在 solaris、linux 和 windows(98,2000,xp) 下表现或多或少相同的脚本语言。Ruby 在那个时候对于普通人来说是未知的,并且没有任何轨道。但它很容易卖给所有相关的人。

(为什么不使用 python?真相?我曾经花了一周的时间寻找一个错误,当终端将我的空间转换为选项卡并且意图被搞砸时发生的错误)。

所以人们开始越来越多地用 ruby​​ 编写代码,因为它是如此轻松、享受,而不是天空中的一片云彩。

保罗格雷厄姆总结

确实,大多数人不会仅仅根据自己的优点来选择编程语言。大多数程序员都被告知其他人使用哪种语言。

为了对黑客有吸引力,一种语言必须适合编写他们想要编写的程序。这意味着,也许令人惊讶的是,它必须适合编写一次性程序。

什么时候在 Lisp 领域尝试用 smalltalk 替换 LISP

Ruby 的库、社区和势头都很好

所以如果 LISP 仍然比 Ruby 更强大,为什么不使用 LISP 呢?对 LISP 编程的典型反对意见是:

  1. 没有足够的图书馆。
  2. 我们不能雇用 LISP 程序员。
  3. 在过去的 20 年里,LISP 毫无进展。

这些并不是压倒性的反对意见,但它们当然值得考虑。

现在,如果要在强大的语言和流行语言之间进行选择,那么选择强大的语言可能非常有意义。但是,如果力量差异很小,那么受欢迎具有各种不错的优势。2005 年,在选择 LISP 而不是 Ruby 之前,我想了很久。如果我需要优化代码或充当成熟编译器的宏,我可能只会这样做。

于 2008-10-11T13:26:31.490 回答
23

我会说相反:Smalltalk 语法是最简单和强大的编程语言语法之一。

于 2009-03-21T11:17:15.053 回答
19

确实,语言非常相似。解释这一点的简单方法是将 Ruby 称为 Smalltalk 翻唱乐队。更合理的解释是,Smalltalk 的封闭系统将其隔离开来,而 Ruby 参与 Unix 生态以及从阳光下的每种语言中挪用特性的习惯,使它的采用曲线变得无限平缓,并且可以轻松地与 Git 等 kickass 工具集成。

贾尔斯·鲍克特

于 2008-10-11T08:21:08.177 回答
17

猜猜这是谁说的?(引用很接近,也许不准确):“我一直认为 Smalltalk 会击败 Java。我只是不知道这样做时是否会被称为 'Ruby'。”

击鼓 ....

...

答案是......肯特贝克

于 2009-03-27T22:44:23.463 回答
15

Stephane Ducasse 在这里有一些很棒的 Smalltalk 书籍:

http://stephane.ducasse.free.fr/FreeBooks.html

因此,尽管 Smalltalk 社区不如 Ruby 和 Rails 社区多产,但仍有一些很大的帮助。

于 2008-10-09T14:43:06.153 回答
15

Ruby 有什么 Smalltalk 没有的?

  • 主要平台(IronRuby 和 jRuby)的大量当前支持,丰富了库集
  • 像戴夫·托马斯这样的传道者,多年来一直在全国各地巡回宣传他们语言的福音。我在Java 会议上看到 Dave说他不懂 Java,而且他更喜欢 Ruby。
  • 书架上强大的当前房地产
  • Ruby 的创造者曾说过他为程序员着想:Ruby 的语法似乎有这种禅意。很难确定,但似乎激励了粉丝。
  • 创造性的、动态的演示文稿,例如Giles这个获得了思想分享的演示文稿

我认为你的观点很好。正如一位朋友曾经说过的,Ruby 与 Smalltalk 相比可能是“新瓶装旧酒”。但有时新瓶子很重要。葡萄酒必须在正确的时间出现在正确的地方。

于 2008-10-11T13:50:38.307 回答
14

打败我。我花了一年时间检查 Ruby 并做了一些小型项目,看看我有多喜欢它。我想我是一个 Smalltalk 的偏执狂,因为每次我坐下来和 Ruby 一起工作时,我都会感叹“我真的宁愿在 Smalltalk 中做这件事”。最后我放弃了,回到了 Smalltalk。现在我更快乐了。越快乐越好。

这当然引出了一个问题,“为什么?”。没有特别的顺序:

  1. 因为 IDE 把我曾经使用过的任何东西都吹走了。这包括一系列平台,从 IBM 大型机上的 ISPF 到 Microsoft 的 Visual (.*),包括 Visual Basic 4-6、Visual C++(各种化身)、Borland 的 Turbo Pascal 和后代(例如 Delphi),以及 DEC 上的东西字符模式和 X-Windows 下的机器。
  2. 因为图像是一个美丽的居住地。我可以在里面找到我想要的。如果我不知道如何做某事,我知道图像中的某处是我正在尝试做的事情的一个例子——我所要做的就是寻找直到找到它。而且它是自记录的——如果你想查看某些东西是如何工作的细节,你只需在你感兴趣的类上打开一个浏览器,看看这个方法,它就是这样工作的。(好吧,最终你会遇到一个叫做原始的东西,然后是“这里有龙”,但通常可以从上下文中理解)。在 Ruby/C++/C 中可以做类似的事情,但这并不容易。容易更好。
  3. 语言简洁且一致。三种消息——一元、二元和关键字。这也描述了执行的优先级 - 首先是一元消息,然后是二进制消息,然后是关键字消息。使用括号来帮助解决问题。该死的小语法,真的 - 这一切都是通过消息发送完成的。(好吧,赋值不是消息发送,它是一个运算符。'return' 运算符 (^) 也是如此。块由方括号对 ([ ] ) 括起来。可能是其中的一两个其他“魔术”位,但该死的小......)。
  4. 块。是的,我知道,它们存在于 Ruby(和其他)中,但是该死的,如果不使用它们,你真的无法在 Smalltalk 中编程。你被迫学习如何使用它们。有时被强迫是好的。
  5. 没有妥协的面向对象编程 - 或替代方案,就此而言。你不能假装自己在“做对象”,同时还在做同样的事情。
  6. 因为它会拉伸你的大脑。我们都习惯的舒适结构(if-then-else、do-while、for( ; ; ) 等)不再存在,因此您必须学习新知识。以上所有(以及更多)都有等价物,但您将不得不学会以不同的方式思考。不一样就好。

另一方面,这可能只是一个自大型机统治地球以来一直在编程的人的胡言乱语,我们不得不步行 5 英里才能在令人眼花缭乱的暴风雪中工作,双向上坡,并且计算机使用甜甜圈作为记忆。我没有反对 Ruby/Java/C/C++/,它们在上下文中都很有用,但是给我 Smalltalk 或者给我......好吧,也许我应该学习 Lisp 或 Scheme 或者...... :-)

于 2009-11-17T18:16:19.897 回答
11

Smalltalk:人们转发 ifTrue:[认为] ifFalse:[未考虑]

Ruby:人们向前思考,除非向后思考

1)Smalltalk 的类似 RPN 的消息控制流就像 Lisp - 它是常规且很酷的,但会让人们感到奇怪。

2) Ruby 允许人们使用人们说话的惯用方式编写代码——除非有理由不这样做,否则就去做吧。

更新重写了 Smalltalk 示例,使其实际上更合法。

于 2009-01-13T13:45:23.023 回答
8

Ruby 是当前流行的语言。现在推销用它构建的软件比 70 年代开发的语言更容易。

于 2008-10-09T14:03:27.623 回答
8

社区!Ruby 尤其是 Rails 拥有如此强大的社区。在使用 smalltalk 时,似乎没有那么多关于 Smalltalk 的屏幕截图、文章、博客文章等。

于 2008-10-09T14:32:16.363 回答
7

您在第一行中回答了问题:“Ruby 正在变得流行”

  • 很多基于 Ruby 的有趣的模块、项目等。
  • 如果你在 Ruby 中做某事有困难,在某个地方寻求帮助将是微不足道的。
  • Ruby 现在安装在很多计算机上(它默认包含在 OS X、许多 Linux 发行版上,并且有很好的 Windows 安装程序) - 我没有看到在我使用过的任何机器上默认安装 smalltalk。

我会说一种语言是否优于另一种语言是无关紧要的。举个例子,PHP 可能不是有史以来“最好的”语言,但我仍然会考虑在 Ruby on Rails 上使用它(一个“更好”的创建工具网站),因为它是如此普遍。

基本上,一种语言的具体优缺点远不如它周围的一切——即社区——重要。

于 2008-10-11T10:34:36.563 回答
7

Ruby(或任何其他语言)比 Smalltalk(或任何其他语言)更受欢迎,因为我们生活在一个混乱的世界中。以机智:

  • 来自 Dave Thomas 本人,“[在 '如何在 10 分钟内构建博客'的视频之后...... Ruby 从一个不错的小众语言变成了'一种你编写 Rails 应用程序的语言'”(Ruby Conference 2010 年主题演讲)。
  • 早期的 Smalltalk 供应商收费过高
  • Smalltalk,因为它是 30 年前发明的(超前于时代),在许多人看来,它是一种古老的“死”语言(如 FORTRAN)
  • 公司认为 Smalltalk 是一种竞争优势,以至于他们隐藏了它的使用

尽管这两种语言在 OO 特性方面相似,但 Smalltalk 的杀手锏优势在于实时、开放的环境(被广泛误解的“形象”)。在您查看了Smalltalk中的这个编程示例之后,争论就结束了。

于 2010-12-10T16:22:05.240 回答
5

对我来说,它不是 Ruby 所拥有的,而是 Ruby 所没有的。它没有的东西是需要一个虚拟机和完整的环境。

Smalltalk 很棒——我在那里学习了 OO 概念,但为了易于使用,我选择了 Ruby。我可以在我最喜欢的编辑器中编写 Ruby 代码并从命令行运行它。

所以,对我来说,这就是我选择 Ruby 而不是 Smalltalk 的原因。

于 2008-10-09T14:03:48.963 回答
5

我认为每个使用 Ruby 已有一段时间的人都认识到它对 Smalltalk 的深深亏欠。作为这些人中的一员,我喜欢 Ruby 而不是 Smalltalk 的哪一点?我认为从严格的语言角度来看,它是糖。Ruby 故意是一种语法非常简洁的语言,而 Smalltalk 是一种语法非常简洁的语言。Ruby 本质上是带有 Perlish 语法糖的 Smalltalk 对象模型。我碰巧喜欢这种糖,发现它让编程更有趣。

于 2008-10-29T06:07:54.277 回答
5

你可以很容易地找到一份做 Ruby 的工作。虽然我真的很喜欢 Smalltalk,但要进入 Smalltalk 领域几乎是不可能的。它有一些解决方法,但如果你在它流行的时候没有进入,那么现在几乎是不可能的。

所有其他原因都显得微不足道,因为您需要花费大量时间,专注于实际工作才能正确学习一门语言。如果你不是独立富有,最好的办法就是在工作中接触它。

于 2009-12-03T01:03:45.713 回答
4

因为 Smalltalk 发行版的价格是 1000 美元的倍数,而 Ruby 是免费的。

于 2008-11-05T20:16:50.377 回答
4

Ruby 之于 Smalltalk 就像阿拉伯数字之于罗马数字。相同的数学,更简单的语法。

于 2009-02-23T20:39:42.283 回答
3

我做了一点 Smalltalk - IDE 是我记得的一件事 - Ruby 有良好的 IDE 支持吗?

于 2008-10-09T14:04:27.263 回答
3

使用 Ruby 是因为它可能具有业务功能,而 Smalltalk 则没有。

我可以从个人经验告诉你。仍在使用 Smalltalk,喜欢它,并且使用了几种口味。尽管 Smalltalk 是一门很棒的语言,并且是您提到的所有内容,但您不太可能说服普通 CIO/CTO 在新项目中使用 Smalltalk。当然,您甚至可能很难说服保守的 CIO/CTO 使用 Ruby。最后,如果您想要持续的长期商业支持,并且能够找到可以在未来支持您的系统的外来员工,那么您必须非常小心。例如,Smalltalk 在 90 年代初是一件非常大的事情,IBM 在 90 年代后期对其进行了大量投资。对于 IBM,Smalltalk 将成为所有业务应用程序的下一个语言。IBM 将 Smalltalk 安装在包括大型机系统在内的所有设备上。Java 流行起来,占领了市场,Smalltalk 成为了一个小众玩家。一年多以前,IBM 抛弃了该语言(他们的术语是日落)。另外,看看历史。ParkPlace 和 Digitalk 是 Smalltalk 领域的第一批主要商业参与者,他们合并然后倒闭。

于 2008-12-07T02:58:06.927 回答
2

Robert Martin 的有趣观点(来自 RailsConf 2009):“杀死 Smalltalk 的东西也会杀死 Ruby”

于 2009-05-15T17:30:46.290 回答
2

我喜欢 Smalltalk 和 Ruby——但我发现 Ruby 更适用于我的日常工作,并且更贴近我的内心(实际上来说)。Ruby 提供了 Smalltalk 没有的什么?

  • 基于文本的脚本
  • 实施要求低(在更多地方运行)
  • 更容易学习和证明(Perl 和 Python 程序员不会有麻烦
  • 更容易移动程序 - 文本文件!
  • 与原生环境很好的接口
  • 任何 Java 运行的地方,jRuby 都运行...
  • 更大、更活跃的社区

有些人提到了 gst(GNU Smalltalk);问题仍然存在。

于 2009-06-04T06:35:20.940 回答
2

使用任何能让你更强大、更快的方法来应对挑战。

我们来说,一个小小的内部框架,我们建在海边真的是我们的超级大国。

我喜欢 RoR 社区,它有正确的态度。这是非常非常宝贵的。但同时,从技术上讲,海滨让你更强大地应对更复杂的问题。

你可以使用开源的东西来做很棒的海滨网络应用程序。

dabbledb 是一家基于海边的 sartup,嘿!今年 6 月,Avi 把它卖给了推特!

我说你不需要等待别人批准你的倡议。

去吧。让它完成。向我们展示这行得通。

你不是一个人。我们在同一条船上。

于 2010-10-23T14:35:02.920 回答
0

我认为部分问题在于开发环境即运行时。这提供了很大的力量,但它也呈现出更大的学习曲线。

是一个hello world教程。

这与其他语言非常不同,我只需要知道如何打开文本编辑器、复制和粘贴文本、点击保存并运行编译器。我必须知道如何使用环境。该教程甚至没有向我展示如何创建一个我可以运行的基本程序(这可能更多是该教程的错误)。

与大多数其他语言相比,让事情顺利进行的成本肯定更高。

大多数语言都有一些可以炫耀的漂亮醒目的代码。我还没有在 Smalltalk 上看到过。我也认为 Smalltalk 存在一些污名,因为它已经存在了很长时间,而且还相对晦涩难懂。

于 2008-10-09T14:11:42.193 回答
0

我认为最大的区别是 Ruby 在 USEAGE 方面与 perl 更相似。Smalltalk 从未在“脚本”语言中站稳脚跟。

VM 真的很酷,我希望 ruby​​ 有类似的东西,这样我们就可以将操作系统上用 ruby​​ 编写的所有内容都视为内存空间中的对象,但是在那之前,我只是喜欢 Ruby 的简洁、简短的语法,以及只需编写一个小脚本并在以后重用它。Ruby 获得了 perl 的所有优点,而且 OOP 更类似于 smalltalk,而不是 perl 的 OOP hack。

于 2008-10-11T09:24:00.280 回答
0

我会比 Jonke 的回答更进一步,并说现在有大量语言拥有非常强大的社区,几乎足以满足各种口味,其中一部分具有主流认可(即你的经理会让你在也可以工作)。

学习一门语言的基础知识很容易,但要真正有效地使用它,您需要投入足够的时间来学习平台和工具,以及语法和习语。IIRC,McConnell 声称要真正精通大约需要三年时间。

考虑到这些情况,很难证明在 LISP 和 Smalltalk 等语言上花费大量时间是合理的,尽管它们很有趣,而且可能具有教育意义。

于 2009-05-02T12:03:46.493 回答
0

作为讨论的后来者,Smalltalk 和 Lisp 的主要问题是您无法在共享主机上使用 CGI 或 FastCGI 运行它们。

如果他们需要 VPS 或专用服务器来使用它们,那么未洗过的群众永远不会使用它们。恕我直言,Seaside 几乎优于其他任何东西,但它会在 Dreamhost 或 Webfaction 上运行吗?

于 2010-03-19T22:41:59.133 回答