Why use Ruby instead of Smalltalk?

Ruby 正在成为 受欢迎,很大程度上是受到 Ruby on Rails 的影响,但感觉它目前正在挣扎着度过它的青春期。Ruby 和 Smalltalk 之间有很多相似之处—— 磁悬浮就是证明。尽管 Smalltalk 的语法更加不同寻常,但它拥有 Ruby 的所有(如果不是更多的话)面向对象之美。

据我所知,Smalltalk 似乎比 Ruby 更胜一筹:

好像 Ruby 只是个重造轮子,那么,为什么 Ruby 开发者不使用 SmallTalk 呢

郑重声明: 我是一个鲁比家伙,在 Smalltalk 几乎没有经验,但我开始想知道为什么。


编辑: 我认为 GNU Smalltalk已经解决了脚本的易用性问题。据我所知,这允许您在常规的旧文本文件中编写 Smalltalk,而且您不再需要使用 Smalltalk IDE。然后,你可以使用以下方法进行 运行你的脚本:

gst smalltalk_file
24424 次浏览

Ruby 是当前的 Buzz 语言。现在推销用它构建的软件比推销70年代开发的语言要容易得多。

对我来说,这不是 Ruby 拥有什么的问题,而是 Ruby 没有什么。它所没有的是对虚拟机和完整环境的需求。

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

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

我已经做了一些 Smalltalk-IDE 是我记得的一件事-Ruby 有很好的 IDE 支持吗?

我认为问题的一部分在于“开发环境即运行时”。这给了我们很大的动力,但同时也提供了一个更大的学习曲线。

这里 是 hello world 教程。

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

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

大多数语言都有一些引人注目的代码可以炫耀。我从没在 Smalltalk 上看到过。我也认为 Smalltalk 有些不光彩,因为它已经存在了这么长时间,而且相对来说还不太为人所知。

社区!Ruby,尤其是 Rails 有这样一个伟大的社区。当闲聊时,似乎没有那么多关于 Smalltalk 的文章、文章、博客文章等。

Stephane Ducasse has some great Smalltalk books available here:

Http://stephane.ducasse.free.fr/freebooks.html

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

我更喜欢 Python 而不是 Ruby 用户,然而 Ruby 也有同样的原因。

  • Smalltalk 的体系结构有些孤立,而 Python 和 Ruby 则是从头开始构建的,以促进集成。Smalltalk 从来没有像 Python 和 Ruby 那样获得混合应用程序的支持,所以“作为嵌入式脚本语言的 Smalltalk”的概念从来没有流行起来。除此之外,Java 与其他代码库的接口并不容易(JNI 相当笨拙) ,但这并不妨碍它获得更多的关注。IMO 的接口论点是重要的-易于嵌入并没有伤害 Python-但是这个论点只有适度的份量,因为并不是所有的应用程序都需要这个能力。而且,Smalltalk 的后期版本确实在很大程度上解决了这种孤立性。

  • 大多数主要的 Smalltalk 实现(VisualWorks、 VisualAge 等)的类库都很大,并且有相当陡峭的学习曲线的名声。Smalltalk 中的大多数关键功能都隐藏在类库中的某个地方,甚至包括流和集合等基本内容。对于不熟悉这种语言的人来说,这种语言模式也是一种文化冲击,而浏览器呈现的程序的零碎视图与大多数人习惯的视图完全不同。整体效果是,Smalltalk 因难学而获得了(某种程度上应得的)名声; 成为一个真正熟练的 Smalltalk 程序员需要花费相当多的时间和精力。Ruby 和 Python 更容易学习,也更容易让新程序员跟上进度。

  • 从历史上看,主流的 Smalltalk 实现是相当昂贵的,并且需要特殊的硬件来运行,如 这是 net.lang.st80在1983年的帖子所示。Windows 3.1、 NT 和’95以及 OS/2是第一个在主流硬件上大量销售的操作系统,能够支持具有良好的本地系统集成的 Smalltalk 实现。以前,Mac 或工作站硬件是能够有效运行 Smalltalk 的最廉价平台。一些实现(特别是 Digitalk)非常好地支持了 PC 操作系统,并且成功地获得了一些吸引力。然而,OS/2从未如此成功,Windows 直到20世纪90年代中期才被主流接受。不幸的是,这与 Web 作为一个平台的崛起以及 Java 背后的大规模市场推动不谋而合。Java 在20世纪90年代后期夺走了大部分人的心灵,使得 Smalltalk 有点落后。

  • Ruby and Python work in a more conventional toolchain and are not tightly coupled to a specific development environment. While the Smalltalk IDEs I have used are nice enough I use PythonWin for Python development largely because it has a nice editor with syntax highlighting and doesn't get underfoot.

    However, Smalltalk is was designed to be used with an IDE (in fact, Smalltalk was the original graphical IDE) and still has some nice features not replicated by other systems. Testing code with highlight and 'Show it' is still a very nice feature that I have never seen in a Python IDE, although I can't speak for Ruby.

  • Smalltalk 在参加 Web 应用程序派对时有些晚了。像 VisualWave 这样的早期努力从未取得过巨大的成功,直到 Seaside 问世,一个像样的 Web 框架才得到 Smalltalk 圈子的认可。与此同时,Java EE 已经有了一个完整的接受生命周期,从狂热的粉丝们推广它开始,最终厌倦了,转向 Ruby;-} < br > < br > 具有讽刺意味的是,Seaside 开始在行家中获得一些思想共享,所以我们可能会发现 Smalltalk 重新流行起来。

