[squirrelfish] JavaScriptCore renames
Geoffrey Garen
ggaren at apple.com
Sat Nov 15 15:33:29 PST 2008
> This sounds good in general, although as I pointed out on IRC and
> will repeat for benefit of others here, I don't think "bytecode" and
> "opcode" are really synonyms. My understanding of the word would be:
>
> - bytecode is a mass noun, like "machine code" - you can't have "a
> bytecode"
> - a singular unit of bytecode is an "instruction", or "bytecode
> instruction" if you must
> - the part of the instruction that says operation to perform, rather
> than what the operands are, is an "opcode"
Fixed.
>> * "BytecodeGenerator"
>>
>> The class used to generate bytecode. "Generator" clearly indicates
>> that the class outputs bytecode, whereas a name like "compiler"
>> might mean that the class outputs bytecode, or it might mean that
>> the class takes bytecode as its input. Also, we thought that names
>> like "compiler" implied a larger suite of tools not included in
>> this class.
>
> I do believe that the term Bytecompiler specifically refers to a
> compiler that outputs bytecode, and can never refer to a compiler
> that takes bytecode as input instead. It's a little shorter. But
> technically our bytecompiler encompasses not just the
> BytecodeGenerator class but also all the emit functions in
> Nodes.cpp, so I'd probably use it for a directory, not a class.
>
>>
>>
>> * "BytecodeInterpreter"
>>
>> The class that executes a program in bytecode form. We liked the
>> symmetry with "BytecodeGenerator". We rejected names like
>> BytecodeVM because we thought the name "virtual machine" was a
>> little too vague, and it implied a larger suite of functionality
>> not limited to this class.
>>
>> * "JIT"
>>
>> The class that translates a program in bytecode form to CPU-
>> specific code. We rejected "BytecodeJIT" because we couldn't tell
>> if a BytecodeJIT had bytecode as its input or its output. It's not
>> symmetric with BytecodeInterpreter, but oh well. We liked "JIT"
>> because we thought that interpreter vs JIT was a widely used and
>> understood dichotomy.
>
> I like all of these.
Cameron and I now regret "BytecodeInterpreter". We think
"JSC::Interpreter" is pretty darn clear, and it matches "JSC::JIT".
Putting "bytecode" in the name just feels redundant. JSC has no non-
bytecode interpreters.
What do you think?
>> So we have this directory structure:
>>
>> bytecode
>> -> generator
>> -> interpreter
>> -> jit
>> -> sampler
>
> I'm not sure I like having a lot of subdirectories under bytecode
> though, particularly since they will each contain so few files. I'd
> propose:
>
> - bytecodegenerator or bytecompiler at top level (Bytecompiler is a
> slightly more concise term of art for a compiler that outputs
> bytecode, with no ambiguity about whether the bytecode is going in
> or out)
> - a bytecode directory at top level containing general bytecode data
> structures and the bytecode interpreter
> - a jit directory at top level
> - sampler stuff relegated to one of the above
>
> That's more in line with the directory structure we all discussed
> before, and which we've barely had a chance to get used to.
On IRC, we agreed to:
bytecode: holds CodeBlock*, EvalCodeCache.h, Opcode*, Instruction.h
bytecompiler: holds BytecodeGenerator*, RegisterID.h, Label.h,
LabelScope.h, SegmentedVector.h
interpreter: holds BytecodeInterpreter (Interpreter?), Register.h,
RegisterFile*
jit: holds JIT*, JITStubs*
Geoff
More information about the squirrelfish-dev
mailing list