吱吱声的字面数限制

Ber*_*ann 3 smalltalk squeak literals

我现在第三次遇到这个问题,你们中的一些人吱吱作响者可能会从截图中认出最好的:

在此输入图像描述

以下是重现问题的示例代码:

d:=Dictionary new.
(1 to: 257) do: [:each|
    d at: each put: each
].
f:=FileStream fileNamed: 'asdf.txt'.
d storeOn: f.
f reset.
d2:=Dictionary readFrom: f.
f close.
Run Code Online (Sandbox Code Playgroud)

我知道它为什么会发生(编译器用于反序列化,它通过将整个文件放在一个方法中来实现).

在过去,我总是将我的代码更改为使用数据库或使用其他形式的序列化.但我想知道是否有一些方法可以修复Squeak来改变这项工作.

Tob*_*ias 6

目前,没有适当的方法.

问题是,CompiledMethods具有VM已知的格式,并且VM也期望这种格式.这包括256个文字限制.对方法格式的更改需要更改虚拟机.这就是为什么人们犹豫是否要改变字面上的限制直到现在.

最近,人们花费精力创建一种新格式,不仅用于方法,还用于完全改变Object格式:SPUR对象格式旨在增加方法中的文字数量等.