Metadata-Version: 2.4
Name: eelang
Version: 0.1.2
Summary: eelang — надмножество Python 3.15: паттерн-матчинг в присваиваниях, match def, пайплайны
License-Expression: MIT
Classifier: Programming Language :: Python :: 3.15
Classifier: Operating System :: POSIX :: Linux
Requires-Python: <3.16,>=3.15
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: csrc/LICENSE.PSF
Dynamic: license-file

# eelang

Надмножество **Python 3.15** (linux x86_64): паттерн-матчинг в присваиваниях и
`assert`, `match def`, пайплайны. Распространяется обычным пакетом, код пишется в
`.eel`-файлах.

## Установка

```sh
pip install eelang
```

Требуется CPython 3.15 (linux x86_64).

## Запуск

```sh
python -m eelang script.eel
```

## Фичи

- **assert-паттерны** — `assert P = e` связывает и проверяет форму; провал → `MatchError`.

  ```python
  assert Point(x, y) = get_point()
  ```

- **match def** — паттерн-матчинг аргументов функции:

  ```python
  match def area(p) -> float:
      case Point(x, y) = p:
          x * y
      else:
          0
  ```

- **Пайплайны** — `..f(...)` (значение — последним аргументом), `..match:`, `..assert:`:

  ```python
  val =
      [1, 2, 3]
      ..map(lambda x: x * x)
  ```

`MatchError` импортируется явно:

```python
from eelang import MatchError
```

## Как устроен

Парсер — C-расширение (`eelang._parser`), собранное из PEG-парсера CPython 3.15 с
eelang-грамматикой. Синтаксис десахарится в стандартные узлы AST; `MatchError` —
обычный Python-класс (`ValueError`) в пакете.

## Требования и ограничения

- CPython 3.15, собранный с `--enable-shared` (расширение резолвит внутренние
  символы парсера из libpython), linux x86_64.
- Расширение привязано к внутренним заголовкам CPython 3.15.0: при импорте
  пакет проверяет таблицу интернированных идентификаторов и отказывается
  работать (с внятной ошибкой), если хост-сборка не совпадает.
- `.eel`-файлы запускаются только через `python -m eelang script.eel`;
  импорт `.eel`-модулей из обычного `.py` не поддерживается.
- Рефьютабельные паттерн-проверки используют синтетическое имя `.0`, которое
  видно в `locals()` (известный трейдофф десахара).

## Лицензия

Код пакета (Python-слой, обёртка `_parser.c`, тесты) — **MIT** (`LICENSE`).
Вендоренный код парсера в `csrc/` — производное от CPython и распространяется
под **PSF License 2.0** (`csrc/LICENSE.PSF`).