Having said that, Smalltalk is a very nice system once you've worked out how to drive it.

的确,两种语言非常相似。对此的粗浅解释是将 Ruby 称为 Smalltalk 翻唱乐队。更合理的解释是,Smalltalk 的封闭系统孤立了它,而 Ruby 对 Unix 生态的参与以及从所有语言中获取特性的习惯使得它的采用曲线无限柔和,并且毫不费力地与 Git 这样的强大工具集成。

Giles Bowkett

我认为最大的不同在于 Ruby 在 USEAGE 方面更加类似于 perl。Smalltalk 从未在“脚本”语言中站稳脚跟。

虚拟机真的很酷,我希望 Ruby 也能有类似的东西,这样我们就可以把我们的操作系统上所有用 Ruby 写的东西当作内存空间中的对象,但是在那之前我只是喜欢 Ruby 简洁、语法简短、能够只写一个小脚本并在以后重用它的能力。Ruby 得到了 perl 的所有优势,而且 OOP 比 perl 的 OOP 技术更类似于 small talk。

你在第一行回答了这个问题: “ Ruby 正在变得流行”

  • 有一个 很多的有趣的模块,项目等基于 Ruby。
  • 如果您在使用 Ruby 做某事时遇到麻烦,那么在某处寻找帮助将是微不足道的。
  • Ruby 现在安装在一台 很多电脑上(默认情况下它包含在 OS X,许多 Linux 发行版中,并且有很好的 Windows 安装程序)——我还没有在我使用过的任何电脑上看到过默认安装的 Smalltalk。.

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

Basically, specific pros and cons of a language are far less important than everything surrounding it - namely the community.

我认为你的问题有点没有抓住重点。 You shouldn't choose, you should 学习 them both!

If you truly are in a position that you can choose the next framework(vm, infrastructure) then you need to decided what to use and can ask a specific question with pros and cons from the perspective of what your application is inteded to do.

我使用了 Smalltalk (喜欢它)和 ruby (喜欢它)。

在家里或者开源项目中,我可以使用任何我喜欢的语言,但是在工作中我必须采用。

我开始使用 ruby (在工作中) ,因为我们需要一些在 solaris、 linux 和 windows (98,2000,xp)下表现差不多的脚本语言。Ruby 在那个时候还不为普通人所知,也没有什么 Rails。但是很容易把它推销给所有相关的人。

(为什么不是巨蟒?真相?有一次,我花了一个星期的时间来寻找一个 bug,这个 bug 是由于终端将我的空间转换成了一个标签页(tab)而导致的)。

因此,人们开始越来越多地使用红宝石编码,因为它是如此令人放松、享受,而不是天空中的一片云彩。

Paul Graham 总结道

诚然,大多数人选择编程语言并不仅仅是因为它们的优点。大多数程序员被告知由其他人使用什么语言。

and

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

当我们在 LISP 的土地上尝试用 Smalltalk 代替 LISP 时

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

因此,如果 LISP 仍然比 Ruby, why not use LISP? The typical objections to programming in LISP are:

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

这些不是压倒性的反对意见, 但它们绝对值 考虑到。

and

Now, given a choice between a powerful 语言,和流行语言,它可能 选择合适的方法是非常有意义的 但是如果两者之间的区别 权力是次要的,受欢迎就是一切 好处。在2005年,我 在选择之前要仔细考虑 LISP 而不是 Ruby 我可能只会 它如果我需要优化的代码,或 macros which acted as full-fledged 编译器。

Ruby 有什么是 Smalltalk 没有的?

  • 主要平台(IronRuby 和 jRuby)提供了大量的、当前的支持,丰富了库集
  • 像大卫. 托马斯这样的福音传道者,多年来一直在全国各地巡回宣讲他们语言的福音。我在 Java conferences上看到过 Dave 说他不懂 Java,他更喜欢 Ruby。
  • Strong, current real estate on the bookshelves
  • Ruby 的创造者曾经说过,他考虑的是程序员: Ruby 的语法似乎有这种禅宗的吸引力。这很难确定,但似乎激励了球迷。
  • 贾尔斯这个这样富有创造性和动态性的演示会赢得更多的关注

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

