Table Oriented Programming (2002)

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • empirical-lang

    A language for time-series analysis

    I started Empirical with the goal of "q like Haskell". The end result went in a radically different direction, but the guiding light has always been to have a statically typed language where tables and queries are a first-class operation.

    The source code is publicly available under AGPL with the Commons Clause:

    https://github.com/empirical-soft/empirical-lang

  • smlsharp

    SML# compiler

    Another relevant software category is the statistical analysis languages, including SAS, Stata and SPSS.

    Old-school SAS included only two data types (floats and character strings), but allowed for SQL and sequential data-steps to live together. Persistence was baked in. The floats could be used to represent dates, datetimes and other formats. I particularly appreciated being able to use macros to define a data-step view to split the follow-up for an individual from a table. Such a view could then be collapsed using SQL. SAS also allows for using variables. More recently, R tools such as dplyr have brought together data-frames and relational operations. However, I miss the sequential coding in SAS, using macros as higher-level tools to define the logic, including corner cases.

    For strictly typed records, I have always wanted to spend more time with SML# [0] this allows for record updating, with close ties to SQL -- an under-appreciated version of SML.

    [0] https://github.com/smlsharp/smlsharp

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

  • IndexedTables.jl

    Flexible tables with ordered indices

    unfortunately, I don't have access to that code anymore, I wrote a number of loaders for different data set types including CSV. The time series were all modeled as forward iterating stream of tuples, so there is no specific table abstraction. There is an implicit assumption that the stream is ordered by the join key, in a time series this being the timestamp, though nothing in the implementation enforced that.

    Joins are always n-way merge joins, so you can write something like y = 2x^2 - 3z and fold that into a single streaming operation y = f( x, z ) where y, x and z are time streams.

    When rendered to screen they looked very similar to your examples. With plugins in the IDE you could directly plot and array of time series as a chart.

    Since the time I wrote NamedTuples the Julia core team folded the functionality into the core of Julia https://docs.julialang.org/en/v1/manual/types/#Named-Tuple-T.... This is the core of https://juliadb.org/ all credit to the Julia core team

  • Linq-in-Rust

    Language Integrated Query in Rust.

    Rust has rather sophisticated macros, which let you do stuff like this outside the core language implementation, which is IMO very much where such things belong.

    E.g. a linq clone in rust can look like this: https://github.com/StardustDL/Linq-in-Rust

        linq!(from p in 1..100, where p <= &5, orderby -p, select p * 2).collect();

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts