summaryrefslogtreecommitdiffstats
path: root/RELEASES.md
blob: 3d75210e3354f532a6774dcd76ec103f03e8a710 (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
0.*
===


0.82
----

**Unreleased**

62/76 GNU find features supported.

- Rework optimization levels
  - `-O1` (logical simplification):
    - Constant propagation (`! -false <==> -true`, `! -true <==> -false`)
    - Double negation (`! ! X <==> X`)
    - Conjunction elimination:
      - `-true -a X <==> X`
      - `X -a -true <==> X`
    - Disjunctive syllogism:
      - `-false -o X <==> X`
      - `X -o -false <==> X`
    - Short-circuiting:
      - `-false -a X <==> -false`
      - `-true -o X <==> -true`
    - De Morgan's laws (**new**):
      - `( ! X -a ! Y ) <==> ! ( X -o Y )`
      - `( ! X -o ! Y ) <==> ! ( X -a Y )`
      - `! ( X -a ! Y ) <==> ( ! X -o Y )`
      - `! ( X -o ! Y ) <==> ( ! X -a Y )`
      - `! ( ! X -a Y ) <==> ( X -o ! Y )`
      - `! ( ! X -o Y ) <==> ( X -a ! Y )`
    - Unused result (**new**): `! X , Y <==> X , Y`
  - `-O2` (purity):
    - (These optimizations take the purity of predicates into account, allowing side-effect-free tests like `-name` or `-type` to be moved or removed)
    - `PURE -a -false <==> -false`
    - `PURE -o -true <==> -true`
    - `PURE , X <==> X`
    - Top-level unused result (**new**): `X (-a|-o|,) PURE <==> X`
  - `-O3` (cost-based, **default**):
    - Re-order tests to reduce the expected cost (TODO)
  - `-O4` (aggressive):
    - (These are very aggressive optimizations that may have surprising effects on warning/error messages and runtime, but still should not affect the resulting output)
    - Change top-level expressions with no actions to `-false` (**new**):
      - For example, `bfs -O4 -true -o -print` becomes `-false`, because `-print` is unreachable
    - Skip the entire traversal if the top-level expression is `-false`
      - `bfs -O4 -false` (or anything that optimizes to `-false`) will exit immediately
      - This may cause messages about non-existent files, symbolic link cycles, etc. to be skipped
  - `-Ofast`:
    - Always the highest level, currently the same as `-O4`
- Color files with multiple hard links correctly
- Treat `-`, `)`, and `,` as paths when required to by POSIX
  - `)` and `,` are only supported before the expression begins
- Implement `-D opt`
- Implement `-fprint`
- Implement `-fprint0`


0.79
----

**May 27, 2016**

60/76 GNU find features supported.

- Remove an errant debug `printf()` from `-used`
- Implement the `{} ;` variants of `-exec`, `-execdir`, `-ok`, and `-okdir`


0.74
----

**March 12, 2016**

56/76 GNU find features supported.

- Color broken symlinks correctly
- Fix https://github.com/tavianator/bfs/issues/7
- Fix `-daystart`'s rounding of midnight
- Implement (most of) `-newerXY`
- Implement `-used`
- Implement `-size`


0.70
----

**February 23, 2016**

53/76 GNU find features supported.

- New `make install` and `make uninstall` targets
- Squelch non-positional warnings for `-follow`
- Reduce memory footprint by as much as 64% by closing `DIR*`s earlier
- Speed up `bfs` by ~5% by using a better FD cache eviction policy
- Fix infinite recursion when evaluating `! expr`
- Optimize unused pure expressions (e.g. `-empty -a -false`)
- Optimize double-negation (e.g. `! ! -name foo`)
- Implement `-D stat` and `-D tree`
- Implement `-O`


0.67
----

**February 14, 2016**

Initial release.

51/76 GNU find features supported.