当我早上离开家去上班时,我经常纠结于是左转还是右转离开我的车道(我住在一条街的中间)。不管怎样,我都会到达目的地。有一条路通往高速公路,根据交通情况,这条路可能是我最快到达办公室的路。至少在一段路程中,我可以开得非常快,而且我很有可能在上班的路上看到一两个漂亮女孩: -)

另一种方式可以让我旅行在一个非常迷人的,多风的完全树木覆盖的后面的道路。这条路很有趣,而且两种方法中肯定有更多的乐趣,尽管这意味着我到达办公室的时间要晚于我走高速公路的时间。各有千秋。在我赶时间的日子,我通常会走高速公路,虽然我可能会遇到交通堵塞,我也增加了我的机会,进入一个事故(如果我不小心在我的匆忙)。其他时候,我可能会选择林间小路,沿着小路开车,欣赏风景,然后意识到我要迟到了。我可能会试图加速,增加我的机会得到一张罚单或造成事故自己。

这两种方式都不比另一种好。他们每个人都有自己的利益和风险,每个人都会帮助我实现我的目标。

我认为每一个和 Ruby 合作了一段时间的人都意识到了它对 Smalltalk 的深深感激。作为这些人中的一员,我为什么喜欢 Ruby 胜过 Smalltalk?我认为从严格的语言角度来看,是糖。Ruby 是一种非常注重语法的语言,而 Smalltalk 是一种非常注重语法的语言。Ruby 本质上是带有 Perlish 语法的 Smalltalk 对象模型。我碰巧喜欢糖,并且发现它使编程更有趣。

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

使用 Ruby 是因为它可能具有商业价值,而 Smalltalk 没有。

I can tell you from personal experience. Still using Smalltalk, love it, and have used a couple flavors. Although Smalltalk is a great language, and is everything you mentioned, you wont likely convince the average CIO/CTO to use Smalltalk on a new project. Of course, you might even have a hard time convincing a conservative CIO/CTO to use Ruby. In the end you have to be very careful if you want sustained long term commercial support and the ability to find off-the-street employees that can support your systems in the future. As an example, Smalltalk was a really big thing in the early 90's and IBM invested heavily into it in the late 90's. For IBM Smalltalk was going to be the next language for all business applications. IBM put Smalltalk on everything including their mainframe systems. Java became popular, took over the market, and Smalltalk became a niche player. Over a year ago IBM dumped the language (their term is sunset). Also, take a look at the History. ParkPlace and Digitalk where the first major commercial players in the Smalltalk arena, they merged and then went out of business.

闲聊: 人们向前看如果是真的: [想]如果是假的: [不想]

露比: 人们往前想,除非往后想

1) Smalltalk 类似于 RPN 的消息控制流程就像 Lisp 一样——它很规则,很酷,但是让人感觉很奇怪。

2) Ruby 让人们用惯用的说话方式来编写代码——不这样做是有原因的。

Update 重写了 Smalltalk 示例,使其更加合法。

Ruby 对于 Smalltalk 就像阿拉伯数字对于罗马数字一样。

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

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

鼓声响起。

...

答案是... Kent Beck

我会比 Jonke 的回答更进一步,说现在有大量的语言有一个非常强大的社区,几乎足以适合每一种口味,其中一个子集有主流认可(即你的经理也会让你在工作中使用它们)。

学习一门语言的基本知识很容易,但要有效地使用它,你需要投入足够的时间来学习平台和工具,以及语法和习语。IIRC,麦康奈尔声称需要大约三年的时间才能变得真正精通。

考虑到这些因素,花费大量时间在诸如 LISP 和 Smalltalk 这样的语言上是很难说得过去的,尽管它们看起来很有趣,或许也很有教育意义。

Robert Martin 的有趣观点(来自 RailsConf 2009) : “是什么扼杀了闲聊也可能扼杀 Ruby”

