Skip to content

Instantly share code, notes, and snippets.

The metatypes explanation

For every type T in Swift, there is an associated metatype T.Type.

Basics: function specialization

Let's try to write a generic function like staticSizeof. We will only consider its declaration; implementation is trivial and unimportant here.

Out first try would be:

package name.anton3.vkapi.generator.json
import com.fasterxml.jackson.annotation.JsonUnwrapped
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.databind.deser.ContextualDeserializer
import com.fasterxml.jackson.databind.deser.ResolvableDeserializer
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
import com.fasterxml.jackson.databind.node.ObjectNode
import com.fasterxml.jackson.databind.node.TreeTraversingParser

A summary of previous discussions on P2025

Objections to the proposal

Disclaimer: I’m undoubtedly biased. You can find the original opinions in the thread “P2025R1: issues fixed?”, 13/05/2020 to 20/05/2020.

1. The proposed language rules are too complex.

The wording consists of two major parts:

@Anton3
Anton3 / layout_generator.kt
Last active March 12, 2020 00:07
Needs "books.txt" in the resources directory. Try experimenting with weights on line 136
package name.anton3.layout
import java.util.*
import kotlin.collections.ArrayList
import kotlin.math.abs
class Dummy
fun readResource(name: String): String {
return Dummy::class.java.classLoader.getResource(name)!!.readText()

Alternative abbreviated lambdas

Introduction

This paper provides an alternative abbreviated lambda expression syntax, as well as an alternative syntax for transparent functions, compared to [@P0573R2].

Motivation and scope

[@P0573R2] introduces a notion of transparent functions, which aim to behave as close as possible to as if their body was directly inserted into the caller (except that their arguments are only computed a single time).

Alias expressions

Summary

Alias expressions allow setting up a constructed object before returning it from a function or passing it as a function argument, while incurring no copies or moves.

Motivation

Sometimes we want to create an object, set it up and return it.

@Anton3
Anton3 / after_inlining.cpp
Created July 25, 2019 19:31
Inlining coroutines
task<void> foo() {
co_return uninlineable_mess();
}

Mixins

  • Proposal: SE-NNNN
  • Author(s): Anton3
  • Status: Awaiting review
  • Review manager: TBD

Introduction

Add mixins, which contain both protocol requirements and stored properties. Mixins will subsume abstract class functionality and allow similar functionality on structs. They will also allow for safe multiple inheritance, defining standard "bricks" carrying interface, implementation and state, which can be reused in multiple types.

@Anton3
Anton3 / typed-throws.md
Last active February 18, 2017 13:21
Draft of "Typed throws" proposal

Allow Type Annotation on Throws

Introduction

Typed throws annotation specifies that a function can only throw errors of a certain type:

// Feature 1: @mixin extension
struct Pizza {
var containsCheese: Bool
init(cheese: Bool) { ... }
func prepare() { print(self) }
}
struct Margherita {
var pizza: Pizza
init() { pizza = Pizza(cheese: true) }