summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Magnusson <ulfalizer@gmail.com>2019-07-04 23:06:12 +0200
committerUlf Magnusson <ulfalizer@gmail.com>2019-07-04 23:11:50 +0200
commit73391447be9187a2004fae104389fd8ffc26e094 (patch)
treec933c29dc191b6d54ebaf78e5a5d536a8515ba03
parent97985f85456f80958a1471b5e1ab5960cb5022c9 (diff)
Move kconfiglib-2-changes.txt over to the 'screenshots' branch
Makes the top-level a bit less cluttered. The README still links to it.
-rw-r--r--README.rst6
-rw-r--r--kconfiglib-2-changes.txt112
2 files changed, 3 insertions, 115 deletions
diff --git a/README.rst b/README.rst
index 6b35670..3461c74 100644
--- a/README.rst
+++ b/README.rst
@@ -756,9 +756,9 @@ Notes
-----
* This is version 2 of Kconfiglib, which is not backwards-compatible with
- Kconfiglib 1. For a summary of changes between Kconfiglib 1 and Kconfiglib
- 2, see `kconfiglib-2-changes.txt
- <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib-2-changes.txt>`_.
+ Kconfiglib 1. A summary of changes between Kconfiglib 1 and Kconfiglib
+ 2 can be found `here
+ <https://github.com/ulfalizer/Kconfiglib/blob/screenshots/kconfiglib-2-changes.txt>`__.
* I sometimes see people add custom output formats, which is pretty
straightforward to do (see the implementations of ``write_autoconf()`` and
diff --git a/kconfiglib-2-changes.txt b/kconfiglib-2-changes.txt
deleted file mode 100644
index b7a78c2..0000000
--- a/kconfiglib-2-changes.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-This is a summary of the changes between Kconfiglib 1 and Kconfiglib 2.
-
-The Kconfiglib 1 API was designed to solve a particular problem, before I even
-knew that I'd release it as a library. I was also hazy on many details of
-Kconfig internals when I first designed it.
-
-Bolting things like implicit menus and symbol introspection onto the Kconfiglib
-1 API would have been awkward, so I decided to redo things the right way.
-
-API changes:
-
- - Read-only fields now use attributes instead of get_*() methods, which is
- less clunky to work with.
-
- A few attributes use @property magic internally, but are still efficient to
- access due to caching.
-
- - Tristate values are now represented as 0, 1, 2 instead of "n", "m", "y".
- This is a small loss in readability in a few spots, but the advantages far
- outweigh the disadvantages. Tristate values can now be compared directly,
- and tristate n is naturally false. ("n" < "m" < "y" is false even
- lexicographically, which is awkward.)
-
- The original design was an attempt to keep the value format consistent for
- all types of symbols (as far as I can remember).
-
- - Much improved value API. Instead of get_upper/lower_bound(), is_assignable(),
- etc., there's now just a single .assignable attribute, which returns a
- sorted tuple with the currently assignable values (that would be reflected
- in the value of the symbol). This corresponds to the selections available
- in the menuconfig interface.
-
- For example, sym.assignable might be (0, 2) for a visible, non-selected
- bool symbol.
-
- - Many seldom-used APIs, like get_ref_locations(), were removed. They can be
- implemented manually in a much more general and powerful way with newly
- added functionality (see e.g. examples/find_symbol.py).
-
- - Printing a Symbol or other Kconfig object now returns its representation in
- Kconfig syntax instead of the ugly Kconfiglib 1 format.
-
- - Symbols and other Kconfig objects now have a __repr__() that returns useful
- information (name, type, value, user value, prompt, location, etc.)
-
- - __str__() and __repr__() are deliberately implemented with just public
- APIs, which indirectly ensures that all Kconfig object properties can be
- fetched separately.
-
- - The Item base class had gotten kinda pointless and has been removed.
- Instead of is_symbol(), etc., just use isinstance() to check what kind of
- object you're dealing with. There's fewer of them now too.
-
- - Probably lots of other stuff I forgot to mention.
-
-
-New features:
-
- - Direct access to the menu tree
-
- Kconfiglib 1 represented the menu tree with nested lists, which works
- poorly for e.g. implicit menus. Kconfiglib 2 uses a separate user-visible
- MenuNode class that corresponds directly to 'struct menu' in the C
- implementation, storing the same fields.
-
- The Menu and Comment classes were removed. They're represented as plain
- menu nodes with node.item set to MENU and COMMENT, respectively.
-
- - Direct access to symbol properties and their conditions
-
- Expressions use a simple tuple-based format (think Lisp).
-
- Kconfiglib 1 stored constant (quoted) symbols as plain Python strings. This
- makes expressions awkward to work with due to inconsistent value types.
- Kconfiglib 2 uses constant Symbol instances for quoted symbols, like the C
- implementation.
-
- - Better 'choice' handling
-
- In Kconfiglib 1, choices magically changed mode when values were assigned
- to choice symbols, which was meant to make .config loading just work. In
- Kconfiglib 2, the mode must be assigned manually (though most choices can
- only be in n or y mode anyway and take care of themselves). load_config()
- was updated to infer the mode from the types of values assigned to choice
- symbols and set it explicitly.
-
- Choices now have an .assignable attribute too, which makes the API
- perfectly consistent between symbols and choices. The choice mode acts as
- an upper bound on the visibility of the choice symbols (the choice is
- simply propagated to property conditions, which makes this automatic).
-
- - Faster parsing code
-
- The helper classes were merged into the Kconfig (new name for Config)
- class. This removes a lot of temporary object creation and passing around
- of values. The 4.14 x86 Kconfigs now parse in about a second on a Core
- i7-2600k (or much faster than that with PyPy if multiple configurations are
- loaded).
-
- - Better invalidation algorithm
-
- Internal reorganization allowed for a better invalidation algorithm to be
- used, which stops redundant invalidation much earlier and gives a huge
- speedup for scripts that set a lot of values. The non-Kconfig-parsing
- overhead is often irrelevant now. allyesconfig.py runs in about 1.5 seconds
- when run via 'make scriptconfig', including the 'make' overhead.
-
- - Probably lots of other stuff I forgot to mention.
-
-
-In general, Kconfiglib 2 is just a better and more general Kconfiglib 1, with
-some old mistakes cleaned up.