Skip to content

Releases: Noelware/violet

26.07.03

10 Jun 05:21
34ab94e

Choose a tag to compare

Noelware.Violet.Experimental

Noelware.Violet.Experimental.Time

  • [duration] Added ToString and specialize std::formatter (@auguwu)
  • Document which version what object was added (@auguwu)

Git History: 26.07.02...26.07.03


Bazel

As of 21/01/26, we plans on uploading all Noelware.Violet frameworks onto the BCR and our own registry (https://bzl.noelware.cloud). If either are available, prefer using --registry=https://bzl.noelware.cloud.

bazel_dep(name = "violet", version = "26.07.03")
archive_override(
    module_name = "violet",
    integrity = "sha256-iH1sAlXANCIWd6RSBOFEfdkk58J0mljOADgmbA0GpVc=",
    urls = [
          # "https://artifacts.noelware.org/bazel-registry/violet/26.07.03/bazeldist.tgz",
          "https://github.com/Noelware/violet/releases/download/26.07.03/bazeldist.tgz",
    ]
)

Meson

subprojects/violet.wrap:

[wrap-file]
directory = violet-26.07.03
source_url = https://github.com/Noelware/violet/releases/download/26.07.03/mesondist.tgz
source_filename = mesondist.tgz
source_hash = 10a6c44c87e6c92177a88a1264e41716a27b62caca85d6bf9129eb6f25c99449
lead_directory_missing = true

[provide]
violet = violet_dep
violet_experimental = violet_experimental_dep
violet_io = violet_io_dep
violet_filesystem = violet_filesystem_dep
violet_experimental_threading = violet_experimental_threading_dep
violet_io_experimental = violet_io_experimental_dep
violet_terminal = violet_terminal_dep
violet_anyhow = violet_anyhow_dep

CMake

As of this release, CMake distribution is not available~

GN

As of this release, GN distribution is not available~

26.07.2

06 Jun 20:35
9b9b40c

Choose a tag to compare

Noelware.Violet

  • Add include guard in Traits.h (@auguwu)

Git History: 26.07.01...26.07.02


Bazel

As of 21/01/26, we plans on uploading all Noelware.Violet frameworks onto the BCR and our own registry (https://bzl.noelware.cloud). If either are available, prefer using --registry=https://bzl.noelware.cloud.

bazel_dep(name = "violet", version = "26.07.02")
archive_override(
    module_name = "violet",
    integrity = "sha256-UTDY2/+3im9LJShBFwQrMvujk7CD0Fs9pE0AvATxivE=",
    urls = [
          # "https://artifacts.noelware.org/bazel-registry/violet/26.07.02/bazeldist.tgz",
          "https://github.com/Noelware/violet/releases/download/26.07.02/bazeldist.tgz",
    ]
)

Meson

subprojects/violet.wrap:

[wrap-file]
directory = violet-26.07.02
source_url = https://github.com/Noelware/violet/releases/download/26.07.02/mesondist.tgz
source_filename = mesondist.tgz
source_hash = 326788bee96952c6e554ec4dfe2dc66e1b3f093064eb1b891a64bd15271a0977
lead_directory_missing = true

[provide]
violet = violet_dep
violet_experimental = violet_experimental_dep
violet_io = violet_io_dep
violet_filesystem = violet_filesystem_dep
violet_experimental_threading = violet_experimental_threading_dep
violet_io_experimental = violet_io_experimental_dep
violet_terminal = violet_terminal_dep
violet_anyhow = violet_anyhow_dep

CMake

As of this release, CMake distribution is not available~

GN

As of this release, GN distribution is not available~

26.07.01

04 Jun 23:18
c7c7bdf

Choose a tag to compare

Noelware.Violet

  • Fix compilation error in Runtime/Info.h header (@auguwu)

Git History: 26.07...master


Bazel

As of 21/01/26, we plans on uploading all Noelware.Violet frameworks onto the BCR and our own registry (https://bzl.noelware.cloud). If either are available, prefer using --registry=https://bzl.noelware.cloud.

bazel_dep(name = "violet", version = "26.07.01")
archive_override(
    module_name = "violet",
    integrity = "sha256-Fb+wDPRSpWZmE27MQduy3XNfVGWMXLrKWPQJ1kZCU2g=",
    urls = [
          # "https://artifacts.noelware.org/bazel-registry/violet/26.07.01/bazeldist.tgz",
          "https://github.com/Noelware/violet/releases/download/26.07.01/bazeldist.tgz",
    ]
)

Meson

subprojects/violet.wrap:

[wrap-file]
directory = violet-26.07.01
source_url = https://github.com/Noelware/violet/releases/download/26.07.01/mesondist.tgz
source_filename = mesondist.tgz
source_hash = 8215bf0ff6f52705e5029502b370451dcb70a2e2e9afcf9630bac27d01a07dcc
lead_directory_missing = true

[provide]
violet = violet_dep
violet_experimental = violet_experimental_dep
violet_io = violet_io_dep
violet_filesystem = violet_filesystem_dep
violet_experimental_threading = violet_experimental_threading_dep
violet_io_experimental = violet_io_experimental_dep
violet_terminal = violet_terminal_dep
violet_anyhow = violet_anyhow_dep

CMake

As of this release, CMake distribution is not available~

GN

As of this release, GN distribution is not available~

26.07

04 Jun 02:29
f2eaa26

Choose a tag to compare

  • breaking: Merge Noelware.Violet.Subprocess into the main repository. Everything is now available under //violet/subprocess
    rather than a separate framework package. (@auguwu)
  • breaking: VIOLET_DEPRECATED / VIOLET_DEPRECATED_BECAUSE now take the version as a string literal (e.g. "26.07") instead of a bare token; the previous form silently produced malformed deprecation messages (@auguwu)
  • Some classes, methods, typedefs, functions, etc. is marked with what versions they were introduced. Also, stablization points for experimental frameworks. (@auguwu)
  • Remove violet::experimental::SmolString, now use violet::SmolString (@auguwu)

Noelware.Violet

  • breaking: Removed ThreadSafety template paramter in CancellableDefer and added LocalCancellableDefer instead (@auguwu)
  • breaking: Removed more deprecated macros (@auguwu)
  • Added RefCnt and RefCntTraits, a way to externally provide reference counting (@auguwu)
  • Added violet::Drop<T>, a no-op sink to deliberately consume and destroy a value (@auguwu)
  • Added VIOLET_DISALLOW_COPY_SINCE macro, for deleting copy operations with a NOELDOC_SINCE annotation (@auguwu)
  • [events] Disallow copy and move on events::Emitter<Event> (@auguwu)
  • [events] Allow persisted guards to cleanup itself rather than doing it manually (@auguwu)
  • [support/demangle] Added initial support for MSVC C++'s ABI but is unavailable. This will properly be available once Windows support is available (@auguwu)
  • [support/demangle] Added getting the demangled C++ exception type if we are in a catch (...) block (@auguwu)
  • [container/optional] Allow T in Optional to have non-copyable and non-movable types (@auguwu)
  • [container/optional] Remove Value() accessor and operator== from Some<T> (@auguwu)
  • [container/optional] Disallow copy and move operations if T is not copy or movable (@auguwu)
  • [container/result] Remove Value() accessor and operator== from Ok<T> (@auguwu)

Noelware.Violet.IO

  • Add source location tracking for OS-level errors (@auguwu)
  • Disallow copies on FileDescriptor (@auguwu)
  • Add FileDescriptor::Release(), which will release the descriptor to the caller (@auguwu)
  • FileDescriptor is now non-copyable (@auguwu)
  • FileDescriptor is now from 16 bytes to 4 bytes on Unix platforms, the SharedPtr<Impl> indirection is gone and the descriptor is stored inline (@auguwu)
  • Add operator<<(std::ostream&, FileDescriptor). ToString() format changed from FileDescriptor(<id>) to fd(<id>) (@auguwu)
  • On Windows, FileDescriptor::value_type is now HANDLE rather than void* (@auguwu)

Noelware.Violet.Filesystem

  • breaking: Deprecate the free filesystem::Metadata(PathRef, bool followSymlinks) function in favour of Metadata::For(path, SymlinkResolution) (@auguwu)
  • Add Metadata::For overloads for an open FileDescriptor, a (dirfd, path) pair (resolved via fstatat), and PathRef (@auguwu)
  • Add SymlinkResolution enum (Follow / NoFollow) to make symlink behaviour explicit at call sites (@auguwu)
  • Extend Metadata on Unix with Inode, Device, DeviceMajor, DeviceMinor, Rdev, RdevMajor, RdevMinor, UserID, GroupID, and HardLinks (@auguwu)
  • Add Mode::GroupCanRead / GroupCanWrite / GroupCanExecute, which had been missing from the POSIX mode accessors (@auguwu)
  • Add BasePath::WithCStr, which invokes a callable with a NUL-terminated view of the path, borrowing the existing storage when possible and falling back to a stack buffer or temporary String otherwise (@auguwu)
  • Dirs and WalkDirs now derive from Iterator<...>, are non-copyable but move-constructible, and expose StopTraversing() to end iteration early (@auguwu)
  • WalkDirs no longer silently swallows directories it cannot descend into, the failing openat surfaces as an io::Error item on the next Next() call (@auguwu)
  • ReadDir, SetWorkingDir, and File::Open route their paths through WithCStr, removing the implicit static_cast<CStr>(path) copies (@auguwu)
  • filesystem::Copy on Linux now falls back to a userspace read/write loop when copy_file_range is unusable (cross-filesystem copies on kernels < 5.3 returning EXDEV, sandboxes that block the syscall with ENOSYS, and EINVAL / EOPNOTSUPP / EPERM / EBADF from certain filesystems and pseudo-files), instead of failing outright (@auguwu)
  • filesystem::Copy on Linux now mirrors the source file's permission bits onto the destination rather than hardcoding 0644 (@auguwu)
  • Fix RemoveAllDirs failing with ENOTEMPTY: directories are now removed after their contents (deepest-first) instead of on first visit during the pre-order walk (@auguwu)

Noelware.Violet.Filesystem.Experimental

  • Added Dir, analogus to violet::filesystem::File but for directories (@auguwu)

Noelware.Violet.Subprocess (from 26.06)

  • ChildStdin, ChildStdout, and ChildStderr are now non-default-constructible, non-copyable, and move-only, they wrap an owning FileDescriptor and the previous implicit copies were unsound (@auguwu)
  • [macOS] Child::Wait now falls back to waitpid when kevent registration fails with ESRCH (the child already exited between Spawn and Wait), instead of surfacing the error (@auguwu)

Noelware.Violet.Experimental

  • Added violet::experimental::Slice, which is a std::array-like container (@auguwu)

Noelware.Violet.Experimental.Synchronization

  • Added violet::experimental::sync::ReadWriteLock, which is a shared-or-exclusive mutex (@auguwu)
  • Added violet::experimental::sync::WaitGroup (@auguwu)

Git History: 26.06.05...26.07


Bazel

As of 21/01/26, we plans on uploading all Noelware.Violet frameworks onto the BCR and our own registry (https://bzl.noelware.cloud). If either are available, prefer using --registry=https://bzl.noelware.cloud.

bazel_dep(name = "violet", version = "26.07")
archive_override(
    module_name = "violet",
    integrity = "sha256-/oVlbeFm40oTS/ddvu81YNCq3zyS+CCyKDyR7k2eWlY=",
    urls = [
          # "https://artifacts.noelware.org/bazel-registry/violet/26.07/bazeldist.tgz",
          "https://github.com/Noelware/violet/releases/download/26.07/bazeldist.tgz",
    ]
)

Meson

subprojects/violet.wrap:

[wrap-file]
directory = violet-26.07
source_url = https://github.com/Noelware/violet/releases/download/26.07/mesondist.tgz
source_filename = mesondist.tgz
source_hash = 2f9dbc69277eda70564ff985ae2e5f4210d9615ebc834079f784ed564b55396d
lead_directory_missing = true

[provide]
violet = violet_dep
violet_experimental = violet_experimental_dep
violet_io = violet_io_dep
violet_filesystem = violet_filesystem_dep
violet_experimental_threading = violet_experimental_threading_dep
violet_io_experimental = violet_io_experimental_dep
violet_terminal = violet_terminal_dep
violet_anyhow = violet_anyhow_dep

CMake

As of this release, CMake distribution is not available~

GN

As of this release, GN distribution is not available~

26.06.05

18 May 11:34
2a64695

Choose a tag to compare

Noelware.Violet

  • Move type traits and concepts into their own header: violet/Traits.h (still re-exported when using violet/Violet.h header) (@auguwu)
  • Optional: Allow non-assignable copy/move operations to be available. (@auguwu)
    • This disallowed Optional<std::pair<const K, V>> (like Abseil's absl::flat_hash_map) when building iterators.

Noelware.Violet.Experimental

  • New types: Mutex (MutexLock, Condvar), Synchronized, and Own. (@auguwu)
    • Violet can use Abseil's Mutex types if provided via --@violet//buildsystem/bazel/flags:abseil=True. We set this to False; Noelware interally uses Abseil but for consumers that don't want to depend on Abseil.
    • Own is a version of std::shared_ptr that works with shared base types that point to derived types and other fixes.
  • New integral-based functions arrive from Eous' codebase. (@auguwu)
  • Deprecate VIOLET_HAS_EXCEPTIONS, VIOLET_USE_RTTI, VIOLET_IS_LITTLE_ENDIAN, and VIOLET_IS_BIG_ENDIAN for VIOLET_FEATURE_{EXCEPTIONS|RTTI} / VIOLET_PLATFORM_{LITTLE|BIG}_ENDIAN for consistency (@auguwu)
  • Add anyhow::Error::ToString (@auguwu)

Noelware.Violet.Experimental.Time

This is a brand new framework that was brought from Eous' codebase.

This comes with Duration, TimePoint, and Instant for time manipulation and parsing that bridges C++'s std::chrono. Also provides Clock and FakeClock, which can be used instead of std::chrono::{system|steady}_clock. FakeClock's primary use is for tests.

Noelware.Violet.Filesystem

  • Fix bug where CreateDirectories using the full path instead of current segment (@auguwu, #47)

Git History: 26.06.04...26.06.05


Bazel

As of 21/01/26, we plans on uploading all Noelware.Violet frameworks onto the BCR and our own registry (https://bzl.noelware.cloud). If either are available, prefer using --registry=https://bzl.noelware.cloud.

bazel_dep(name = "violet", version = "26.06.05")
archive_override(
    module_name = "violet",
    integrity = "sha256-p2+J27hNx3mJhHTg8mCPohse8C7oWB9NLhBxSj58+sA=",
    urls = [
          # "https://artifacts.noelware.org/bazel-registry/violet/26.06.05/bazeldist.tgz",
          "https://github.com/Noelware/violet/releases/download/26.06.05/bazeldist.tgz",
    ]
)

Meson

subprojects/violet.wrap:

[wrap-file]
directory = violet-26.06.05
source_url = https://github.com/Noelware/violet/releases/download/26.06.05/mesondist.tgz
source_filename = mesondist.tgz
source_hash = 4a2ffee6ff3033e357f1e8ac0b0eced6ff8f451d06df4763b9d00854e83b6379
lead_directory_missing = true

[provide]
violet = violet_dep
violet_experimental = violet_experimental_dep
violet_io = violet_io_dep
violet_filesystem = violet_filesystem_dep
violet_experimental_threading = violet_experimental_threading_dep
violet_io_experimental = violet_io_experimental_dep
violet_terminal = violet_terminal_dep
violet_anyhow = violet_anyhow_dep

CMake

As of this release, CMake distribution is not available~

GN

As of this release, GN distribution is not available~

26.06.04

06 May 02:21
c7f05ea

Choose a tag to compare

This is a patch revision, nothing much has changed than the Meson distribution.

Git History: 26.06.03...26.06.04


Bazel

As of 21/01/26, we plans on uploading all Noelware.Violet frameworks onto the BCR and our own registry (https://bzl.noelware.cloud). If either are available, prefer using --registry=https://bzl.noelware.cloud.

bazel_dep(name = "violet", version = "26.06.04")
archive_override(
    module_name = "violet",
    integrity = "sha256-m6lMMBvyzEdIfLdh8ZbBZndJSehDTuczEdj1Gw+c6e0=",
    urls = [
          # "https://artifacts.noelware.org/bazel-registry/violet/26.06.04/bazeldist.tgz",
          "https://github.com/Noelware/violet/releases/download/26.06.04/bazeldist.tgz",
    ]
)

Meson

subprojects/violet.wrap:

[wrap-file]
directory = violet-26.06.04
source_url = https://github.com/Noelware/violet/releases/download/26.06.04/mesondist.tgz
source_filename = mesondist.tgz
source_hash = 86510d73496856a49f3cf453e5643acc0cec089039d80336b701477da91fa7b2
lead_directory_missing = true

[provide]
violet = violet_dep
violet_experimental = violet_experimental_dep
violet_io = violet_io_dep
violet_filesystem = violet_filesystem_dep
violet_experimental_threading = violet_experimental_threading_dep
violet_io_experimental = violet_io_experimental_dep
violet_terminal = violet_terminal_dep
violet_anyhow = violet_anyhow_dep

CMake

As of this release, CMake distribution is not available~

GN

As of this release, GN distribution is not available~

26.06.03

06 May 01:03
769162d

Choose a tag to compare

This is a patch revision, nothing much has changed than the Meson distribution.

Git History: 26.06.02...26.06.03


Bazel

As of 21/01/26, we plans on uploading all Noelware.Violet frameworks onto the BCR and our own registry (https://bzl.noelware.cloud). If either are available, prefer using --registry=https://bzl.noelware.cloud.

bazel_dep(name = "violet", version = "26.06.03")
archive_override(
    module_name = "violet",
    integrity = "sha256-iWUZNFnYpB4iWZKpUC3sAQgAV332xHd886EqT4aGjOc=",
    urls = [
          # "https://artifacts.noelware.org/bazel-registry/violet/26.06.03/bazeldist.tgz",
          "https://github.com/Noelware/violet/releases/download/26.06.03/bazeldist.tgz",
    ]
)

Meson

subprojects/violet.wrap:

[wrap-file]
directory = violet-26.06.03
source_url = https://github.com/Noelware/violet/releases/download/26.06.03/mesondist.tgz
source_filename = mesondist.tgz
source_hash = 2d8528353bb2b2c8ce9b6ddbb792f7325acdd66ac363887b711845a4bed419da
lead_directory_missing = true

[provide]
violet = violet_dep
violet_experimental = violet_experimental_dep
violet_io = violet_io_dep
violet_filesystem = violet_filesystem_dep
violet_experimental_threading = violet_experimental_threading_dep
violet_io_experimental = violet_io_experimental_dep
violet_terminal = violet_terminal_dep
violet_anyhow = violet_anyhow_dep

CMake

As of this release, CMake distribution is not available~

GN

As of this release, GN distribution is not available~

26.06.02

06 May 00:48
1815d12

Choose a tag to compare

Meson

  • Fix issues where platform-specific defines were not being propagated (@auguwu)
  • Meson is now fully supported as a secondary buildsystem (@auguwu)
    • Changelogs in releases will now include a way to add Noelware.Violet as a Meson wrapdb file
    • There is a new tarball (mesondist.tgz) that should be used over the Git repository or release tarballs as it strips all Bazel and CMake configurations.

Noelware.Violet.Experimental

  • Add violet::experimental::Any, a new type originated from Noelware's Eous project that is type-erased, RTTI-friendly type over std::any (@auguwu)

Git History: 26.06.01...26.06.02


Bazel

As of 21/01/26, we plans on uploading all Noelware.Violet frameworks onto the BCR and our own registry (https://bzl.noelware.cloud). If either are available, prefer using --registry=https://bzl.noelware.cloud.

bazel_dep(name = "violet", version = "26.06.02")
archive_override(
    module_name = "violet",
    integrity = "sha256-GVRBd2MQakY6nGDQmGKNl+G9Fb4Y6V8jlHTpZ/a9Wnw=",
    urls = [
          # "https://artifacts.noelware.org/bazel-registry/violet/26.06.02/bazeldist.tgz",
          "https://github.com/Noelware/violet/releases/download/26.06.02/bazeldist.tgz",
    ]
)

Meson

subprojects/violet.wrap:

[wrap-file]
source_url  = https://github.com/Noelware/violet/releases/download/26.06.02/mesondist.tgz
source_hash = c12ffda1fec0fc757abea59d5d6f51a350e0d18fd078fef07dabe15d1e19552e

[provide]
violet = violet_dep
violet_experimental = violet_experimental_dep
violet_io = violet_io_dep
violet_filesystem = violet_filesystem_dep
violet_experimental_threading = violet_experimental_threading_dep
violet_io_experimental = violet_io_experimental_dep
violet_terminal = violet_terminal_dep
violet_anyhow = violet_anyhow_dep

CMake

As of this release, CMake distribution is not available~

GN

As of this release, GN distribution is not available~

26.06.01

02 May 22:44
8f13fd0

Choose a tag to compare

Noelware.Violet

  • SmolString: Expose Data and Size so that NTTP works (@auguwu)

Noelware.Violet.Filesystem

  • Remove deprecated parameters in OpenOptions (@auguwu)

Git History: 26.06...26.06.01

Bazel

As of 21/01/26, we have plans on uploading all Noelware.Violet frameworks onto the BCR and our own (https://bzl.noelware.cloud). It could exist right now, if you are, you can use --registry=https://bzl.noelware.cloud and all frameworks will be available.

bazel_dep(name = "violet", version = "26.06.01")
archive_override(
    module_name = "violet",
    integrity = "sha256-usY8gpBnrQouFn/y3MdASeltZ7HULsnQcZ9ymwAjZBY=",
    urls = [
        # "https://artifacts.noelware.org/bazel-registry/violet/26.06.01/bazeldist.tgz",
        "https://github.com/Noelware/violet/releases/download/26.06.01/bazeldist.tgz",
    ]
)

CMake

Right now, it is not the best to use the frameworks in a CMake environment! ehehe...~

Meson

Using the frameworks in a Meson environment is not ready yet!

GN ("Generate Ninja")

Using the frameworks in a GN environment is not ready yet!

26.06

01 May 19:51
d8310a4

Choose a tag to compare

  • (breaking) Remove the old, deprecated platform/compiler/buildsystem/architecture-based macros that were deprecated in 26.05.05 (@auguwu)
  • (breaking) Deprecate VIOLET_{M|T|UB|A}SAN for VIOLET_SANITIZER_{ADDRESS|MEMORY|THREAD|UNDEFINED}, will be removed in a 26.07 release (@auguwu)

CMake

  • Improve interface around the CMake build. Getting closer to codegen from Bazel to CMake targets. (@auguwu)

Meson

  • Initial support for Meson. (@auguwu)

Noelware.Violet

  • Promote violet::experimental::SmolString to Noelware.Violet (now as violet::SmolString) (@auguwu)
  • Iterator: Add forwarded declarations for all iterable combinators (@auguwu)
  • Iterator: Make the return type for combinators more obvious (@auguwu)
  • Iterator: Add documentation for all iterable combinators (@auguwu)
  • Iterator: Add underlying_iterator and underlying_iterator_t type trait (@auguwu)
  • Optional: Add Optional::operator<=> for violet::Nothing, violet::Optional, std::optional, and T (@auguwu)

Noelware.Violet.Filesystem

  • Fix a issue where when using WalkDirs/Dirs fails to compile (@auguwu)

Git History: 26.05.08...26.06

Bazel

As of 21/01/26, we have plans on uploading all Noelware.Violet frameworks onto the BCR and our own (https://bzl.noelware.cloud). It could exist right now, if you are, you can use --registry=https://bzl.noelware.cloud and all frameworks will be available.

bazel_dep(name = "violet", version = "26.06")
archive_override(
    module_name = "violet",
    integrity = "sha256-DP+ytt4x7QChhS6BA5LsK19gb8M0B42jIryl57Vz3Qo=",
    urls = [
        # "https://artifacts.noelware.org/bazel-registry/violet/26.06/bazeldist.tgz",
        "https://github.com/Noelware/violet/releases/download/26.06/bazeldist.tgz",
    ]
)

CMake

Right now, it is not the best to use the frameworks in a CMake environment! ehehe...~

Meson

Using the frameworks in a Meson environment is not ready yet!

GN ("Generate Ninja")

Using the frameworks in a GN environment is not ready yet!