<feed xmlns='http://www.w3.org/2005/Atom'>
<title>compat.git/compat.el, branch feature/imagep</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/'/>
<entry>
<title>compat: Improve docstrings</title>
<updated>2023-01-18T08:09:21+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-18T08:09:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=70ed788d8dd4ee1fcb7e73193c5016ea81edf24e'/>
<id>70ed788d8dd4ee1fcb7e73193c5016ea81edf24e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>compat-function: Whitespace fix in docstring</title>
<updated>2023-01-17T09:05:55+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-17T09:05:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=50296614bf609e4d71f431a8cc0e138c8d6dae9a'/>
<id>50296614bf609e4d71f431a8cc0e138c8d6dae9a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Version 29.1.2.0</title>
<updated>2023-01-16T21:21:59+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-16T21:21:59+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=b64eaff775fdca48f1ac226fb84b4b6538ca18f2'/>
<id>b64eaff775fdca48f1ac226fb84b4b6538ca18f2</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Bump snapshot version</title>
<updated>2023-01-16T12:22:19+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-16T12:22:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=ab6e9af55036567ec5dcd25d5b447d34ed9b5934'/>
<id>ab6e9af55036567ec5dcd25d5b447d34ed9b5934</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Drop JSON support for now (libjansson)</title>
<updated>2023-01-16T10:14:24+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-16T10:03:48+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=cd9e563ea036595b3def00f83d2aa9d4a12b7c06'/>
<id>cd9e563ea036595b3def00f83d2aa9d4a12b7c06</id>
<content type='text'>
I have not taken this decision lightly. There are currently no
consumers of the backported JSON api, which allows us to take this
measure. The problem is that backporting the libjansson API on top of
json.el is non-trivial and led to numerous problems:

1. There is a significant mismatch between the libjansson API and the
json.el API.

2. The libjansson API did not support RFC 8259 when it was introduced
in 27 This was corrected in 28, which requires Compat to provide two
compatibility versions for the json functions.

3. The `json-serialize' compatibility function was very inefficient,
since it has to walk and copy the entire object tree in order to
repair certain objects for the consumption by `json-encode'. This adds
slowness on top of the already slow json.el implementation.

4. `json-parse-buffer' (RFC 8259) modifies the buffer in order to
support toplevel object parsing and relies on undo to restore the
buffer state. This will not work for read-only buffers and for buffers
with disable undo and will have other undesired side effects.

5. The performance of libjansson and json.el are too different. It
will be unexpected if a backported API is suddenly much slower as
expected. This leads to performance bugs downstream.

For now the JSON support lives in the json branch. We can reinstate it
slowly and on-demand if necessary. However experience with the
`string-pixel-width' function showed that we have to be careful when
backports are much slower than the original function due to
performance bugs.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
I have not taken this decision lightly. There are currently no
consumers of the backported JSON api, which allows us to take this
measure. The problem is that backporting the libjansson API on top of
json.el is non-trivial and led to numerous problems:

1. There is a significant mismatch between the libjansson API and the
json.el API.

2. The libjansson API did not support RFC 8259 when it was introduced
in 27 This was corrected in 28, which requires Compat to provide two
compatibility versions for the json functions.

3. The `json-serialize' compatibility function was very inefficient,
since it has to walk and copy the entire object tree in order to
repair certain objects for the consumption by `json-encode'. This adds
slowness on top of the already slow json.el implementation.

4. `json-parse-buffer' (RFC 8259) modifies the buffer in order to
support toplevel object parsing and relies on undo to restore the
buffer state. This will not work for read-only buffers and for buffers
with disable undo and will have other undesired side effects.

5. The performance of libjansson and json.el are too different. It
will be unexpected if a backported API is suddenly much slower as
expected. This leads to performance bugs downstream.

For now the JSON support lives in the json branch. We can reinstate it
slowly and on-demand if necessary. However experience with the
`string-pixel-width' function showed that we have to be careful when
backports are much slower than the original function due to
performance bugs.
</pre>
</div>
</content>
</entry>
<entry>
<title>Version 29.1.1.1</title>
<updated>2023-01-14T09:48:44+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-14T09:48:44+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=57295d30c8c62470558ddfde6ce5926de47a091c'/>
<id>57295d30c8c62470558ddfde6ce5926de47a091c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>compat-function: Expand docstring</title>
<updated>2023-01-10T16:57:38+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-10T16:57:28+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=50b117331affff6ff1d88061951c752a934c79ad'/>
<id>50b117331affff6ff1d88061951c752a934c79ad</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Version 29.1.1.0</title>
<updated>2023-01-07T20:53:09+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-07T20:51:58+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=887ec71fa3a90bc0d333ae9c333436148e909dbd'/>
<id>887ec71fa3a90bc0d333ae9c333436148e909dbd</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>compat.el: Add missing compat-declare-version</title>
<updated>2023-01-07T01:11:42+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-07T01:11:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=557c74f87fe8298d186703b8b7ed46745d9bb7dd'/>
<id>557c74f87fe8298d186703b8b7ed46745d9bb7dd</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Move json functions to compat.el</title>
<updated>2023-01-06T21:28:48+00:00</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2023-01-06T21:20:27+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/compat.git/commit/?id=d6a4ed48bca8c99e9e9d9617eaa4ae4a0dceca46'/>
<id>d6a4ed48bca8c99e9e9d9617eaa4ae4a0dceca46</id>
<content type='text'>
These functions are defined conditionally. Therefore they must not be
part of the versioned files. Conditionally-defined functions are a
special complicated edge case, which need more testing. Therefore the
json functions are currently marked as UNTESTED.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
These functions are defined conditionally. Therefore they must not be
part of the versioned files. Conditionally-defined functions are a
special complicated edge case, which need more testing. Therefore the
json functions are currently marked as UNTESTED.
</pre>
</div>
</content>
</entry>
</feed>
