Skip to content
This repository was archived by the owner on Feb 18, 2024. It is now read-only.

Files

src

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Sep 6, 2023
Oct 18, 2023
Jun 12, 2023
Oct 22, 2023
Apr 13, 2023
Nov 25, 2022
Aug 10, 2023
Oct 28, 2023
Apr 12, 2023
Oct 7, 2023
Mar 22, 2023
Jun 26, 2023
Mar 5, 2021
Jul 1, 2022
Sep 7, 2021
Jan 6, 2023
Dec 10, 2022
Apr 12, 2023
Sep 22, 2023
May 31, 2022

Crate's design

This document describes the design of this module, and thus the overall crate. Each module MAY have its own design document, that concerns specifics of that module, and if yes, it MUST be on each module's README.md.

Equality

Array equality is not defined in the Arrow specification. This crate follows the intent of the specification, but there is no guarantee that this no verification that this equals e.g. C++'s definition.

There is a single source of truth about whether two arrays are equal, and that is via their equality operators, defined on the module array/equal.

Implementation MUST use these operators for asserting equality, so that all testing follows the same definition of array equality.

Error handling

  • Errors from an external dependency MUST be encapsulated on External.
  • Errors from IO MUST be encapsulated on Io.
  • This crate MAY return NotYetImplemented when the functionality does not exist, or it MAY panic with unimplemented!.

Logical and physical types

There is a strict separation between physical and logical types:

  • physical types MUST be implemented via generics
  • logical types MUST be implemented via variables (whose value is e.g. an enum)
  • logical types MUST be declared and implemented on the datatypes module

Source of undefined behavior

There is one, and only one, acceptable source of undefined behavior: FFI. It is impossible to prove that data passed via pointers are safe for consumption (only a promise from the specification).