Skip to content

Releases: deekshith-poojary98/echo

Echo v2.2.1

Choose a tag to compare

@deekshith-poojary98 deekshith-poojary98 released this 28 Oct 21:07

Crash hardening and path safety. Second 2.2 slice. Failure model unchanged. No new language syntax.

Host / builtins:

  • Reject oversized integers so parse, print, diagnostics, ask, exit, repeat / pad, rangeList, and regex {n} counts cannot crash the interpreter
  • Reject unbounded recursion on deeply nested expressions and function calls (RecursionError → Echo abort)
  • Reject NUL bytes and non-HTTP URLs so host builtins / httpGet cannot crash
  • Reject cyclic symlinks so file builtins cannot crash with Python traceback
  • removeFile / removeTree no longer delete through symlinks; removeTree("") and removeTree("..") cannot wipe the working directory or parent
  • exit() rejects status values that do not fit in a C long
  • order() stays safe when the comparator mutates the list; string allocation failures in repeat / pad abort cleanly

Language / tooling correctness:

  • Unescape switch string arms and hash-literal keys so escaped literals match and elang fmt stay consistent
  • Keep elang fmt from rewriting overflowed floats as inf, or breaking strings that contain quotes
  • Lexer rejects deeply nested interpolations and interpolation quotes that end with a backslash instead of crashing
  • CLI rejects unreadable source files instead of crashing
  • Formatter string-wrap path is valid on Python 3.10 / 3.11 (no backslash inside f-string expressions)

Echo v2.2.0

Choose a tag to compare

@deekshith-poojary98 deekshith-poojary98 released this 29 Sep 20:47

Echo 2.2.0 — Desktop IDE

Run Echo without a terminal. Opens the 2.2.x series. No new language syntax; the failure model is unchanged.

elang ide

elang ide              # empty buffer
elang ide hello.echo   # open a file

