Skip to content

Instantly share code, notes, and snippets.

Source Archive Format

The file format of the Source Archive Format file is very similar to that of object file libraries and various other schemes. It does not adhere to those other schemes due to their variances from platform to platform, all the code needed to support things that are unneeded for Source Archive Format files, and special consideration for D's needs. The format is meant to be friendly for memory-mapped file access, and does not have alignment issues.

The file extension is sar.

Structure

The file is broken up into sequential blocks, the start of each block will be padded to alignment of 16 bytes to enable aligned SIMD access to that block's contents.

Type State Analysis

Analysing the type state that an expression is in, enables providing guarantees to the callee about the object to prevent errornous logic using static analysis.

To enable this we introduce a change to identifiers in the context of variable declarations to allow the use of medial character as part of it. This is a UAX31 compliant change in profile, although its usage is novel.

As part of this is a framework being developed to enable new memory analysis techniques to be described and applied to guarantee temporal safety within @safe code.

Changes

Identifier Changes

@rikkimax
rikkimax / attrib.d
Created February 23, 2024 14:47
Minified TODO dmd AST modules for what parser requires to compile
/**
* Defines declarations of various attributes.
*
* The term 'attribute' refers to things that can apply to a larger scope than a single declaration.
* Among them are:
* - Alignment (`align(8)`)
* - User defined attributes (`@UDA`)
* - Function Attributes (`@safe`)
* - Storage classes (`static`, `__gshared`)
* - Mixin declarations (`mixin("int x;")`)
@rikkimax
rikkimax / attrib.d
Created February 23, 2024 14:46
Minified TODO dmd AST modules for what parser requires to compile
/**
* Defines declarations of various attributes.
*
* The term 'attribute' refers to things that can apply to a larger scope than a single declaration.
* Among them are:
* - Alignment (`align(8)`)
* - User defined attributes (`@UDA`)
* - Function Attributes (`@safe`)
* - Storage classes (`static`, `__gshared`)
* - Mixin declarations (`mixin("int x;")`)

Variable Isolation

Memory graph isolation, is a form of a immutable references within a programs graph of memory to create subgraphs which do not reference others.

In this proposal a focus is upon the analysis on the graph in creating and maintaining isolate sub graphs. It takes advantage of DIP1000 for escape analysis of reference into and out of sub graph manipulation functions.

Literature Review

https://dl.acm.org/doi/10.1145/3167132.3167245

Depends upon: member of operator

SumTypes

Sum types are a union of types, as well as a union of names. Some names will be applied to a type, others may not be.

It acts as a tagged union, using a tag to determine which type or name is currently active.

The matching capabilities are not specified here.

PR: dlang/dmd#16161

Member Of Operator

The member of operator, is an operator that operates on a contextual type with respect to a given statement, declaration or expression.

It may appear as the first term in an expression, then it may be followed with binary and dot expressions.

The syntax of the operator is ':' Identifier.

Call Site UDA's

Requirements

Can only be used for functions that are templated, on runtime parameters.

Storage

A UDA on the argument, will be stored with the argument position.

Attribute Contracts

When to Apply

Attribute contracts apply when the type checker fails to coerce and validate a function call, that has function or delegate pointer arguments.

An attribute contract does not change how a function's body and in contract gets typed checked. These get typed checked with the assumption that the stated attributes were valid during the call.

Sets

@rikkimax
rikkimax / formattablestring.md
Last active October 18, 2023 05:30
Formattable string DIP idea

Fundamental syntax requirements

  • Has four parts in a syntax
    • Prefix string literal
    • Mapping to another argument via offset
    • Expression
    • Format string literal
  • Must work for code generation
  • Must work for business logic (i.e. date/time heavy code)