SPLASH 2023: Cutting-Edge Programming Language Research and Development

Table of Contents

SPLASH 2023

Is Wasm Becoming Garbage? (Keynote)   sun

Preparation Notes

  • Familiarize yourself with WebAssembly basics
  • Read up on garbage collection in programming languages
  • Understand the current memory management in Wasm
  • Consider implications of adding GC to Wasm

Example Wasm Code (WAT format)

(module
  (func $allocate (param $size i32) (result i32)
    ;; Simple bump allocator, not garbage collected
    (local $ptr i32)
    (local.set $ptr (global.get $heap_top))
    (global.set $heap_top 
      (i32.add (local.get $ptr) (local.get $size)))
    (local.get $ptr)
  )
  (global $heap_top (mut i32) (i32.const 0))
)

On the Applicability of Annotation-Based Source Code Modification in Kotlin (Work in Progress)   sun

Evaluating YJIT's Performance in a Production Context: A Pragmatic Approach   sun

Exploratory Study on Multi-User Program Synthesis: A Multi-Wizard Approach

Beyond Types for Dyadic Interaction   mon

Generating Domain-Specific Programs for Diagram Authoring with Large Language Models   mon

Periodic and Aperiodic Task Description Mechanisms in an FRP Language for Small-Scale Embedded Systems   mon

Preparation Notes

  • Review Functional Reactive Programming (FRP) concepts
  • Look into embedded systems programming challenges
  • Understand the differences between periodic and aperiodic tasks
  • Consider how FRP can be adapted for resource-constrained environments

Example FRP-style Code (Haskell)

import FRP.Yampa

-- Periodic task: blink an LED every second
blink :: SF () Bool
blink = proc _ -> do
  time <- localTime -< ()
  returnA -< (floor time `mod` 2 == 0)

-- Aperiodic task: respond to a button press
buttonResponse :: SF Bool String
buttonResponse = arr (\pressed -> if pressed then "Pressed!" else "")

-- Combine tasks
main = reactimate (return ())
                  (\_ -> getButtonState)
                  (\_ (led, msg) -> updateOutput led msg)
                  (blink &&& buttonResponse)

Thorium: Verifiable, Dynamic, Reactive Software   mon

Building Trust and Safety in Artificial Intelligence with Abstract Interpretation   mon

Historiographer: Strongly-Consistent Distributed Reactive Programming with Minimal Locking   mon

Complete First-Order Reasoning for Properties of Functional Programs   mon

Abstract Interpretation in Industry - Experience and Lessons Learned   mon

Lifting On-Demand Analysis to Higher-Order Languages   mon

Behavioural up/down casting for statically typed languages   mon

GPCE Tutorial - Compile-time generative programming for OCaml: flexible, safe and efficient   mon

Symbolic transformation of expressions in modular arithmetic   mon

Octagons Revisited - Elegant Proofs and Simplified Algorithms   mon

A Brief Introduction to the Flix Programming Language   mon

PAW: a programmable and visual audio workstation   mon

CellPond: Spatial programming without escape   mon

Preparation Notes

  • Research cellular automata and spatial programming
  • Look into dataflow programming models
  • Understand the concept of "escape" in programming languages
  • Consider how spatial programming can be applied to various domains

Example Cellular Automata-like Code (Python)

import numpy as np

def cell_pond_step(grid):
    rows, cols = grid.shape
    new_grid = np.zeros((rows, cols))
    
    for i in range(rows):
        for j in range(cols):
            neighbors = np.sum(grid[max(0,i-1):min(i+2,rows), max(0,j-1):min(j+2,cols)]) - grid[i,j]
            if grid[i,j] == 1:
                new_grid[i,j] = 1 if 2 <= neighbors <= 3 else 0
            else:
                new_grid[i,j] = 1 if neighbors == 3 else 0
    
    return new_grid

# Initialize grid
grid = np.random.choice([0, 1], size=(10, 10))

# Run simulation
for _ in range(10):
    grid = cell_pond_step(grid)
    print(grid)

Revisiting Dynamic Dispatch for Modern Architectures   mon

Session-Based Typechecking for Elixir Modules Using ElixirST   mon

A Semantic Framework for Automatic Composition of Decentralised Industrial Control Schemes   mon

A Logical Interpretation of Asynchronous Multiparty Compatibility   mon

Relational Solver for Java Generics Type System   mon

A Reusable Machine-Calculus for Automated Resource Analyses   mon

Actix-Telepathy   mon

Unfolding State Changes via Live State-First Debugging   mon

Lude - build video games quickly   mon

Automatically Generated Supernodes for AST Interpreters Improve Virtual-machine Performance   mon

Empirical Study of the Docker Smell Impact   tue conflang

Measuring Configuration in Code

Yes, Configuring is Good, But Have You Ever Tried Justifying?

Temporal Breakpoints for Multiverse   sle

Cross-Level Debugging for Static Analysers   sle

Cascade: a Meta-Language for Change, Cause and Effect

Large Language Models for Automated Program Repair

Predicate Anti-unification in (Constraint) Logic Programming

Utilizing the LSP to inform and teach users on config languages

Artificial Languages are Dead. Long Live Artificial Languages!

Notes

Examples

  (define (dec1 x) (- x 1))

Author: Jason Walsh

j@wal.sh

Last Updated: 2024-10-02 05:00:06