-
Notifications
You must be signed in to change notification settings - Fork 18
Difference between Safe and Unsafe Mode
The Speedy.js exists in two variations: a safe that often behaves identically to the JavaScript specification and an unsafe implementation that follows c like semantics. This page describes the differences between the two modes. By default. the unsafe runtime is used to achieve the highest possible throughput. However, it might be useful to use the safe mode during development or when encountering unexpected behavior.
Range Checks: The safe mode adds in range checks to prevent illegal memory access. For example, accessing an index out of range results in a runtime exception. The unsafe mode omits all these checks.
Memory initialization: The safe mode guarantees that all array elements are initialized with the default value of the element type. The unsafe mode does not default initialize elements as it is an expensive operation. Therefore, accessing elements for which no value has been assigned may return arbitrary values.
Memory initialization: The safe mode guarantees that object fields are either initialized with a user defined value or the default value of its type. On the contrary, fields are not default initialized in the unsafe mode. Therefore, a field contains an arbitrary value until a value has explicitly been assigned.
toInt32: The safe mode implements the toInt32 operation ---used to cast a number to an int--- as defined by the standard. The unsafe mode simply casts the value to an int, which may truncate the value.