From 0874f5941dd2699240f9fc3a2912cf2e99d82c9c Mon Sep 17 00:00:00 2001 From: multipleof4 Date: Mon, 22 Sep 2025 16:40:12 -0700 Subject: [PATCH] Refactor: Make Block documentation syntax-focused --- index.html | 42 ++++++++++++++---------------------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/index.html b/index.html index c6c99b0..a8f2fbb 100644 --- a/index.html +++ b/index.html @@ -108,10 +108,10 @@ version = 1.1 // Assignment ## The Block: Unifying Objects and Functions -In Hi, the distinction between objects and functions is eliminated. Both concepts are unified into a single, foundational structure: the **Block** (\`{}\`). A Block is a sequence of expressions that can hold data, executable code, or both, making it a powerful tool for building complex structures. +The **Block** (\`{}\`) is Hi's foundational structure, unifying data objects and executable functions. It is a sequence of expressions that can be invoked with \`()\`. ### As a Data Structure (Object) -When a Block contains primarily named declarations (\`key: value\`), it behaves like a traditional object or dictionary. A \`#\` prefix denotes a private property, making it inaccessible from outside the block. +A block can hold \`key: value\` pairs. A \`#\` prefix denotes a private property. \`\`\`javascript player: { @@ -124,58 +124,45 @@ _(player.hp) // -0 (null) because #hp is private \`\`\` ### As Executable Code (Function) -When a Block is invoked via \`()\`, its sequence of expressions is executed. +Invoking a block with \`()\` executes its expressions. The value of the last expression is implicitly returned. \`\`\`javascript +// Simple invocation sayHi: { _("Hi") } -sayHi() // Invokes the block, prints "Hi" +sayHi() // Prints "Hi" -greet: (name) { _("Hi, " + name) } -greet("Orion") // Prints "Hi, Orion" +// With parameters and return value +add: (a, b) { a + b } +_(add(2, 3)) // Prints 5 \`\`\` -### The Hybrid Block: Data and Logic Combined -The true power of Hi's design emerges when a Block contains both data declarations and executable statements. This creates a hybrid structure that can act as a stateful object, a function, or a factory for creating other objects. - -When a Block is invoked (\`()\`), its expressions are executed in sequence. Any data declarations inside are re-initialized with each call, making Blocks natural factories. The value of the Block's *last expression* is implicitly returned. +### As a Hybrid (Factory/Class) +A block can contain both data and logic. When invoked, its internal declarations are re-initialized, making it a natural factory. The context symbol \`@\` can be used to return the newly created instance. \`\`\`javascript -// This block is a factory for creating player objects. createPlayer: (name) { - // 1. Data declarations are initialized on each call name: name, hp: 100 - - // 2. An action is performed - _("Created " + name) - - // 3. The last expression returns the context (@), - // which is the newly configured block. - @ + @ // Return the new block instance } -// Invoking the block executes its logic player1: createPlayer("Orion") - -// Accessing the data from the returned block _(player1.name) // "Orion" _(player1.hp) // 100 \`\`\` -In this example, \`createPlayer\` is a Block that, when called, configures and returns a new Block. Each call to \`createPlayer\` produces a distinct player object with its own initial state. ### Expression Separators -To support code golfing, expression separators within a Block are flexible. Newlines act as implicit separators, while commas (\`,\`) or semicolons (\`;\`) are required to separate expressions on the same line. +Newlines act as implicit separators. Commas (\`,\`) or semicolons (\`;\`) are required for single-line blocks. \`\`\`javascript -// Multi-line style (separators optional) +// Multi-line point: { x: 10 y: 20 } -// Single-line style (separators required) +// Single-line point: { x: 10, y: 20 } -point: { x: 10; y: 20 } \`\`\` ## Arrow Expressions @@ -498,4 +485,3 @@ To create the initial Hi-to-JS transpiler, the following primitives and built-in -