我现在已经进入Smalltalk学习航行了几个月.我知道,Smalltalk从一开始就有几种"方言"(也许"方言"不是最好的词),但我的意思是VisualWorks,Squeak和Dolphin只提三种.到目前为止,我限制了我对Visualworks和Squeak的尝试.但我现在已经发现Squeak似乎是变形(双关语!)到其他几个变种,如Tweak,Pharo,Cobalt和Croquet.
有人可以解释一下:a)为什么会出现这些举措(Tweak,Pharo,Croquet和Cobalt)?b)我应该花点时间跟上 - 记住我是一个Smalltalk新手吗?c)为什么这种不受欢迎的语言会发生如此充满活力的发展?d)我是否应该注意其他举措?(作为初学者而不是计算机研究员)
我正在开发一个吱吱声的应用程序,它根本不需要图形,它只是数据操作.问题是我在一个相当保守的环境中工作,我不认为我能够向我的经理们销售一个吱吱叫的应用程序(我觉得它们是明亮的颜色,圆形的界面和一般的"那是什么 - 那是 - 那个"吱吱的感觉会吓跑他们." 所以我正在考虑在GNU Smalltalk下运行应用程序,因为更"传统"的命令行界面不太可能吓跑利益相关者.
因此,任何人都可以提供或指向我,Squeak和Gnu Smalltalk之间的列表或一组功能/类是否兼容.换句话说,将应用程序从一个移植到另一个应用程序有多难(再次假设它是非图形的,所以不需要担心形态)?
谢谢!
所以我现在已经使用Smalltalk大约6个月了(Squeak和Pharo),主要是做数据分析,我即将开始我的第一个Seaside应用程序.所以你向所有Smalltalkers提出的问题是,你最喜欢的持久性解决方案是什么?我一直在看Magma,GOODS和GLORP.我是一个长期的python黑客,所以我得到ORM,但似乎Magma或GOODS将是一个更好的解决方案,因为它们看起来像面向对象.
快速说明:我想在多个VM上扩展我的应用程序,因此只需将数据保存到图像就不会真正起作用.
谢谢!
我正在研究Smalltalk反射,我想知道是否有可能扩展单个对象,例如在Ruby中可能.对此我指的是只有特定对象响应的选择器.
这是一些Ruby代码,说明我的意思.为了澄清:在Ruby中,这将为此对象打开一个虚拟类,并使用新定义对其进行扩展.这里至关重要的部分是类定义没有任何改变!
o = Object.new
o.instance_eval {def foo;puts "foo";end}
o.foo #=> "foo"
#however this will fail:
m = Object.new
m.foo #=> NoMethod error
Run Code Online (Sandbox Code Playgroud)
更具体地说,我的问题是在标准Squeak/Pharo或其他smalltalk实现中是否可行,而不添加实质结构或代码来实现这一点.因此,使用Smalltalk中存在的常规反射特征的其他词语.
例如,可以添加方法,删除方法,将新代码编译到类中,更改实例变量以及任何内容,但我还没有找到扩展单个对象的方法.
Test addInstVarNamed: #var.
Test compile: 'var ^var'.
t:= Test new.
Test instVarNames.
t instVarNamed: #var put: 666.
t var. #=> 666
Run Code Online (Sandbox Code Playgroud)
如果答案是否定的,那么解释原因.我不是在寻找解决这个问题的方法,而是要理解为什么它不是小问题.
我下载了Squeak,Image文件和Sources文件,但我无法弄清楚如何编写Smalltalk代码.有什么明显的东西我不见了吗?Squeak甚至是严肃的Smalltalk开发的正确IDE吗?
我是Squeak和Smalltalk的新手但不是一般的编程(我有一些Python经验).
我理解Squeak环境中存在的各种工具,如工作区,系统浏览器以及Smalltalk语言结构.我理解它们是如何孤立地工作的,但我不确定如何将它们作为一个整体使用.
我的问题是在Squeak开发时的典型工作流程是什么.据我了解
I open squeak.
I create a Class in the System Browser.
I then write/test/execute code in the Workspace, adding methods
to my class based on the code I tried out in the Workspace.
Rinse and repeat for other classes.
Run Code Online (Sandbox Code Playgroud)
以上是典型的小公司,或者是我错过的东西.其他一般提示/陷阱(如果有的话)将不胜感激.
谢谢.
顺便说一句,我确实搜索了这个并阅读了一些教程,但没有得到任何令人满意的答案,所以没有lmgtfy链接请;)
上下文是这样的:
一个包在几个存储库中开发了几个分支
发展停止source.squeak.org,其目标是到分支,以便有发表在一个库中的所有版本转回squeaksource.
但为了方便人们浏览和快速识别分支,我希望在squeaksource副本的名称中添加标准分支标识.
有没有办法自动化这项操作?可能还有Gofer?
在Smalltalk中,如果您没有明确地返回任何内容,则传递的消息将评估为接收者(或消息上下文中的"self").
例如,给定此方法:
MyClass >> myMethod
Transcript show: 'hello'; cr.
Run Code Online (Sandbox Code Playgroud)
评估(doint"print-it")这个:
| myInstance |
myInstance := MyClass new.
myInstance myMethod.
Run Code Online (Sandbox Code Playgroud)
如果对最后一次调用执行<print-it>,则结果将是实例本身.
我有一个Squeak Morphic GUI的图像,它包含一些透明部分,因此不应该接受任何鼠标事件等但只是可见,但它需要在其他变形前面可见.
这就是为什么我认为将出现的鼠标事件传播到底层变形是有用的.有没有人知道我的问题的解决方案或解决它的其他建议.
V <- mouseDownEvent
_____________________________ <- transparent image (BorderedMorph)
_____ _____ _____
_| |___| |___| |__ <- buttons waiting for click and drop events
_____________________________ <- basic morph
Run Code Online (Sandbox Code Playgroud)
我希望这能说明我的问题.
这是一个开放式问题,但我想征求SO社区关于特征的一些意见; 你认为Squeak/Pharo中的Traits是好事,还是你应该远离它们并使用组合和代表团?我问,因为虽然我知道如何使用它们(感谢Pharo书),但我不确定使用它们是否可以接受,或者可以使用它们以及它不适用的地方.
smalltalk ×10
squeak ×10
pharo ×5
monticello ×1
morphic ×1
oop ×1
persistence ×1
porting ×1
reflection ×1
seaside ×1
traits ×1
visualworks ×1