mirror of
https://github.com/dlang/phobos.git
synced 2025-04-27 05:30:33 +03:00
purge changelog
This commit is contained in:
parent
205256abb1
commit
60034b56e2
9 changed files with 0 additions and 182 deletions
|
@ -1,14 +0,0 @@
|
||||||
Added `std.conv.bitCast`
|
|
||||||
|
|
||||||
This convenience function allows reinterpreting casts to be written in a more
|
|
||||||
readable way.
|
|
||||||
|
|
||||||
---
|
|
||||||
uint n = 0xDEADBEEF;
|
|
||||||
|
|
||||||
// Before
|
|
||||||
writeln("Bytes of n are: ", *cast(const ubyte[4]*) &n);
|
|
||||||
|
|
||||||
// After
|
|
||||||
writeln("Bytes of n are: ", n.bitCast!(const ubyte[4]));
|
|
||||||
---
|
|
|
@ -1,30 +0,0 @@
|
||||||
Extend the functionality of formattedRead to permit a std.file.slurp like execution.
|
|
||||||
|
|
||||||
Template argument types can now be passed to formattedRead along with a
|
|
||||||
format string to parse and read the input range as a Tuple of those arguments.
|
|
||||||
All arguments must be read successfully, otherwise, and unlike std.file.slurp
|
|
||||||
which has non exhaustive option for partial reads, it'll throw a std.format.FormatException.
|
|
||||||
|
|
||||||
---
|
|
||||||
import std.exception : assertThrown;
|
|
||||||
import std.format : FormatException;
|
|
||||||
import std.typecons : tuple;
|
|
||||||
|
|
||||||
@safe pure unittest
|
|
||||||
{
|
|
||||||
auto complete = "hello!34.5:124".formattedRead!(string, double, int)("%s!%s:%s");
|
|
||||||
assert(complete == tuple("hello", 34.5, 124));
|
|
||||||
|
|
||||||
assertThrown!FormatException("hello!34.5:".formattedRead!(string, double, int)("%s!%s:%s"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The format string can be checked at compile-time:
|
|
||||||
@safe pure unittest
|
|
||||||
{
|
|
||||||
auto expected = tuple("hello", 124, 34.5);
|
|
||||||
auto result = "hello!124:34.5".formattedRead!("%s!%s:%s", string, int, double);
|
|
||||||
assert(result == expected);
|
|
||||||
|
|
||||||
assertThrown!FormatException("hello!34.5:".formattedRead!("%s!%s:%s", string, double, int));
|
|
||||||
}
|
|
||||||
---
|
|
|
@ -1,15 +0,0 @@
|
||||||
Added fromHexString and fromHexStringAsRange functions to std.digest.
|
|
||||||
|
|
||||||
This new function enables the converion of a hex string to a range of bytes.
|
|
||||||
Unlike the template $(REF hexString, std, conv) that was designed to supersede
|
|
||||||
a language feature, this function is usable with runtime input.
|
|
||||||
|
|
||||||
The `std.conv` module lacks facilities to conveniently transform the input
|
|
||||||
to a series of bytes directly. Both $(REF parse, std, conv) and $(REF to, std,
|
|
||||||
conv) can only handle the conversion for a single value of the requested target
|
|
||||||
integer type. Furthermore, said functions would allocate a new buffer for the
|
|
||||||
result, while `fromHexStringAsRange` operates lazily by implementing a forward
|
|
||||||
range.
|
|
||||||
|
|
||||||
For further convenience, a validation function $(REF isHexString, std, digest)
|
|
||||||
was added as well.
|
|
|
@ -1,11 +0,0 @@
|
||||||
ODBC Bindings in `etc.c.odbc` have been updated to ODBC 4.0.
|
|
||||||
|
|
||||||
ODBC 4.0, via these new bindings, adds the following functionality:
|
|
||||||
|
|
||||||
1. Support for semi-structured data, such as JSON.
|
|
||||||
2. Collection valued columns.
|
|
||||||
3. Web-based Authorization flows.
|
|
||||||
|
|
||||||
A full list of new features can be found here: https://github.com/Microsoft/ODBC-Specification/blob/master/ODBC%204.0.md
|
|
||||||
|
|
||||||
Additionally these modules add support for 64-bit ODBC interfaces.
|
|
|
@ -1,38 +0,0 @@
|
||||||
Added popGrapheme function to std.uni.
|
|
||||||
|
|
||||||
The new function is a cross between the existing $(REF graphemeStride, std,
|
|
||||||
uni) and $(REF decodeGrapheme, std, uni) functions. The new function both
|
|
||||||
supports `@safe pure nothrow @nogc` like `graphemeStride` does as long as you
|
|
||||||
don't rely on autodecoding (side node: `@nogc` support for `graphemeStride`
|
|
||||||
added in this release), and works with any non-array ranges just like
|
|
||||||
`decodeGrapheme` does.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
-------
|
|
||||||
import std.uni;
|
|
||||||
|
|
||||||
// Two Union Jacks of the Great Britain in each
|
|
||||||
string s = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7";
|
|
||||||
wstring ws = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7";
|
|
||||||
dstring ds = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7";
|
|
||||||
|
|
||||||
// String pop length in code units, not points.
|
|
||||||
assert(s.popGrapheme() == 8);
|
|
||||||
assert(ws.popGrapheme() == 4);
|
|
||||||
assert(ds.popGrapheme() == 2);
|
|
||||||
|
|
||||||
assert(s == "\U0001F1EC\U0001F1E7");
|
|
||||||
assert(ws == "\U0001F1EC\U0001F1E7");
|
|
||||||
assert(ds == "\U0001F1EC\U0001F1E7");
|
|
||||||
|
|
||||||
import std.algorithm.comparison : equal;
|
|
||||||
import std.algorithm.iteration : filter;
|
|
||||||
|
|
||||||
// Also works for non-random access ranges as long as the
|
|
||||||
// character type is 32-bit.
|
|
||||||
auto testPiece = "\r\nhello!"d.filter!(x => !x.isAlpha);
|
|
||||||
// Windows-style line ending is two code point in a single grapheme.
|
|
||||||
assert(testPiece.popGrapheme() == 2);
|
|
||||||
assert(testPiece.equal("!"d));
|
|
||||||
-------
|
|
|
@ -1,6 +0,0 @@
|
||||||
Added `readfln` and `File.readfln` to `std.stdio`
|
|
||||||
|
|
||||||
These functions read a single line of input and parse it using a format string.
|
|
||||||
Unlike `readf`, they will not accidentally read multiple lines if the user
|
|
||||||
forgets to include a line terminator in the format string—a common mistake for
|
|
||||||
beginners.
|
|
|
@ -1,13 +0,0 @@
|
||||||
Added the `SharedAllocatorList`, as the thread-safe version of the regular `AllocatorList`.
|
|
||||||
|
|
||||||
The new $(REF SharedAllocatorList, std,experimental,allocator,building_blocks,allocator_list) has the same semantics as the regular `AllocatorList`.
|
|
||||||
Just as the regular `AllocatorList`, if the `BookkeepingAllocator` is `NullAllocator`, the `SharedAllocatorList` will switch to `ouroboros` mode,
|
|
||||||
allocationg memory for its own metadata.
|
|
||||||
|
|
||||||
---
|
|
||||||
SharedAllocatorList!((n) => SharedAscendingPageAllocator(max(n, numPages * pageSize)), NullAllocator) a;
|
|
||||||
auto b = a.allocate(100);
|
|
||||||
assert(b.length == 100);
|
|
||||||
|
|
||||||
assert(a.deallocate(b));
|
|
||||||
---
|
|
|
@ -1,39 +0,0 @@
|
||||||
New procedural API for `std.sumtype`
|
|
||||||
|
|
||||||
`std.sumtype` has three new convenience functions for querying and retrieving
|
|
||||||
the value of a `SumType` object.
|
|
||||||
|
|
||||||
* `has!T` returns `true` if the `SumType` object has a value of type `T`.
|
|
||||||
* `get!T` returns the value if its type is `T`, or asserts if it is not.
|
|
||||||
* `tryGet!T` returns the value if its type is `T`, or throws an exception if it
|
|
||||||
is not.
|
|
||||||
|
|
||||||
These functions make it easier to write code using `SumType` in a procedural
|
|
||||||
style, as opposed to the functional style encouraged by `match`.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
---
|
|
||||||
import std.sumtype;
|
|
||||||
import std.stdio;
|
|
||||||
|
|
||||||
SumType!(string, double) example = "hello";
|
|
||||||
|
|
||||||
if (example.has!string)
|
|
||||||
{
|
|
||||||
writeln("string: ", example.get!string);
|
|
||||||
}
|
|
||||||
else if (example.has!double)
|
|
||||||
{
|
|
||||||
writeln("double: ", example.get!double);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
writeln("double: ", example.tryGet!double);
|
|
||||||
}
|
|
||||||
catch (MatchException e)
|
|
||||||
{
|
|
||||||
writeln("Couldn't get a double.");
|
|
||||||
}
|
|
||||||
---
|
|
|
@ -1,16 +0,0 @@
|
||||||
std.uni has been upgraded from Unicode 15.1.0 to 16.0.0
|
|
||||||
|
|
||||||
This Unicode update was released September 10, 2024, and adds new blocks with characters.
|
|
||||||
See: https://www.unicode.org/versions/Unicode16.0.0/
|
|
||||||
|
|
||||||
```
|
|
||||||
import std;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
const alphaCount = iota(0, dchar.max).filter!(std.uni.isAlpha).walkLength;
|
|
||||||
writeln(alphaCount);
|
|
||||||
// formerly: 138387
|
|
||||||
// now: 142759
|
|
||||||
}
|
|
||||||
```
|
|
Loading…
Add table
Add a link
Reference in a new issue