Skip to content

Instantly share code, notes, and snippets.

@milseman
milseman / unicode_processing.md
Last active January 5, 2024 20:42
Pitch: Unicode Processing APIs

This is a pitch for some low-level Unicode operations to enable libraries to implement their own String-like functionality and types. The purpose of this API is to present low-level core components out of which libraries can make types and higher-level API (i.e. tools for tool-makers).

I'm interested in hearing about capabilities that libraries may need and getting design feedback.

Introduction

String performs many Unicode operations using a mix of internal and publicly available functionality in the stdlib. The stdlib provides some limited general-purpose Unicode API, though this is a very dusty corner of the stdlib. We want to enable libraries to vend their own String-like types and functionality.

@milseman
milseman / v2_filepath_syntactic_operations.md
Last active February 5, 2021 16:32
[Proposal v2] FilePath Syntactic Operations

FilePath Syntactic Operations

Introduction

FilePath appeared in System 0.0.1 with a minimal API. This proposal adds API for syntactic operations, which are performed on the structure of the path and thus do not consult with the file system or make any system calls. These include inspecting the structure of paths, modifying paths, and accessing individual components.

@milseman
milseman / filepath_syntactic_operations.md
Last active January 21, 2021 20:26
[Proposal] FilePath Syntactic Operations

FilePath Syntactic Operations

Introduction

FilePath appeared in System 0.0.1 with a minimal API. This proposal adds API for syntactic operations, which are performed on the structure of the path and thus do not consult with the file system or make any system calls. These include inspecting the structure of paths, modifying paths, and accessing individual components.

Additionally, this proposal greatly expands Windows support and enables writing platform-agnostic path manipulation code.

Future Work: Operations that consult the file system, e.g. resolving symlinks.

@milseman
milseman / offset_bound_proposal.md
Last active October 6, 2019 06:16
Offset-Based Access to Indices, Elements, and Slices

Changes in v2

  • Removed .start and .end, now all OffsetBounds are built from .first and .last.
    • Simplifies usage and learnability. .last + 1 representing the end is mostly only relevant to documentation.
    • Better delineates OffsetBound abstraction and terminology from indices.
  • Added RangeReplaceableCollection convenience overloads, as well as subscript setters.
    • .insert(at:), .remove(at:), etc.,
@milseman
milseman / string_formatters.swift
Last active September 11, 2019 18:23
String Formatters Through Interpolation
struct StringFormatters {
var text = "Hello, World!"
}
/*
This is the master template for fprintf format string functionality.
For development purposes only
```
@milseman
milseman / collection_searchers.swift
Last active July 6, 2019 01:21
WIP: Collection Consumers and Searchers
///
/// Collection Consumers
///
protocol CollectionConsumer {
associatedtype Element
func consumeFront<C: Collection>(_ c: C) -> C.Index? where C.Element == Element
}
@milseman
milseman / offset_bound_gist.swift
Last active September 27, 2021 16:55
OffsetBound
// The below will be a customization point on Collection. For the purposes of
// this gist, we'll fake/approximate it with static overloads
extension Collection {
/// Returns an index `distance` positions prior to `i` if it exists.
///
/// Other methods such as `index(_:offetBy:)` must not be passed a negative
/// offset if the collection is bidirectional. This method will perform a
/// negative offset even if the collection is not bidirectional, by using a
/// less efficient means. `BidirectionalCollection` customizes this with a
@milseman
milseman / offset_no_range_no_label.swift
Last active May 6, 2019 21:00
Offset indexing, no range, no label
// TODO: doc
public struct OffsetBound {
internal enum Kind {
case fromStart(Int)
case fromEnd(Int)
}
internal var kind: Kind
internal init(fromStart: Int) {
self.kind = .fromStart(fromStart)
@milseman
milseman / offset_no_range_explicit_end.swift
Created May 6, 2019 19:25
Offset Indexing, no range, explicit end
// TODO: doc
public struct OffsetBound {
internal enum Kind {
case fromStart(Int)
case fromEnd(Int)
}
internal var kind: Kind
internal init(fromStart: Int) {
self.kind = .fromStart(fromStart)