• Home
  • Raw
  • Download

Lines Matching full:is

13 There is a central processing unit (CPU) that reads commands (or _instructions_) from
19 is used for storing local variables along with function arguments and doing function calls.
26 Here comes the bytecode. Simply said, it is an attempt to build an abstract CPU on top of real
28 special program called _interpreter_. The goal of the interpreter is to read our unified _virtual_
32 (debugger, profilers, etc.) is also unified, as well as the ecosystem for managing libraries,
37 In case there is a chance for ambiguity, the terms "virtual registers" and "virtual stack" are used
40 Just as real CPUs can expose different instruction set architectures, there is no universal way of
45 One very important question is how an operation refers to its operands.
79 more _dispatch overhead_. Which means that the stack-based bytecode is slower by nature.
85 Since bytecode interpretation is a required program execution mode for Panda, performance of the
86 interpreter is very important, that's why
99 Panda bytecode has a dedicated register called _accumulator_, which is addressed implicitly
110 With this approach, we are no longer required to encode destination register, it is "hardcoded" to
118 are popular) and for increment/decrement instructions (when loop variable is only read in a loop
178 (which is rare) and which is supposed to have only acc-reg form. Another good candidates for
184 Another important question is how bytecode is supposed to handle various data types. Back to our
187 One option is to make the operation _statically typed_, i.e. specify explicitly that it works only
191 Another option is to make the operation _dynamically typed_, i.e. specify that `adda ...` handles
199 It may seem that the dynamically typed approach is better for dynamically typed languages, but it
200 is true only if the platform is **not** supposed to support multiple languages.
201 Consider a simple example: what is the result of the expression `4 + "2"` in JavaScript and, say,
212 language? No, it does not. In practice, it is always possible to compile a dynamically typed
218 and `reg2` **must** hold only integer values throughout the function? Fortunately, the answer is
220 which do not distinguish between integers and pointers on many platforms). The key constraint is
221 that once a value of a certain type is store into a virtual register, all operations on that value
222 must be of this very type, unless the virtual register is redefined. Language compilers and