Read more of this story at Slashdot.
Read more of this story at Slashdot.
An unlisted and now-removed video from Meta showed off a new pair of Ray-Ban branded smart glasses with a display and a wristband to help control them, as reported by UploadVR. The video also features a new pair of wraparound “Sphaera” Oakley smart glasses with a camera on the nose, meaning that Meta itself may have inadvertently leaked two of its biggest announcements from its Connect event this week.
For the glasses with a display, the video includes branding that says “Meta | Ray-Ban” and “Display,” so perhaps Meta will call them the Meta Ray-Ban Display. Based on a brief clip included in UploadVR’s article, the actual display is in the right lens of the glasses, and the clip shows how the glasses will let you do things like ask Meta AI a question, look at a map on the glasses to help you navigate, translate a sign, or use your hand with the wristband to “write” a reply to a chat.
Earlier this year, CNBC reported that the wristband for Meta’s codenamed “Hypernova” glasses with a display would use surface electromyography (sEMG) technology to interpret signals from hand movements to help you control the device, so the clip is presumably showing that tech in action.
Meta CEO Mark Zuckerberg will be hosting a Connect keynote at 8PM ET on Wednesday, where it seems like these new glasses will make their official debut. The Verge will be covering the keynote live.
Correction, September 15th: An earlier version of this article speculated about translucent versions of the HSTN Oakley glasses, but those are already on sale.
We have released for general availability Microsoft.Data.SqlClient 6.1. This .NET Data Provider for SQL Server provides general connectivity to the database and supports all the latest SQL Server features for applications targeting .NET, .NET Framework, and .NET Standard.
To try out the new package, add a NuGet reference to Microsoft.Data.SqlClient in your application.
If you've been following our preview releases, you know we've been busy working to add features and improve stability and performance of the Microsoft.Data.SqlClient library.
Some of the highlights of new features in 6.1 over the 6.0 release of Microsoft.Data.SqlClient include:
The initial release, 6.1.0, had regressions introduced by the changes to improve large data type async read performance. The 6.1.0 release was delisted and 6.1.1 was released with the performance changes reverted to maintain stability and reliability of the library. Fixing the performance of fetching large data types in async mode was the highest user-upvoted issue in our GitHub repository and had been worked on for a long time. We regret that the changes introduced regressions and are taking steps to address them as well as expand testing to cover the scenarios that were affected to ensure we don't regress those scenarios in the future. We hope that the performance changes can be brought forward in a future release, but stability of the library will always be a higher priority for us.
For the full list of added features, fixes, and changes in Microsoft.Data.SqlClient 6.1, please see the Release Notes.
Again, to try out the new package, add a NuGet reference to Microsoft.Data.SqlClient in your application. If you encounter any issues or have any feedback, head over to the SqlClient GitHub repository and submit an issue.
David Engel
Most of today’s Internet traffic still uses IPv4, which cannot provide transparent end-to-end connectivity to apps. IPv4 only provides 232 addresses - much less than the number of devices on today’s Internet - so it’s not possible to assign a public IPv4 address to every Android device, let alone to individual apps or functions within a device. So most Internet users have private IPv4 addresses, and share a public IPv4 address with other users of the same network using Network Address Translation (NAT). NAT makes it difficult to build advanced networking apps such as video calling apps or VPNs, because these sorts of apps need to periodically send packets to keep NAT sessions alive (which hurts battery) and implement complex protocols such as STUN to allow devices to connect to each other through NAT.
The new version of the Internet protocol, IPv6 - now used by about half of all Google users - provides virtually unlimited address space and the ability for devices to use multiple addresses. When every device can get global IPv6 addresses, there is no need to use NAT for address sharing! But although the address space itself is no longer limited, the current IPv6 address assignment methods used on Wi-Fi, such as SLAAC and DHCPv6 IA_NA, still have limitations.
For one thing, both SLAAC and DHCPv6 IA_NA require the network to maintain state for each individual address, so assigning more than a few IPv6 addresses to every Android device can cause scaling issues on the network. This means it’s often not possible to assign IPv6 addresses to VMs or containers within the device, or to wearable devices and other tethered devices connected to it. For example, if your app is running on a wearable device connected to an Android phone, or on a tablet tethered to an Android phone that’s connected to Wi-Fi, it likely won’t have IPv6 connectivity and will need to deal with the complexities and battery impact of NAT.
Additionally, we’ve heard feedback from some users and network operators that they desire more control over the IPv6 addresses used by Android devices. Until now, Android only supported SLAAC, which does not allow networks to assign predictable IPv6 addresses, and makes it more difficult to track the mapping between IPv6 addresses and the devices using them. This has limited the availability of IPv6 on Android devices on some networks.
To overcome these drawbacks, we have added support for DHCPv6 Prefix Delegation (PD) as defined in RFC 8415 and RFC 9762. The Android network stack can now request a dedicated prefix from the network, and if it obtains a prefix, it will use it to obtain IPv6 connectivity. In future releases, the device will be able to share the prefix with wearable devices, tethered devices, virtual machines, and stub networks such as Thread, providing all these devices with global IPv6 connectivity. This truly realizes the potential of IPv6 to allow end-to-end, scalable connectivity to an unlimited number of devices and functions, without requiring NAT. And because the prefix is assigned by the network, network operators can use existing DHCPv6 logging infrastructure to track which device is using which prefix (see RFC 9663 for guidance to network operators on deploying DHCPv6 PD).
This allows networks to fully realize the potential of IPv6: devices maintain the flexibility of SLAAC, such as the ability to use a nearly unlimited number of addresses, and the network maintains the manageability and accountability of a traditional DHCPv6 setup. We hope that this will allow more networks to transition to IPv6, providing apps with end-to-end IPv6 connectivity and reducing the need for NAT traversal and keepalives.
We’re excited to announce Swift 6.2, a release aimed at making every Swift developer more productive, regardless of where or how you write code. From improved tooling and libraries to enhancements in concurrency and performance, Swift 6.2 delivers a broad set of features designed for real-world development at every layer of the software stack.
Read on for a deep dive into changes to the language, libraries, workflows, platform support, and next steps for getting started with Swift 6.2.
Swift 6.2 lowers the barrier to concurrent programming with a set of changes designed to reduce boilerplate and let you write safe concurrent code more naturally:
@MainActor
annotations using the new option to isolate code to the main actor by default. This option is ideal for scripts, UI code, and other executable targets.async
functions: Write async code without concurrent access to mutable state. Previously, nonisolated async
methods always switched to the global executor that manages the concurrent thread pool, which made it difficult to write async methods for class types without data-race safety errors. In Swift 6.2, you can migrate to an upcoming feature where async
functions run in the caller’s execution context, even when called on the main actor.@concurrent
: Introduce code that runs concurrently using the new @concurrent
attribute. This makes it clear when you want code to remain serialized on actor, and when code may run in parallel.// In '-default-isolation MainActor' mode
struct Image {
// The image cache is safe because it's protected
// by the main actor.
static var cachedImage: [URL: Image] = [:]
static func create(from url: URL) async throws -> Image {
if let image = cachedImage[url] {
return image
}
let image = try await fetchImage(at: url)
cachedImage[url] = image
return image
}
// Fetch the data from the given URL and decode it.
// This is performed on the concurrent thread pool to
// keep the main actor free while decoding large images.
@concurrent
static func fetchImage(at url: URL) async throws -> Image {
let (data, _) = try await URLSession.shared.data(from: url)
return await decode(data: data)
}
}
Together, these improvements let you write data-race free code with less annotation overhead, provide more predictable behavior for async code, while still allowing you to introduce concurrency when you need it.
Swift 6.2 includes features designed to maximize performance without compromising safety. These features help you write safe, low-level code with predictable performance and minimal overhead.
InlineArray
is a new fixed-size array with inline storage for elements, which can be stored on the stack or directly within other types without additional heap allocation. You can introduce an inline array by writing the size in angle brackets before the element, or by using the of
shorthand syntax:
struct Game {
// Shorthand for InlineArray<40, Sprite>
var bricks: [40 of Sprite]
init(_ brickSprite: Sprite) {
bricks = .init(repeating: brickSprite)
}
}
The new Span
type offers safe, direct access to contiguous memory. Span maintains memory safety by ensuring the memory remains valid while you’re using it. These guarantees are checked at compile time with no runtime overhead, and define away the memory safety problems inherent to pointers, such as use-after-free bugs.
Swift 6.2 enhances its capabilities for low-level and security-critical projects beyond new APIs:
String
APIs, any
types for class-constrained protocols, and the new InlineArray
and Span
types.Span
for C++ APIs through header annotations.Beyond language improvements, Swift 6.2 smooths the day-to-day iteration cycle of editing, building, and debugging code.
The Swift extension for VS Code is now officially verified and distributed by Swift.org. The latest version of the extension includes:
These workflow improvements make it easier to work on Swift projects in your environment of choice with first-class tooling.
Swift 6.2 introduces enhances how you manage compiler warnings by allowing control at the diagnostic group level. A diagnostic group is a category of warnings identified by a name. You can specify the desired behavior of warnings in a diagnostic group in a Swift package manifest using the treatWarning
method on SwiftSetting
, or promote all warnings to errors using the treatAllWarnings
method. For example, you can promote all warnings to errors except for warnings about uses of deprecated APIs:
.target(
name: "MyLibrary",
swiftSettings: [
.treatAllWarnings(as: .error),
.treatWarning("DeprecatedDeclaration", as: .warning),
]
)
Swift 6.2 significantly improves clean build times for projects that use macro-based APIs. Previously, the build system had to first fetch and build the swift-syntax package from source before building the macro project, which noticeably lengthened compile times, especially in CI environments. SwiftPM now supports pre-built swift-syntax dependencies, completely eliminating an expensive build step.
Swift 6.2 makes it much easier to follow what’s happening in concurrent code when debugging with LLDB:
async
stepping: Reliably step into asynchronous functions in LLDB, even when the async call requires switching threads.Swift 6.2 includes migration tooling to help you adopt upcoming language features:
This streamlines the process of enabling upcoming features by eliminating the tedious task of manual code changes. You can learn more about migration tooling in the Swift migration guide.
Whether you’re managing external processes, reacting to state changes, or writing test suites, the Swift 6.2 libraries are evolving to help you write cleaner and safer code.
Swift 6.2 introduces a new Subprocess
package that offers a streamlined, concurrency‑friendly API for launching and managing external processes. This includes APIs built with async/await, fine-grained control over process execution, platform-specific configuration, and more—ideal for scripting, automation, and server‑side tasks:
import Subprocess
let swiftPath = FilePath("/usr/bin/swift")
let result = try await run(
.path(swiftPath),
arguments: ["--version"]
)
let swiftVersion = result.standardOutput
Explore the full API surface for version 0.1 in the swift-subprocess repository, and feedback from your adoption will inform the API that is released in version 1.0.
In Swift 6.2, the Foundation library includes a modern NotificationCenter
API that uses concrete notification types instead of relying on strings and untyped dictionaries for notification names and payloads. This means you can define a notification struct with stored properties, and observers can use the type without error-prone indexing and dynamic casting. Notification types also specify whether they’re posted synchronously on the main actor or asynchronously through a conformance to MainActorMessage
or AsyncMessage
, which eliminates concurrency errors when working with main actor notifications.
Swift 6.2 enables streaming transactional state changes of observable types using the new Observations
async sequence type. Updates include all synchronous changes to the observable properties, and the transaction ends at the next await
that suspends. This avoids redundant UI updates, improves performance, and ensures that your code reacts to a consistent snapshot of the value.
Swift Testing in Swift 6.2 adds new APIs for enhanced expressivity in your tests and test results:
Raw identifier display names let you customize the names of test functions and suite types with less code:
-@Test("square() returns x * x")
-func squareIsXTimesX() {
+@Test func `square() returns x * x`() {
#expect(square(4) == 4 * 4)
}
Swift 6.2 gains support for WebAssembly, also known as Wasm. WebAssembly is a virtual machine platform focused on portability, security, and high performance. You can build both client and server applications for Wasm and deploy to the browser or other runtimes. Learn more about Wasm in the vision for WebAssembly support in Swift.
Thank you to everyone who shared their experiences, frustrations, and insights that guided the design of Swift 6.2, especially the approachable concurrency model. Your feedback made it clear where the language could be friendlier, where safety needed to feel more natural, and where the tools could make you more productive. The improvements in Swift 6.2 are only possible because of your voices.
If you’re excited about where Swift is headed, there’s no better time to get involved in the Swift community. From participating in Swift Evolution, to contributing code on GitHub, or sharing feedback on how the language feels in real-world projects, every voice helps shape Swift’s future. Whether you’re a seasoned programmer or just starting out, our community thrives on collaboration and welcomes new perspectives. Join in, learn from others, and help make Swift a better language.
You can find a complete list of language proposals that were accepted through the Swift Evolution process and implemented in Swift 6.2 on the Swift Evolution dashboard.
Ready to upgrade? Install the latest toolchain using Swiftly swiftly install 6.2
or Swift.org/install and start exploring Swift 6.2 today.
Zach Gates quantifies the value of automating things, Albania’s new prime minister names an AI “minister” to his Cabinet, Eckart Walther launches Really Simple Licensing (RSL) along with some big names on the web, Vishnu Haridas praises UTF-8’s design, and Justin Searls disagrees with last week’s headline story about AI coding tools and shovelware.
Changelog++ members support our work, get closer to the metal, and make the ads disappear. Join today!
Sponsors:
Featuring: