Ramsey Nasser

Results 64 issues of Ramsey Nasser

clojure supports a compiler mode where functions are invoked directly (as static methods) rather than going through vars. we will still need to initialize namespaces the way we do now,...

optimization

Due to a limitation in System.Reflection.Emit we cannot call `GetRequiredCustomModifiers` on `FieldBuilder`s. We need this to know if a `FieldBuilder` is `volatile` or not. We were doing our own bookkeeping...

bug

The current implementation of Clojure data readers requires filesystem access at the top level of `core.clj`, which will not work on iOS. Those forms are commented out for now. We...

enhancement

Clojure supports a kind of optimized keyword lookup call site that makes use of `ILookupThunk` and `KeywordLookupSite`. MAGIC should emit similar lookup sites.

optimization

```clj (deftype ^{ObsoleteAttribute "abc" FileDialogPermissionAttribute SecurityAction/Demand FileIOPermissionAttribute #{SecurityAction/Demand {:__args [SecurityAction/Deny] :Read "def"}}} Bar [^int a ^{:tag int NonSerializedAttribute {} ObsoleteAttribute "abc"} b] Foo (^{ObsoleteAttribute "abc" FileDialogPermissionAttribute SecurityAction/Demand FileIOPermissionAttribute #{SecurityAction/Demand {:__args...

enhancement

All variadic function invocation currently happens through `IFn`, which will drop the types of any hinted required arguments. Ideally our generic `Magic.Function` interfaces would support the variadtic case as well...

optimization

The implementation of `case` as of #97 emits a linear search when the `:switch-type` reported by the macro is `:sparse`. This is categorically slower than the binary search `lookupswitch` that...

optimization

The current implementation of integer division is not type stable. ```clj user> (type (/ 4 2)) System.Int64 user> (type (/ 4 3)) clojure.lang.Ratio ``` This trips up MAGIC's type flow...

optimization

We don't properly support enums in `case` expressions even though they should compile into very efficient jump tables. The following ```clj (case ConsoleColor/Black ConsoleColor/Yellow 1 ConsoleColor/Blue 2) ``` analyzes to...

enhancement

The current implementation of the analyzer is somewhat slapdash, an accumulation of technical debt and learning experiences over the year. it's partially `tools.analyzer`, but then it does its own typed...

chore