More fixes in the Emacs manual
[emacs.git] / doc / lispref / anti.texi
blobef28415d5910a4b466a1db3ff4e157f94d07892a
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1999, 2002-2018 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
6 @c This node must have no pointers.
8 @node Antinews
9 @appendix Emacs 25 Antinews
10 @c Update the elisp.texi Antinews menu entry with the above version number.
12 For those users who live backwards in time, here is information about
13 downgrading to Emacs version 25.3.  We hope you will enjoy the greater
14 simplicity that results from the absence of many @w{Emacs
15 @value{EMACSVER}} features.
17 @section Old Lisp Features in Emacs 25
19 @itemize @bullet
20 @item
21 The concurrency features have been removed.  Even in its limited
22 ``mostly cooperative'' form, with only one Lisp thread running at any
23 given time, it made Emacs significantly more complex for Lisp programs
24 that need to work correctly in the presence of additional threads.
26 @item
27 Handling of file attributes has been simplified by discarding the
28 accessor functions, such as @code{file-attribute-type} and
29 @code{file-attribute-modification-time}.  Real Lisp programmers always
30 access the individual attributes by their ordinal numbers, and can
31 recite those numbers in their sleep.
33 @item
34 The networking code is back at its pristine simplicity, as we deleted
35 the use of asynchronous DNS resolution, connection, and TLS
36 negotiation for TLS streams.  You no longer need to consider the
37 resulting complexity and interesting race conditions when you write
38 Lisp programs that use network communications.  As a direct
39 consequence, the @code{:complete-negotiation} parameter of
40 @code{gnutls-boot} has become unnecessary, and was removed---just one
41 example of how removal of asynchronicity simplifies Emacs.
43 @item
44 We've removed the @file{puny.el} library, so Web sites with
45 non-@acronym{ASCII} URLs are no longer easily accessible.  But such
46 sites become more and more rare as you move back in time, so having a
47 specialized library for their support was deemed an unnecessary
48 maintenance burden.
50 @item
51 The time conversion functions @code{current-time-string},
52 @code{current-time-zone}, @code{decode-time},
53 @code{format-time-string}, and @code{set-time-zone-rule} no longer
54 accept integer offsets as time zone rules, to make it more of a
55 challenge to convert foreign timestamps.  Also,
56 @code{format-time-string} no longer converts @samp{%q} to the calendar
57 quarter, as that is something you can easily do for yourself.
59 @item
60 Field numbers like @samp{%2$} in format specifiers are no longer
61 available.  We decided that their use makes code reading and
62 comprehension much harder, and that having them is unjustified in the
63 past where similar features in popular C libraries will also be gone.
65 @item
66 Since the built-in capability to display line numbers has been removed
67 (@pxref{Antinews,,, emacs, The GNU Emacs Manual}), we've also deleted
68 the @code{line-number-display-width} function and the support for the
69 @code{display-line-numbers-disable} property, as Lisp programs that do
70 their own display layout decisions no longer need to cater to this
71 tricky feature.
73 @item
74 Regular expressions have been simplified by removing support for
75 Unicode character properties in the @code{[:blank:]} regexp class.  As
76 result, this class will match only spaces and tabs.  Once again, this
77 is in line with diminishing importance of Unicode as you move back in
78 time.
80 @item
81 For similar reasons, we removed the function @code{char-from-name}.
82 It should be easy enough to access the full list of Unicode characters
83 returned by @code{ucs-names} instead, for as long as Unicode support
84 in Emacs exists (which shouldn't be too long).
86 @item
87 Various functions that accept file names as arguments, such as
88 @code{file-attributes}, @code{file-symlink-p}, and
89 @code{make-symbolic-link} gained back the special support for file
90 names quoted with @samp{/:}, and they now interpret @samp{~} in
91 symlink targets as you'd expect: to mean your home directory.  The
92 confusing differences between the operation of these functions in
93 interactive and non-interactive invocations has been removed.
95 @item
96 Several functions that create or rename their files now treat their
97 destination specially if it happens to be a directory, even when its
98 name does not appear to be that of a directory.  For example,
99 @code{(rename-file "A" "B")} no longer renames @file{A} to @file{B} if
100 @file{B} happens to be a directory.  This is so that dealing with
101 files becomes more of an adventure.
103 @item
104 The @code{format} function now returns new strings in more cases, to
105 place more stress on the Emacs memory manager and thereby test Emacs
106 better.
108 @item
109 The function @file{assoc} has been simplified by removing its third
110 optional argument.  It now always uses @code{equal} for comparison.
111 Likewise, @code{alist-get} always uses @code{assq}, and @code{map-get}
112 and @code{map-put} always use @code{eql} for their comparisons.
114 @item
115 Numeric comparisons and the functions @code{format},
116 @code{make-hash-table}, @code{min}, @code{max} and @code{logb} now
117 occasionally round values internally to make their results less
118 predictable.
120 @item
121 The functions @code{ffloor}, @code{fceiling}l, @code{ftruncate} and
122 @code{fround} now accept integer arguments.  Conversely, functions
123 like @code{decode-char} that accept floating-point integers now accept
124 arguments that are not integers.  In both cases the results are
125 amusingly nonsensical sometimes.
127 @item
128 GnuTLS cryptographic functions are no longer available in Emacs.  We
129 have decided that the needs for such functionality are deteriorating,
130 and their cumbersome interfaces make them hard to use.
132 @item
133 We have removed support for records of user-defined types, and
134 @code{cl-defstruct} no longer uses records.  This removes the
135 potential for quite a few places where existing and past code could be
136 broken by records.
138 @item
139 You can again use @code{string-as-unibyte},
140 @code{string-make-multibyte}, and other similar functions, without
141 being annoyed by messages about their deprecation.  This is in
142 preparation for removal of multibyte text from Emacs in the distant
143 past.
145 @item
146 The @code{string-version-lessp} function has been removed, to
147 encourage programmers to use their own idiosyncratic methods to
148 determine whether one version string precedes another.
150 @item
151 The function @code{read-color} no longer displays color names using
152 each color as the background.  We have determined that this surprises
153 users and produces funny inconsistent results on color-challenged
154 terminals.
156 @item
157 Support for 24-bit color on text terminals has been dropped, since
158 it wasn't needed long ago.
160 @item
161 We removed the function @code{file-name-case-insensitive-p}, as
162 testing for the OS symbol should be enough for the observable past to
163 come, and learning to use yet another API is a burden.
165 @item
166 The function @code{read-multiple-choice} is also gone, in recognition
167 of the fact that nothing makes Emacs Lisp hacker rejoice more than the
168 need to sit down and write yet another interactive question-and-answer
169 function, and make it optimal for each specific case.
171 @item
172 The function @code{add-variable-watcher} and the corresponding
173 debugger command @code{debug-on-variable-change} have been removed.
174 They make debugging more complicated, while examining the value of a
175 variable at each stop point is easy enough to cover the same use
176 cases.  Let simplicity rule!
178 @item
179 The function @code{mapcan} is gone; use @code{mapcar} instead, and
180 process the resulting list as you see fit.
182 @item
183 Low-level list functions like @code{length} and @code{member} can now
184 loop indefinitely when given cyclic lists, causing Emacs to freeze.
185 This can help these functions run a tiny bit faster in the usual case
186 where the input is not cyclic.
188 @item
189 The @code{write-region} function no longer propagates its
190 @var{lockname} argument to file name handlers.
192 @item
193 You can once again write a Lisp program that returns funny random
194 values from @code{file-attributes} by having another process alter the
195 filesystem while Emacs is accessing the file.  This can give rise to
196 some interesting applications in the near past.
198 @item
199 The functions @code{file-attributes}, @code{file-symlink-p}, and
200 @code{make-symbolic-link} now quietly mutate the target of a local
201 symbolic link in some cases, to make it more of a challenge to deal
202 with arbitrary symlinks in Emacs code.
204 @item
205 The error @code{file-missing} has been removed; operations now lump
206 such errors into the @code{file-error} category instead.
208 @item
209 The function @code{delete-directory} now signals an error if operating
210 recursively and some other process deletes the directory before this
211 function gets to it.
213 @item
214 The @code{dutch} input method now attempts to support Turkish too,
215 albeit incorrectly.  Also, it converts @samp{IJ} and @samp{ij} to
216 special characters instead of leaving them alone.
218 @item
219 Non-breaking hyphens and approximations to quotes are now displayed
220 just with the @code{escape-glyph} face instead of having faces of
221 their own.  This is simpler and gives the user amusing puzzles to
222 solve when viewing text containing these characters.
224 @item
225 The user option @code{electric-quote-context-sensitive} and the
226 variable @code{electric-quote-inhibit-functions}, so that electric
227 quoting is simpler and more likely to do the wrong thing.
229 @item
230 The user option @code{text-quoting-style} has been removed, and is now
231 just a variable.
233 @item
234 We have removed the functions @code{file-name-quote},
235 @code{file-name-unquote}, and @code{file-name-quoted-p}.  Writing code
236 that checks whether a file name is already quoted is easy, and doubly
237 quoting a file name should not produce any problems for well-written
238 Lisp code.
240 @item
241 Frame parameters like @code{z-group}, @code{min-width},
242 @code{parent-frame}, @code{delete-before}, etc. have been removed.
243 Emacs should not replace your window-manager, certainly not as
244 window-managers become less and less capable.
246 @item
247 We decided that the format of mode line and header line should be
248 customizable only based on buffers; the @code{mode-line-format} and
249 @code{header-line-format} window parameters have been removed.
251 @item
252 Emacs now normally builds a limited @command{movemail} substitute that
253 retrieves POP3 email only via insecure channels, and the
254 configure-time option @option{--with-mailutils} has been removed.
255 This simplifies Emacs setup when security is not important.
257 @item
258 The configure-time option @option{--enable-gcc-warnings=warn-only}
259 has been removed, so that build-time warnings are always fatal now.
261 @item
262 The configure-time option @option{--disable-build-details} has been
263 removed.  This way, Emacs builds are unique and irreproducible.
265 @item
266 The variable @code{emacs-version} now includes the build number
267 instead of storing it separately in @code{emacs-build-number}.
269 @item
270 Emacs has been ported to IRIX.
272 @item
273 Several options and variables have been removed to simplify Emacs and
274 potentially make it less reliable.  These include the
275 @option{--module-assertions} option, the
276 @code{attempt-stack-overflow-recovery} variable, and the
277 @code{attempt-orderly-shutdown-on-fatal-signal} variable.
279 @item
280 As part of the ongoing quest for simplicity, many other functions and
281 variables have been eliminated.
282 @end itemize