2010-10-27 117 views
8

我在網上搜索瞭如何在Scala中執行srictfp,但找不到任何提示。有些人抱怨,但真正的解決方案無法找到。有一個關於它的bugtracker entry,差不多兩年了。因爲在我尋找解決方法的方式上似乎沒有優雅的解決方案。Scala中沒有strictfp - 解決方法?

我目前的想法是設置適當的方法標誌ACC_STRICT在我自己以某種方式生成的字節碼,但我不知道什麼是最好的解決方案這樣做。 Scala編譯器插件讓人想起或者只是在十六進制編輯器中黑客入侵。也許有人面臨同樣的挑戰,並可以告訴我他或她的解決方案?

+0

我挖你'ACC_STRICT'辦法! :D – aioobe 2010-10-27 15:15:29

+0

一個編譯器插件將受到Scala社區的讚賞。 – 2010-10-27 17:45:16

+0

@Dave Griffith,當然最好的解決方案是讓Scala本地支持'strictfp'(即能夠用這個標誌生成字節碼),正如bugtracker條目中所報告的那樣。 – Bruno 2010-10-27 18:56:09

回答

5

您可以在您的構建過程中添加一個後處理器,它將strictfp修飾符添加到生成的類(即按照您的說法設置ACC_STRICT標誌)。

例如,您可以使用Javassist來實現這樣的後處理器。這可能看起來像這樣:

CtClass clazz = ClassPool.getDefault().makeClass(
        new FileInputStream("old/HelloWorld.class")); 

CtMethod method = clazz.getDeclaredMethod("testMethod"); 

method.setModifiers(method.getModifiers() | Modifier.STRICT); 

clazz.detach(); 
clazz.toBytecode(new DataOutputStream(new FileOutputStream(
    "new/HelloWorld.class"))); 

然後,您將不得不找到一種方法來配置哪種類/方法需要以這種方式進行修改。

+0

這看起來很有前途,比開發一個Scala編譯器插件更容易 - 我會嘗試,並且如果設置了給定的註釋,將會觸發設置ACC_STRICT標誌。應該是一個沒有腦子的問題。謝謝! :) – Malax 2010-10-28 12:54:18

0

斯卡拉現在有一個strictfp註釋:

@strictfp 
def f() = … 
相關問題