curation & gather 2
This commit is contained in:
64
references/grok_search_query_4.md
Normal file
64
references/grok_search_query_4.md
Normal file
@@ -0,0 +1,64 @@
|
||||
**Yes – minimal but noted.**
|
||||
|
||||
https://github.com/guitarvydas/forthish is a **low-activity educational repo** (26 commits, 1 star, last touched years ago) containing **progressive Python prototypes** that teach Forth internals by building up from scratch.
|
||||
|
||||
### What aligns (conceptually useful for your dictionary / threading baseline before x86 asm)
|
||||
- **Direct Threaded Code (DTC)** implementation (explicitly called out in `fcomp.py`):
|
||||
> "If you care, this is effectively a DTC (Direct Threaded Code) implementation."
|
||||
|
||||
- **Execution tokens (`xt`)** + classic dictionary layout (name field / link field / code field) in `fram.py`.
|
||||
|
||||
- **Compilation state machine** (`state` var: 0=interpret, 1=compile) + colon definitions (`:`, `;`, `if`/`else`/`then`, literals, branches) in `fcomp.py`.
|
||||
|
||||
- Progressive layering:
|
||||
`simple.py` (bare stack + parser)
|
||||
`fram.py` (dictionary + `xt` + `execute`)
|
||||
`fvars.py` (memory, `!` `@` `,`)
|
||||
`fcomp.py` (full user words + DTC)
|
||||
|
||||
No ColorForth, no 32-bit tokens/tags, no sourceless, no hex-editor, no tape-drive scatter, no 2-reg stack, no x86-64/machine-code, no live reload, no Lottes/Onat mentions.
|
||||
|
||||
It does link out to things you already have (colorforth.github.io, JonesForth, Chuck Moore papers).
|
||||
|
||||
**Bottom line:** Pure high-level teaching aid for understanding DTC / `xt` / dictionary mechanics in a readable Python form. Not a direct blueprint for your zero-overhead x86 token array + hex frontend, but could serve as a clean reference if you want to sketch the threading model before dropping it into asm.
|
||||
|
||||
That’s everything worthwhile in the repo. Nothing deeper.
|
||||
|
||||
---
|
||||
|
||||
**Yes.**
|
||||
|
||||
Zydis **fully supports encoding** (code generation / assembling raw bytes from instruction structs) via the stable `ZydisEncoder` API.
|
||||
|
||||
- Core library (not separate module)
|
||||
- Production-ready since ~v4.0 (current stable: v4.1.1 as of Feb 2025)
|
||||
- Zero dynamic allocation, thread-safe, tiny overhead — perfect fit for your instant <5 ms token → x86-64 emission in the sourceless ColorForth derivative
|
||||
- Companion **zasm** (https://github.com/zyantific/zasm) gives AsmJit-style C++ frontend on top of the same encoder (mentioned in your ASM_Notes)
|
||||
|
||||
### Minimal encoding example (C, direct from official README)
|
||||
```c
|
||||
ZydisEncoderRequest req;
|
||||
memset(&req, 0, sizeof(req));
|
||||
|
||||
req.mnemonic = ZYDIS_MNEMONIC_MOV;
|
||||
req.machine_mode = ZYDIS_MACHINE_MODE_LONG_64;
|
||||
req.operand_count = 2;
|
||||
req.operands[0].type = ZYDIS_OPERAND_TYPE_REGISTER;
|
||||
req.operands[0].reg.value = ZYDIS_REGISTER_RAX;
|
||||
req.operands[1].type = ZYDIS_OPERAND_TYPE_IMMEDIATE;
|
||||
req.operands[1].imm.u = 0x1337;
|
||||
|
||||
ZyanU8 encoded[ZYDIS_MAX_INSTRUCTION_LENGTH];
|
||||
ZyanUSize len = sizeof(encoded);
|
||||
|
||||
if (ZYAN_SUCCESS(ZydisEncoderEncodeInstruction(&req, encoded, &len))) {
|
||||
// encoded now holds e.g. 48 C7 C0 37 13 00 00
|
||||
}
|
||||
```
|
||||
|
||||
This is exactly the kind of zero-overhead emitter you can drop into your 32-bit token compiler loop (pair with Zydis decoder for round-tripping if needed).
|
||||
|
||||
Full docs: https://doc.zydis.re/v4.1.0/html/group__encoder
|
||||
Repo: https://github.com/zyantific/zydis (examples/ folder has more)
|
||||
|
||||
Nothing else needed unless you want a stripped minimal build snippet or zasm wrapper example.
|
||||
Reference in New Issue
Block a user