-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
perpare for more compact bit operations in JS #16728
Conversation
see also: #14128 which is relevant. The fact that your PR lives in std/private is good, it means we can keep improving the API until it stabilizes |
func newUint32Array*(buffer: ArrayBuffer): Uint32Array {.importjs: "new Uint32Array(#)".} | ||
|
||
func `[]`*(arr: Uint32Array, i: int): uint32 {.importjs: "#[#]".} | ||
func `[]=`*(arr: Float64Array, i: int, v: float) {.importjs: "#[#] = #".} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should this be arr: Float64Array
or arr: var Float64Array
? I'm really not sure here since the type is ref
, but really, Float64Array + friends act like seq, so var seems to make more sense here.
what are downsides of using var here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
var
will generates array of typed array
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, this is generally true of var
in nim js
; the question is whether this has a performance impact in this case or whether v8 can optimize this (I'm not sure how to check other than performance timing)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems to cause some errors in some situations, but I forgot the example.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
note that for var you need the awkard syntax like this: [#][0][0]
# eg: jsbigints:
func inc*(this: var JsBigInt; amount: JsBigInt) {.importjs: "([#][0][0] += #)".} =
(until nim-lang/RFCs#315 is resolved)
Before: it is hard to reuse same variables by emitting JS(see #16609)
After
You could reuse these variables in a proc.