I love both Smalltalk and Ruby - but have found that Ruby is more applicable to what I do daily, and is closer to my heart (practically speaking). What does Ruby offer that Smalltalk doesn't?

  • 基于文本的脚本
  • 低实现需求(在更多地方运行)
  • 更容易学习和证明(Perl 和 Python 程序员在使用 没有时会遇到麻烦
  • 更容易移动程序-文本文件!
  • 与本地环境良好的接口
  • Anywhere Java runs, jRuby runs...
  • 更大更活跃的社区

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

问倒我了。我花了一年时间研究 Ruby,做了一些小项目,看看自己有多喜欢它。我想我是一个 Smalltalk 的偏执狂,因为每次我坐下来和 Ruby 一起工作的时候,我都会叹气并且想“我真的更愿意在 Smalltalk 做这件事”。最后我屈服了,回到了 Smalltalk。现在我更开心了。越快乐越好。

Which of course begs the question, "Why?". In no particular order:

  1. 因为 IDE 比我以前工作过的任何东西都好。这包括一系列平台,从 IBM 大型机上的 ISPF 到微软的 Visual (。包括诸如 Visual Basic 4-6,Visual C + + (各种版本) ,Borland’s Turbo Pascal 及其后代(例如 Delphi) ,以及 DEC 机器上的字符模式和 X-Windows 下的东西。
  2. 因为图像是一个美丽的居住地。我能在里面找到我想要的。如果我不知道如何去做一些事情,我知道图像中的 某个地方就是我正在尝试做的事情的一个例子——我所要做的就是搜寻,直到我找到它。而且它是自我记录的——如果你想知道一些东西是如何工作的,只需要在你感兴趣的类上打开一个浏览器,看看这个方法,它就是这样工作的。(好吧,最终你会碰到一个叫做原始的东西,然后是“这里有龙”,但是从上下文来看通常是可以理解的)。在 Ruby/C + +/C 中也可以做类似的事情,但是没有那么容易。简单比较好。
  3. The language is minimal and consistent. Three kinds of messages - unary, binary, and keyword. That describes the priority of execution, too - unary messages first, then binary messages, then keyword messages. Use parentheses to help things out. Dang little syntax, really - it's all done with message sends. (OK, assignment isn't a message send, it's an operator. So's the 'return' operator (^). Blocks are enclosed by square brace pairs ([ ] ). Might be one or two other 'magic' bits in there, but darn little...).
  4. Blocks. Yeah, I know, they're there in Ruby (and others), but dang it, you literally can't program in Smalltalk without using them. You're forced to learn how to use them. Sometimes being forced is good.
  5. 没有妥协的面向对象程序设计——或者说没有其他选择。你不能一边假装你在“做对象”,一边还在做同样的事情。
  6. 因为这会让你的大脑活跃起来。我们已经习惯的舒适结构(if-then-else、 do-while、 for (; ;)等)已经不存在了,所以你必须学习一些新的东西。这里有上述所有的等价物(和更多的) ,但你必须学会以不同的方式思考。与众不同是好事。

On the other hand this may just be the ramblings of a guy who's been programming since the days when mainframes ruled the earth, we had to walk five miles to work through blinding snowstorms, uphill both ways, and computers used donuts for memory. I've got nothing against Ruby/Java/C/C++/, they're all useful in context, but give me Smalltalk or give me...well, maybe I should learn Lisp or Scheme or... :-)

你可以很容易地找到一份做 Ruby 的工作。虽然我真的很喜欢 Smalltalk,但是要进入 Smalltalk 的利基市场几乎是不可能的。这里面有很多工作,但是如果你在它流行的时候没有被录取的话,现在几乎是不可能的。

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

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

如果他们需要 VPS 或专用服务器来使用它们,那些没有洗过澡的大众永远不会使用它们。恕我直言,海滨是优于几乎任何其他,但它会运行在梦主机或网络派别?

Use whatever makes you more powerful and faster to beat your challenge.

对于 我们来说,一个小小的内部框架,我们在海边建造的房子真的是我们的超能力。

我喜欢 RoR 社区,它有正确的态度。这是非常非常有价值的。但与此同时,从技术上来说,海滨让你在面对更复杂的问题时变得更强大。

你可以使用开源的东西做很棒的海边网络应用。

Dabbledb 是一个基于海边的网站,嘿! Avi 今年六月把它卖给了 Twitter!

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

Just go for it. Make it done. Show us that works.

You're not alone. We are on the same boat.

Ruby (或任何其他语言)比 Smalltalk (或任何其他语言)更受欢迎,因为我们生活在一个混乱的宇宙中。也就是说:

  • From Dave Thomas himself, "[after 关于“如何建立一个博客”的视频 十分钟... 露比从 一种不错的小众语言 作为你写的一种语言 2010年 Ruby 大会(Ruby Conference 2010) 主题演讲
  • 早期的 Smalltalk 供应商收费过高
  • 因为 Smalltalk 是在30年前发明的(超前于它的时代) ,所以很多人认为它是一种古老的“死”语言(比如 FORTRAN)
  • 企业认为 Smalltalk 具有如此的竞争优势

While the languages are similar in OO features, Smalltalk's 杀手 advantage is the live, open environment (the much-misunderstood 'image'). After you check out Smalltalk 编程的例子, the debate is over.