Clojure

Report warnings if *unchecked-math* and boxing happens

Details

  • Type: Enhancement Enhancement
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Completed
  • Affects Version/s: Release 1.6
  • Fix Version/s: Release 1.7
  • Component/s: None
  • Labels:
  • Patch:
    Code and Test
  • Approval:
    Ok

Description

Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. The proposed enhancement here is to emit new warnings if *unchecked-math* is on and boxed math is occurring.

Approach: In the compiler, when compiling a StaticMethodExpr, if *unchecked-math* is true and the class is clojure.lang.Numbers and one of the parameters of static method is of type java.lang.Object or java.lang.Number, then emit a warning at compile-time.

In addition, there is a new WarnBoxedMath Java annotation - a small number of methods on Numbers with Object parameters use this annotation to indicate that warning should not take place. The same annotation can be (but is not currently) used to mark methods on Numbers without Object/Number params that should warn. See boxedmath.txt for a list of methods and categories.

Patch: clj-1325-v3.patch

Screened by:

  1. boxed.diff
    27/Mar/14 11:06 AM
    6 kB
    Alex Miller
  2. boxedmath.txt
    14/May/14 2:29 PM
    9 kB
    Alex Miller
  3. clj-1325.patch
    14/May/14 2:39 PM
    11 kB
    Alex Miller
  4. clj-1325-v2.patch
    16/May/14 11:19 AM
    11 kB
    Alex Miller
  5. clj-1325-v3.patch
    16/May/14 11:51 AM
    11 kB
    Alex Miller

Activity

Alex Miller made changes -
Field Original Value New Value
Patch Code [ 10001 ]
Approval Triaged [ 10120 ]
Description Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. Adding this warning (similar in use to *warn-on-reflection*) would warn when these calls are being made.

*Approach:* In the compiler, when compiling a StaticMethodExpr that is specifying a call into certain boxed math methods on Number, and if the warning is enabled, print the warning. The list of calls would need to be in a boxed math "black list" which would probably be created manually.

*Patch:*

*Screened by:*
Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. Adding *warn-on-boxed-math* warning (similar in use to *warn-on-reflection*) to warn when these calls are being made.

*Approach:* In the compiler, when compiling a StaticMethodExpr that is specifying a call into certain boxed math methods on Number, and if the warning is enabled, print the warning. The list of calls would need to be in a boxed math "black list" which would probably be created manually.

*Patch:* The attached patch is an *incomplete* sketch of the solution. It is not yet specific enough in determining whether the particular call to Numbers is doing boxed math - it merely looks for an Object argument, which does catch a large set of the actual calls, but may also ensnare some calls that should not be included. One option would be to mark the offending methods in Numbers with an annotation that could be checked in isBoxedMath.

*Screened by:*
Attachment boxed.diff [ 12902 ]
Alex Miller made changes -
Labels errormsgs math
Alex Miller made changes -
Approval Triaged [ 10120 ] Vetted [ 10003 ]
Fix Version/s Release 1.7 [ 10250 ]
Alex Miller made changes -
Assignee Alex Miller [ alexmiller ]
Alex Miller made changes -
Attachment boxedmath.txt [ 12942 ]
Alex Miller made changes -
Approval Vetted [ 10003 ] Incomplete [ 10006 ]
Alex Miller made changes -
Attachment boxedmath.txt [ 12942 ]
Alex Miller made changes -
Attachment boxedmath.txt [ 13018 ]
Attachment clj-1325.patch [ 13017 ]
Alex Miller made changes -
Patch Code [ 10001 ] Code and Test [ 10002 ]
Approval Incomplete [ 10006 ] Vetted [ 10003 ]
Description Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. Adding *warn-on-boxed-math* warning (similar in use to *warn-on-reflection*) to warn when these calls are being made.

*Approach:* In the compiler, when compiling a StaticMethodExpr that is specifying a call into certain boxed math methods on Number, and if the warning is enabled, print the warning. The list of calls would need to be in a boxed math "black list" which would probably be created manually.

*Patch:* The attached patch is an *incomplete* sketch of the solution. It is not yet specific enough in determining whether the particular call to Numbers is doing boxed math - it merely looks for an Object argument, which does catch a large set of the actual calls, but may also ensnare some calls that should not be included. One option would be to mark the offending methods in Numbers with an annotation that could be checked in isBoxedMath.

*Screened by:*
Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. The proposed enhancement here is to emit new warnings if \*unchecked-math\* is on and boxed math is occurring.

