When is AnyObject not AnyObject? When it’s a protocol type.
XZ Gon' Give It To Ya
Last Friday the internet was rocked with the discovery of an exploit in xz-utils that was not only well-put-together technically, but also an example of extremely effective long game social engineering. I could share my opinions, but the takes I’ve seen have actually been fairly nuanced and thoughtful, if (justifiably!) pessimistic, from people with more experience and more familiarity than I have.
So instead I did this. Which, if you recognize the title, is exactly what you think it is.
Run-time Polymorphism in Swift
This has come up several times on the forums over the years, but I’ve never written it up in a standard place, so here it is: There are only three ways to get run-time polymorphism in Swift. Well, three and a half.
Older Posts
- 2024-01-20 Online Communication
- 2024-01-07 The Biggest Smallest PNG
- 2023-12-28 CellLVM
- 2023-12-14 Protobuf Is Almost Streamable
- 2023-12-13 Daylight Saving Is Temporal Time Zones
- 2023-11-26 GitMounter
- 2023-10-23 Type Erasure in Rust
- 2023-10-09 Soft Orders of Magnitude
- 2023-10-04 There's No Such Thing As "Implicitly Atomic"
- 2023-04-01 sNaNs and qNaNs
- 2023-02-12 Setting up GoToSocial
- 2023-01-22 Rescuing Files From Classic Mac OS...with Swift!
- 2022-11-28 The Two Faces of Codable/Serde
- 2022-10-09 Swift was always going to be part of the OS
- 2022-05-14 Relative References in ARM64 Disassembly
- 2022-04-24 Default Arguments and Label-based Overloading
- 2022-03-19 #TalkPay
- 2022-02-21 Dynamic Linking Is Bad For Apps And Static Linking Is Also Bad For Apps
- 2021-12-31 Swift Regrets: Wrap-up
- 2021-12-30 Swift History: Assignment Methods
- 2021-12-28 Swift Regret: inout Syntax
- 2021-12-26 Swift Delight: Optional Conveniences
- 2021-12-23 Swift Regret: try?
- 2021-12-21 Swift Delight: try
- 2021-12-17 Swift Regret: Operator Function Lookup Rules
- 2021-12-15 Swift Regret: "Double" rather than "Float64"
- 2021-12-10 Swift Delight: Implicit Member Syntax
- 2021-12-08 Swift Regret: Weak Vars in Structs
- 2021-12-03 Swift Regret: Lazy Vars in Structs
- 2021-11-30 Swift Delight: No Unused Results
- 2021-11-24 Swift Regret: Open Protocols
- 2021-11-21 Swift Regret: Retroactive Conformances
- 2021-11-18 Swift Delight: Library Evolution
- 2021-11-10 Swift Mangling Regret: Private Discriminators
- 2021-11-05 Swift Mangling Regret: The "Old" Mangling
- 2021-11-03 Swift Mangling Regret: Library Evolution
- 2021-10-29 Swift Delight: #available
- 2021-10-22 Swift Regret: Implicitly-Hashable Payloadless Enums
- 2021-10-20 Swift Regret: Top-Level Decls in Script Mode
- 2021-10-15 Swift Delight: Names for Generic Parameters
- 2021-10-13 Swift Regret: Generic Parameters Aren't Members
- 2021-10-08 Swift Regret: OpaquePointer
- 2021-10-06 Swift Regret: Unannotated C Enums
- 2021-10-01 Swift Delight: Value Semantics Collections
- 2021-09-29 Swift Delight: guard
- 2021-09-24 Swift Regret: Inferred Property Types
- 2021-09-22 Swift Regret: Implicit Optional Initialization
- 2021-09-17 Swift Regret: Subscript Trailing Closures
- 2021-09-15 Swift Regret: Subscript Argument Label Rules
- 2021-09-10 Swift Regrets
- 2021-09-10 Swift Regret: Unapplied Instance Methods
- 2021-09-08 Swift Regret: Bound Methods
- 2021-08-29 Swift Regret: Type-based Overloading
- 2021-08-25 Swift Regret: AnyObject Dispatch
- 2021-08-20 Swift Regret: Labeled Tuple Elements
- 2021-08-18 Swift Regret: Tuples and Argument Lists
- 2021-08-13 Swift Regret: Sequence
- 2021-08-11 Swift Regret: mutating Protocol Methods vs. Classes
- 2021-08-06 Swift Regret: NSUInteger
- 2021-08-04 Swift Regret: Protocol Syntax
- 2020-11-15 Negotiate Your Offers!
- 2020-10-20 The Swift Runtime: Enums
- 2020-10-06 The Swift Runtime: Class Metadata Initialization
- 2020-09-29 The Swift Runtime: Class Metadata
- 2020-09-21 The Swift Runtime: Uniquing Caches
- 2020-09-14 The Swift Runtime: Type Metadata
- 2020-09-07 The Swift Runtime: Type Layout
- 2020-08-31 The Swift Runtime: Heap Objects
- 2020-08-26 Objective-Rust
- 2020-07-07 Suffusion: Playing with Filesystems
- 2020-05-24 ROSE-8 on Mac OS 9
- 2020-04-03 Shallow Git Repositories
- 2020-04-01 Swift on Mac OS 9
- 2020-02-06 Flexible Identities in git
- 2020-02-04 Introducing the Game 'by Color
- 2020-01-28 ROSE-8: Console Mode
- 2020-01-22 Setting up gitweb on Shared Hosting
- 2020-01-13 ROSE-8
- 2019-12-24 quasiquarantine
- 2019-08-01 > go east
- 2018-04-29 Misleading Metrics and UX Tradeoffs
- 2018-04-03 "FIXME" Doesn't Always Mean "Fix Me"
- 2018-03-22 My Little (String) Optimization, Part 2
- 2018-03-15 My Little Optimization: The Compiler Is Magic
- 2018-02-26 Many-to-Many Protocols
- 2018-01-29 Color Palette #8
- 2017-09-07 The New Kingdom of Nouns
- 2017-09-05 Over-abstraction
- 2016-08-21 Macromancy, Part 2
- 2016-08-07 Macromancy
- 2016-06-19 Pronoun Buttons
- 2016-05-29 Webmailer's Update Bar
- 2016-05-23 So You Want to Be a (Compiler) Wizard
- 2015-12-29 Re: Contempt Culture
- 2015-11-18 Recommendations
- 2015-05-09 Nibblesort: Adventures in Optimization
- 2015-02-22 AlterConf SF/Oakland
- 2015-01-24 “Skip the FFI”
- 2012-12-08 How to Write a Checker in 24 Hours
- 2012-10-02 Git Tricks
- 2012-04-26 Keyboard Adventures
- 2011-08-10 "Little Big Details"
- 2011-07-29 Weak Linking
- 2011-07-25 Using Clang from SVN in Xcode
- 2011-07-22 rm vs. Time Machine
- 2011-07-14 Priorities
- 2011-06-27 git add
- 2011-06-20 Automatic Reference Counting
- 2011-06-16 Dealing with "Sandwich Code"
- 2011-06-05 gdba
- 2011-06-03 Chrome vs. Safari
- 2011-05-31 User-Side Troubleshooting
- 2011-05-30 Auspicious Continuation
- 2009-07-21 Scripting Bridge
- 2009-07-08 What Happened to Dockyard?
- 2009-06-26 Garbage Collectors and Stack Drawers
- 2009-06-21 Z shell
- 2009-05-22 “Several New Features”
- 2009-05-05 C++ Templates are Turing-Complete
- 2009-04-21 [Meme] How Many HTML Elements Can You Name in 5 Minutes?
- 2009-04-16 Safer Plugin Categories
- 2009-04-02 Hacking Safari 4...for Great Convenience
- 2009-03-27 Const Correctness
- 2009-03-19 Categories and +load
- 2009-03-15 Subversion Checksum Problems
- 2009-03-06 JavaScript Tetris
- 2008-09-04 Objective-J and Objective-C
- 2008-08-28 HTTPS and Name-based Virtual Hosting
- 2008-03-08 Alerts Without Apps (or nibs)
- 2008-01-14 NSNumber, CFNumber, and CFBoolean
- 2007-12-13 GenericToolbar and IB3
- 2007-10-27 Performance Optimization: Why We Can't Use valueForKeyPath:
- 2007-09-01 Short Xcode Tip: Plugins
- 2007-07-15 Port 25 Blocked?
- 2007-06-27 GenericToolbar Icon
- 2007-04-13 The Symbolism of Pretty URLS
- 2007-03-07 Flexible PHP
- 2007-01-12 Inauspicious Beginnings