4

我正在为 python、ruby 和 php 开发一个 IDE。

我自己从未使用过 Smallltalk(即使它在我上大学时非常流行)我想知道仅显示一种方法的经典 Smalltalk 浏览器是否真的是对经典文件编辑的改进或不是。

我自己喜欢在课堂上尽可能多地进行概述。现在我在两列模式下使用 24" 1280x1920 显示器,它可以显示很多行。

我个人不得不想知道如果你也有一个好的代码折叠编辑器有什么好处,用户可以通过一个按键折叠所有的def(函数代码体)。

但是我在新闻组中不时看到要求使 xxx 变得更小话的请求。我知道有些人可能想要基于图像的版本,但浏览器是 Smalltalk 的第二大不同发明。

4

6 回答 6

5

Smalltalk 浏览器有两部分:顶部显示包、类、协议和方法/消息,底部显示一种方法的内容。如果您在设计/编码程序时更多地考虑签名和名称,而不是作为代码行网络,这将非常有用。

如果您专注于签名,这可能会导致更“面向对象”的风格,其中系统被设计为对象之间的协作,相互发送消息。在这个范例中,方法名称在某种程度上比它们的实现方式更重要。

如果您有一个非常大的屏幕(我自己也有一个 :-)),您将打开几个 smalltalk 浏览器,允许您在几个不同的包和类中浏览(和编码)。此外,您可能还会有一个工作空间和一个 xUnit 来测试和使用您的对象。

我建议您查看为 Squeak 创建的 Whisker 编辑器。它在名称和签名导航以及代码探索行之间提出了很好的平衡。您需要尝试一下,因为屏幕截图没有显示它的动态,以及您如何通过代码“框”导航。

http://www.mindspring.com/~dway/smalltalk/whisker.html

于 2009-08-19T10:50:19.957 回答
3

Eclipse 提供了一个类似于 Smalltalk 的浏览器,即 Java 浏览透视图。尽管我自己是一个 Smalltalker,但我几乎从不使用它。为什么?如果 Smalltalk IDE 是调试器而不是浏览器,那么强大的部分。在编写 Smalltalk 代码时,我先进行所有测试,然后运行测试时修复调试器中所有缺失的方法。对任何其他语言都有这个就像......哇,哇,所以继续做这个:)

于 2009-08-26T13:40:15.923 回答
2

VisualAge for Java 使用 Smalltalk Browser 模型进行编码,我认为他们 (IBM) 在采用典型的基于文件的语言并将其提升到更高的概念模式方面做得很好。实例化甚至有一个很棒的附加组件,可以为 VAJ 带来好的重构工具(人们要么不知道,要么忘记首先引入了哪种语言重构工具……猜一猜;)当然,我已经在 Smalltalk 上咬牙切齿了,然后转向 C++ 多年(太多),很高兴看到任何类似 Smalltalk 的东西。当我看到 IBM 正在认真推进 Eclipse 时,我大吃一惊。

但当时我的大多数同事都不喜欢不能一次看到 .java 文件的整个文本。我会问,“为什么不在一个类中只有一个方法,这样你就可以一次看到所有的类文件?” 然后有人会回答:“那我根本无法很好地分解我的代码!” 我会回答:“如果你的代码分解得很好,为什么你需要同时查看每个方法?” 然后我会得到一个关于事情变慢的回应......

代码数据库是一个文本文件系统并迫使您以这种方式处理代码的开发环境对我来说似乎总是迟钝……尤其是在 OO 语言的情况下。

话虽如此,我不喜欢传统的 Smalltalk 浏览器的一些地方。我经常想要一种更好的方式来浏览我打开和访问过的浏览器实例。每当您使用代码时,总会有一个您正在使用的方法和类的上下文(修改和/或查看) - 在您工作时动态发展的上下文中导航应该更简单。我还希望能够一次轻松地将 2-3 个方法体的视图组合在一起 - 代码折叠编辑器可以给你一些东西,至少对于一个文件......

于 2009-08-19T21:47:58.680 回答
2

好吧,这很古老——但我简直不敢相信没有人想到打开几个浏览器。我想我从来没有见过任何人只用一个 Smalltalk 系统编程。类浏览器、层次浏览器、协议浏览器……是的,每一个都在任何时候显示一个方法源,但只是将每个指向不同的方法!

于 2014-03-09T05:31:02.433 回答
1

说类浏览器只显示一种方法有点简单。它实际上以比原始源代码通常更有条理的方式显示了许多方法。考虑一下您认为在哪一个中您可以更轻松地找到您想要的东西:

class Thing
  def foo
    blah blah blah
    blah.each do |blah|
      blah blah blah blah
      blah.collect {|blah, blah| blah blah blah}
    end
  end


  def bar(blah)
    blah blah blah
    blah.each do |blah|
      blah blah blah blah
      blah.collect {|blah, blah| blah blah blah}
    end
  end
end

class Fob
  def foo
    blah blah blah
    blah.each do |blah|
      blah blah blah blah
      blah.collect {|blah, blah| blah blah blah}
    end
  end


  def bar(blah)
    blah blah blah
    blah.each do |blah|
      blah blah blah blah
      blah.collect {|blah, blah| blah blah blah}
    end
  end
end

或者:

Classes     Methods

Thing   ->  foo     ->  blah blah blah
Fob         bar         blah.each do |blah|
                          blah blah blah blah
                          blah.collect {|blah, blah| blah blah blah}
                        end

一个实际的 Smalltalk 类浏览器比我愚蠢的小明文模型强大得多,而 Ruby 源代码实际上看起来很像。类浏览器鼓励您将类视为具有自主行为的实际实体,而不是一堆抽象文本。

于 2009-08-19T06:49:11.940 回答
0

我对 Smalltalk 浏览器有爱/恨的关系(在我的例子中是 Squeak)。有时我认为它们是自切片面包以来最好的东西,有时它们让我咬牙切齿。Smalltalk 的问题在于浏览器基本上是你所拥有的。你当然可以自己写,但很少有人走这条路。而对于基于文件的语言,我可以选择查看代码的方式,如果我愿意,可以使用完全不同的编辑器或环境。但是,查看我从未想要的代码的一种方法是一次只让我看到一种方法。

于 2009-08-19T08:12:01.383 回答