My favorites | Sign in
Project Home Wiki Issues Source
Project Information
Members

--------- ENSLISH -------------------

- Local package nicknames, similar to https://github.com/orivej/package-local-nicknames or Call package by short name and don't be afraid of conflicts.

- automatic and safe duplicate symbols resolution. When you define new package with the library, conflicting symbols from used packages do not break execution. Their names become forbidden in new package by default so you just can't read them through the reader. You can overwrite the default with shadowing-import as usual and use either of conflicting symbols.

- You can also explicitly declare some symbol names as forbidden, useful to combat trash symbols.

- symbol-readmacros. Now you can attach special reader functions to symbols. So, you can have foo:[ ... ] and bar:[ ... ] special readers with different sence and with no conflicts, so you can combine several DSLs without problems

- named-readtables are included - address your readtables by their name

- iterate-keywords - use keywords in iterate (iter (:for ...) (:collect ...)) - useful to avoid symbol names conflicts

- alternative lispy syntax for lisp. Use less parens and less nesting levels for the same code, e.g. write (proga (let x 1) x) instead of (let ((x 1)) x)

- alternative string syntax. E.g. S<<< string>>> evaluates to "string"

- #L from iterate to write #L(cons !1 !2) instead of (lambda (x y) (cons x y))

- compact code to access structure slots. Write var^slot instead of (mystruct-slot var)

- lispworks specific: protect listener text before current prompt so that it can't be removed (which is a very confusing experience)

- lispworks specific: concept of alternative stepper which is better integrated with debugger and does not recompile function as IDE's default stepper does.

- lispworks specific: use :restart-with-keywords-risky command in a debugger to restart frames with keyword arguments

- lispworks specific: use :smart-resolve-export-conflict debugger command to unintern a trash symbol conflicting with a non-trash symbol you trying to export from other package.

- some asdf tools. E.g. when compilation or loading of file breaks while loading a system, you can edit the file or its system. Put (asdf::of-system) form into your file to know which system it belongs to.

- misc: pass-by-reference for a places, readable printing of hash-tables, cyrillic upper/lower case conversions, map-directory, etc.

------ RUSSIAN ---------------------------------

Библиотека улучшений читателя лиспа для Lispworks 6. Должна быть переносима без больших затруднений.

- локальные псевдонимы пакетов, зависящие от текущего пакета

- команда редактора complete package name для продолжения имени пакета с учётом локальных псевдонимов

- lispworks: completion символа с учётом локальных псевдонимов

- def-symbol-readmacro - ридмакросы, привязанные не к сочетаниям букв, а к символам. Устраняют проблему дефицита букв для ридмакросов. Позволяют решать конфликты между ридмакросами, поскольку символ можно вызывать с префиксом пакета. Например, можно назначить разные смыслы для package1:[ ... ] и package2:[ ... ] и, включая в пакет тот из двух символов, который чаще используется, вызывать в том же коде и второй с префиксом пакета. В итоге на весь проект хватает одной таблицы чтения, её не нужно переключать.

- автоматическое разрешение конфликтов при создании нового пакета. Если пакет :user использует :lib1 и :lib2 и между ними есть конфликт имени символа SYM, выдаётся warning, а не cerror. При этом, автоматически делается так, что в пакете :user попытка чтения неквалифицированного имени SYM будет вызывать ошибку чтения. Эта политика является более мягкой, чем обычная, и, в то же время, достаточно надёжной. Можно выбрать для :user тот или иной SYM с помощью :shadowing-import-from, тогда предупреждения не будет (и станет чуть менее понятно), а можно явно декларировать SYM как запрещённый, тогда не будет предупреждения при создании пакета.

- пишем x^slot вместо (struct-slot x) - значительное сокращение объёма кода при интенсивном использовании структур.

- обобщённый "крышечный" синтаксис. Можно придать выражению a^b произвольный смысл для заданной переменной a или для заданного типа значения a. Определение смысла может происходить статически (по декларированному типу переменной) или динамически (по типу объекта во время выполнения).

- def-merge-packages::! - макрос для определения пакетов, интегрирующий перечисленные возможности. Помимо этого, позволяет задавать экспорт в виде user:symbol, а не #:symbol, что позволяет сразу от определения пакета перейти к определению символа. При этом, не плодит мусорных символов.

- новый вариант :readtable-case. Символы, набранные в одинаковом регистре, приводятся к верхнему регистру, а идентификаторы camelCase читаются как есть. Практика показывает, что этот вариант хорошо совместим с существующим кодом и, в то же время, удобен для разработки нового кода.

- iterate-keywords: версия iterate, где можно писать (iter (:for ...)) вместо (iter (for ...)) - устраняются все конфликты имён, связанные с использованием пакета iterate, и нет необходимости в (iter (iter:for ...))

- lispworks: защита текста в листенере, чтобы нельзя было стереть подсказку и то, что перед ней (такое стирание приводит к большой путанице)

- lispworks: прототип альтернативного степпера, который лучше интегрирован с дебаггером и не переопределяет функцию для прошагивания.

- lispworks: с помощью команды отладчика :restart-with-keywords-risky можно перезапустить кадр стека с &key параметрами

- lispworks: команда отладчика :smart-resolve-export-conflict убирает мусорный символ, конфликтующий с символом другого пакета, который мы пытаемся экспортировать. IDE не предлагает такой полезной возможности.

- мелочи для asdf: например, если при компиляции или загрузке файла через asdf происходит ошибка, можно перейти к редактированию файла или его системы. Помещайте форму (asdf::of-system) в ваши файлы, чтобы декларировать, к какой системе он принадлежит.

- мелочи: имитация передачи параметров по ссылке, печать хеш-таблиц readably, работа с регистром букв кириллицы, map по дереву каталогов и т.п.

Powered by Google Project Hosting