A native desktop window: type a program, click Run, read the output. Built on stdlib Tkinter, so there is no new PyPI dependency.

  • Editor with line numbers, Echo syntax highlighting, current-line highlight, two-space indent, and auto-indent after {
  • Output pane that separates stdout from stderr, with a run-status pill and elapsed time
  • Open / Save / Save As, unsaved-change marker, and Cmd/Ctrl shortcuts (N, O, S, R, Q) plus F5 to run
  • Runs the unsaved buffer in-process, so you can type and Run without saving first; programs that import are saved first so the module loader reads the same text
  • Missing Tkinter prints an install hint (brew install python-tk@3.13) and exits 1 instead of a traceback

Fixes

  • httpGet decodes responses that declare an unknown charset instead of aborting
  • yamlParse rejects cyclic YAML aliases instead of recursing until the interpreter dies

Docs

  • New beginner path: nine learn/ lessons, three practice/ pages, and start/choose-your-path
  • Playground page and UI refactor; the obsolete echo_documentation.md moved under archive/

Install: pip install --upgrade echolang · Verify: elang --version → Echo 2.2.0

Echo v2.1.9

Choose a tag to compare

@deekshith-poojary98 deekshith-poojary98 released this 26 Sep 22:42
13baba0

Echo 2.1.9

Two closed series on the same failure model (abort + *Or; no try/catch) and no package registry.

Series Message
2.0.x Path resolution + std/… modules — not a package manager
2.1.x YAML + thin LSP stub + std maturity on that 2.0 surface

2.0.x — Modules beyond siblings + std peel

Highlights

  • Nested / relative imports: "./math", "../shared", "lib/math"
  • Reserved import … from "std/…" from the Echo install tree (ECHO_STD_ROOT overridable)
  • Builtin families peeled into std modules with a dual-path prelude (still importable from prelude by default)
  • Optional --require-std / Host.require_std to hide peeled names from the prelude
  • Clearer module diagnostics (E3001–E3005)

By version

Version What shipped
2.0.0 Relative / nested import paths
2.0.1 Cycle / not-found / invalid-specifier diagnostics polish
2.0.2 std/… install-tree path; seed std/meta
2.0.3 std/http — HTTP family
2.0.4 std/url, std/base64
2.0.5 std/fs, std/json, std/os
2.0.6 std/re, std/time
2.0.7 Core vs peeled prelude; --require-std
2.0.8 Docs / examples / playground for multi-file + std/…
2.0.9 Series close

Std modules after 2.0

std/meta, std/http, std/url, std/base64, std/fs, std/json, std/os, std/re, std/time


2.1.x — YAML + LSP + std maturity

Highlights

  • YAML helpers via PyYAML (yamlParse / yamlParseOr / yamlWrite, std/yaml, E2855)
  • Thin elang lsp (diagnostics, builtin hover, goto-def) + VS Code/Cursor client
  • Abort Stack: dumps + trace / .trace() (not a stepper)
  • Further peels: std/math, std/random; now/wait on std/time; run on std/os
  • elang std (+ --exports / --count / --path)
  • Generated Std Inventory docs page (tools/sync_builtins.py)

By version

Version What shipped
2.1.0 yamlParse / yamlWrite + std/yaml
2.1.1 yamlParseOr + docs
2.1.2 elang lsp stub (diagnostics + hover)
2.1.3 LSP goto-definition (local + imports)
2.1.4 Editor LSP client (vscode-languageclient; tasks remain fallback)
2.1.5 Abort Stack: + trace
2.1.6 std/math, std/random; extend std/time / std/os
2.1.7 elang std inventory CLI
2.1.8 Generated docs/reference/std-inventory.md
2.1.9 Series close (README / matrix / yaml_and_math example + playground)

Std modules after 2.1

All of 2.0, plus std/yaml, std/math, std/random. List anytime with:

elang std
elang std --exports

CLI surface (end of 2.1.9)

elang / echolang: run file, REPL, check, test, fmt, lint, builtins, std, lsp

Editor: TextMate highlighting, tasks/matchers, optional live LSP.


Still held (not in 2.0–2.1)

Package registry / lockfiles / elang add · full LSP-as-product · generics · inheritance · async / VM · try/catch · Result/Option · overloading · Point.new


Try it

pipx install echolang   # or pip install .
elang --version
elang std
elang examples/yaml_and_math.echo
elang examples/std_imports.echo
elang lsp   # editor starts this when echo.lsp.enabled is on

Docs: https://deekshith-poojary98.github.io/echo/

Echo v1.1.9

Choose a tag to compare

@deekshith-poojary98 deekshith-poojary98 released this 26 Sep 05:51

Echo 1.1.9

Versions: 1.1.0 → 1.1.9 (series complete)
Theme: HTTP + post-1.0 scripting polish
Package: echolang on PyPI · preferred CLI: elang
Failure model: unchanged — abort by default; recovery is inquiry and *Or twins

1.1 adds thin, host-gated networking and related scripting helpers on top of the 1.0 language surface. No new language syntax. No packages, generics, inheritance, or try / catch.


Highlights

HTTP (1.1.0–1.1.1)

  • httpGet / httpPost → { status, body, headers }
  • Optional request headers; httpOk / httpRedirect
  • httpGetOr / httpPostOr — network failures return a fallback; type errors and host deny still abort
  • Host.allow_http (CLI default on; playground off → E2801)
  • Network / bad URL → E2852; non-2xx still returns the response hash

URL & Base64 (1.1.2, 1.1.7)

  • urlEncode / urlDecode / urlJoin / urlQuery (E2853)
  • base64Encode / base64Decode (E2854)
  • YAML deferred (would need a dependency)

Diagnostics & tooling (1.1.3–1.1.6, 1.1.8)

  • watch lines include source location; abort dumps Watched: bindings
  • Documented E2801, E2850–E2854 and http*Or in the failure model
  • tools/sync_builtins.py + builtin inventory
  • elang builtins / --count; -V and clearer -h

Playground & docs close (1.1.5, 1.1.9)

  • Playground host policy documented (no files / run / HTTP)
  • Series docs/examples pass: README, tour, examples/url_and_base64.echo

Slice index

Version Focus
1.1.0 httpGet / httpPost + allow_http
1.1.1 Headers, status helpers, *Or twins
1.1.2 URL helpers
1.1.3 watch / abort diagnostics
1.1.4 Error-message / code pass
1.1.5 Playground HTTP / host-policy docs
1.1.6 Builtin sync / inventory generator
1.1.7 Base64 helpers
1.1.8 elang builtins CLI polish
1.1.9 Series close (docs / examples)

Install

pipx install echolang
elang --version          # Echo 1.1.9
elang builtins --count

Docs: https://deekshith-poojary98.github.io/echo/
Playground: https://deekshith-poojary98.github.io/echo/playground


Still held (not in 1.1)

Packages / non-sibling imports, YAML, full LSP, inheritance, generics, async, VM, try / catch, Result / Option.


Upgrade notes

  • From 1.0.0: additive only — existing programs keep working.
  • Playground still denies HTTP/files/run; use the CLI for live httpGet / httpPost.
  • Prefer elang over echo / echolang for the CLI name.

Echo v1.0.0

Choose a tag to compare

@deekshith-poojary98 deekshith-poojary98 released this 23 Sep 19:34

Echo 1.0.0

Stable release of Echo. Same language surface as 0.9.9 — no new syntax. Marks the completed 0.8 OOP spine and 0.9 ergonomics / stdlib series as the public 1.0 line.

Install: pipx install echolang (or pip install echolang)
CLI: prefer elang (also echolang, echo)
Docs: https://deekshith-poojary98.github.io/echo/

What’s in 1.0

  • Typed scripting with runtime checks; abort + *Or failure model (no try / catch)
  • Modules, first-class functions, const, destructuring, unions, switch
  • Nominal class / interface (no inheritance): new { … }, methods, type methods, unbound methods, optional implements
  • Ergonomics: compound assign on fields, priv, positional Point(3, 4), deep clone(), named format placeholders, get / set properties
  • Scripting stdlib: mkdirAll / removeTree, regex builtins, UTC formatTime / parseTime, days / hours / minutes
  • Analyzer: union narrowing in if type(x) == "…"
  • CLI: run, REPL, check, test, fmt, lint + editor tasks

Still held

Inheritance, generics, packages, async, try / catch / Result / Option, HTTP builtins, LSP-as-product.

Tag

v1.0.0 · commit dd0ef90

Echo v0.8.9

Choose a tag to compare

@deekshith-poojary98 deekshith-poojary98 released this 20 Sep 20:41

Echo 0.8.9

Install

pipx install echolang
elang --version

Or:

pip install echolang

Preferred CLI: elang (also echolang, echo).

What’s included

  • Typed scripting with modules, REPL, and elang check / test / fmt / lint
  • Nominal class + new { … } fields (with defaults), methods (this), unbound/type methods
  • interface with optional implements (no class inheritance)
  • Abort-by-default failure model; recovery via inquiry and *Or twins

Docs

Not in this release

No extends, generics, or try / catch. See Known Limitations.