summaryrefslogtreecommitdiff
path: root/doc/lispref/anti.texi
blob: b6df9fe2e3969b8c60918340741c18d21b1b2cdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1999, 2002-2018 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.

@c This node must have no pointers.

@node Antinews
@appendix Emacs 25 Antinews
@c Update the elisp.texi Antinews menu entry with the above version number.

For those users who live backwards in time, here is information about
downgrading to Emacs version 25.2.  We hope you will enjoy the greater
simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.

@section Old Lisp Features in Emacs 25

@itemize @bullet
@item
The concurrency features have been removed.  Even in its limited
``mostly cooperative'' form, with only one Lisp thread running at any
given time, it made Emacs significantly more complex for Lisp programs
that need to work correctly in the presence of additional threads.

@item
Handling of file attributes has been simplified by discarding the
accessor functions, such as @code{file-attribute-type} and
@code{file-attribute-modification-time}.  Real Lisp programmers always
access the individual attributes by their ordinal numbers, and can
recite those numbers in their sleep.

@item
The networking code is back at its pristine simplicity, as we deleted
the use of asynchronous DNS resolution, connection, and TLS
negotiation for TLS streams.  You no longer need to consider the
resulting complexity and interesting race conditions when you write
Lisp programs that use network communications.  As a direct
consequence, the @code{:complete-negotiation} parameter of
@code{gnutls-boot} has become unnecessary, and was removed---just one
example of how removal of asynchronicity simplifies Emacs.

@item
We've removed the @file{puny.el} library, so Web sites with
non-@acronym{ASCII} URLs are no longer easily accessible.  But such
sites become more and more rare as you move back in time, so having a
specialized library for their support was deemed an unnecessary
maintenance burden.

@item
Field numbers like @samp{%2$} in format specifiers are no longer
available.  We decided that their use makes code reading and
comprehension much harder, and that having them is unjustified in the
past where similar features in popular C libraries will also be gone.

@item
Since the built-in capability to display line numbers has been removed
(@pxref{Antinews,,, emacs, The GNU Emacs Manual}), we've also deleted
the @code{line-number-display-width} function and the support for the
@code{display-line-numbers-disable} property, as Lisp programs that do
their own display layout decisions no longer need to cater to this
tricky feature.

@item
Regular expressions have been simplified by removing support for
Unicode character properties in the @code{[:blank:]} regexp class.  As
result, this class will match only spaces and tabs.  Once again, this
is in line with diminishing importance of Unicode as you move back in
time.

@item
For similar reasons, we removed the function @code{char-from-name}.
It should be easy enough to access the full list of Unicode characters
returned by @code{ucs-names} instead, for as long as Unicode support
in Emacs exists (which shouldn't be too long).

@item
Various functions that accept file names as arguments, such as
@code{file-attributes}, @code{file-symlink-p}, and
@code{make-symbolic-link} gained back the special support for file
names quoted with @samp{/:}, and they now interpret @samp{~} in
symlink targets as you'd expect: to mean your home directory.  The
confusing differences between the operation of these functions in
interactive and non-interactive invocations has been removed.

@item
The function @file{assoc} has been simplified by removing its third
optional argument.  It now always uses @code{equal} for comparison.
Likewise, @code{alist-get} always uses @code{assq}, and @code{map-get}
and @code{map-put} always use @code{eql} for their comparisons.

@item
GnuTLS cryptographic functions are no longer available in Emacs.  We
have decided that the needs for such functionality are deteriorating,
and their cumbersome interfaces make them hard to use.

@item
We have removed support for records of user-defined types, and
@code{cl-defstruct} no longer uses records.  This removes the
potential for quite a few places where existing and past code could be
broken by records.

@item
You can again use @code{string-as-unibyte},
@code{string-make-multibyte}, and other similar functions, without
being annoyed by messages about their deprecation.  This is in
preparation for removal of multibyte text from Emacs in the distance
past.

@item
The function @code{read-color} no longer displays color names using
each color as the background.  We have determined that this surprises
users and produces funny inconsistent results on color-challenged
terminals.

@item
We removed the function @code{file-name-case-insensitive-p}, as
testing for the OS symbol should be enough for the observable past to
come, and learning to use yet another API is a burden.

@item
The function @code{read-multiple-choice} is also gone, in recognition
of the fact that nothing makes Emacs Lisp hacker rejoice more than the
need to sit down and write yet another interactive question-and-answer
function, and make it optimal for each specific case.

@item
The function @code{add-variable-watcher} and the corresponding
debugger command @code{debug-on-variable-change} have been removed.
They make debugging more complicated, while examining the value of a
variable at each stop point is easy enough to cover the same use
cases.  Let simplicity rule!

@item
The function @code{mapcan} is gone; use @code{mapcar} instead, and
process the resulting list as you see fit.

@item
You can once again write a Lisp program that returns funny random
values from @code{file-attributes} by having another process alter the
filesystem while Emacs is accessing the file.  This can give rise to
some interesting applications in the near past.

@item
We have removed the functions @code{file-name-quote},
@code{file-name-unquote}, and @code{file-name-quoted-p}.  Writing code
that checks whether a file name is already quoted is easy, and doubly
quoting a file name should not produce any problems for well-written
Lisp code.

@item
Frame parameters like @code{z-group}, @code{min-width},
@code{parent-frame}, @code{delete-before}, etc. have been removed.
Emacs should not replace your window-manager, certainly not as
window-managers become less and less capable.

@item
We decided that the format of mode line and header line should be
customizable only based on buffers; the @code{mode-line-format} and
@code{header-line-format} window parameters have been removed.

@item
As part of the ongoing quest for simplicity, many other functions and
variables have been eliminated.
@end itemize