*Approach:* In the compiler, when compiling a StaticMethodExpr, if \*unchecked-math\* is true and the class is clojure.lang.Numbers and one of the parameters of static method is of type java.lang.Object or java.lang.Number, then emit a warning at compile-time.

In addition, there is a new WarnBoxedMath Java annotation - a small number of methods on Numbers with Object parameters use this annotation to indicate that warning should *not* take place. The same annotation can be (but is not currently) used to mark methods on Numbers without Object/Number params that *should* warn. See boxedmath.txt for a list of methods and categories.

*Patch:* clj-1325.patch

*Screened by:*
Affects Version/s Release 1.6 [ 10157 ]
Summary Add *warn-on-boxed-math* warning Report warnings if *unchecked-math* and boxing happens
Alex Miller made changes -
Attachment clj-1325.patch [ 13017 ]
Alex Miller made changes -
Attachment clj-1325.patch [ 13019 ]
Alex Miller made changes -
Description Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. The proposed enhancement here is to emit new warnings if \*unchecked-math\* is on and boxed math is occurring.

*Approach:* In the compiler, when compiling a StaticMethodExpr, if \*unchecked-math\* is true and the class is clojure.lang.Numbers and one of the parameters of static method is of type java.lang.Object or java.lang.Number, then emit a warning at compile-time.

In addition, there is a new WarnBoxedMath Java annotation - a small number of methods on Numbers with Object parameters use this annotation to indicate that warning should *not* take place. The same annotation can be (but is not currently) used to mark methods on Numbers without Object/Number params that *should* warn. See boxedmath.txt for a list of methods and categories.

*Patch:* clj-1325.patch

*Screened by:*
Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. The proposed enhancement here is to emit new warnings if \*unchecked-math\* is on and boxed math is occurring.

*Approach:* In the compiler, when compiling a StaticMethodExpr, if \*unchecked-math\* is true and the class is clojure.lang.Numbers and one of the parameters of static method is of type java.lang.Object or java.lang.Number, then emit a warning at compile-time.

In addition, there is a new WarnBoxedMath Java annotation - a small number of methods on Numbers with Object parameters use this annotation to indicate that warning should *not* take place. The same annotation can be (but is not currently) used to mark methods on Numbers without Object/Number params that *should* warn. See boxedmath.txt for a list of methods and categories.

*Patch:* clj-1325-v2.patch

*Screened by:*
Attachment clj-1325-v2.patch [ 13025 ]
Alex Miller made changes -
Description Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. The proposed enhancement here is to emit new warnings if \*unchecked-math\* is on and boxed math is occurring.

*Approach:* In the compiler, when compiling a StaticMethodExpr, if \*unchecked-math\* is true and the class is clojure.lang.Numbers and one of the parameters of static method is of type java.lang.Object or java.lang.Number, then emit a warning at compile-time.

In addition, there is a new WarnBoxedMath Java annotation - a small number of methods on Numbers with Object parameters use this annotation to indicate that warning should *not* take place. The same annotation can be (but is not currently) used to mark methods on Numbers without Object/Number params that *should* warn. See boxedmath.txt for a list of methods and categories.

*Patch:* clj-1325-v2.patch

*Screened by:*
Currently, it is difficult to tell that the compiler is using boxed math unless you look at the generated bytecode. The proposed enhancement here is to emit new warnings if \*unchecked-math\* is on and boxed math is occurring.

*Approach:* In the compiler, when compiling a StaticMethodExpr, if \*unchecked-math\* is true and the class is clojure.lang.Numbers and one of the parameters of static method is of type java.lang.Object or java.lang.Number, then emit a warning at compile-time.

In addition, there is a new WarnBoxedMath Java annotation - a small number of methods on Numbers with Object parameters use this annotation to indicate that warning should *not* take place. The same annotation can be (but is not currently) used to mark methods on Numbers without Object/Number params that *should* warn. See boxedmath.txt for a list of methods and categories.

*Patch:* clj-1325-v3.patch

*Screened by:*
Attachment clj-1325-v3.patch [ 13026 ]
Stuart Sierra made changes -
Approval Vetted [ 10003 ] Screened [ 10004 ]
Rich Hickey made changes -
Approval Screened [ 10004 ] Ok [ 10007 ]
Stuart Halloway made changes -
Resolution Completed [ 1 ]
Status Open [ 1 ] Closed [ 6 ]

People

Vote (1)
Watch (4)

Dates

  • Created:
    Updated:
    Resolved: