From 294

  • Need-finding (what are problems), formative (how to solve?), evaluative (did it work?)
  • Need-finding means asking users to show, don’t tell. Where do they get frustrated? Where do they give up?
    • If you can only interview, have people talk concrete. “What was the most annoying part of this task?”
  • PLs can support many tasks
    • Incrementally adding functionality, transpiling, modifying, exploring, searching through a codebase, exploring a codebase for understanding
  • Notation has a number of different cognitive dimensions
    • See the notes for full deets
    • Basically: is it easy to abstract? Is it easy to change things? What is made visible and comparable? Are the abstractions close to mental model? Are things consistent? Verbose? Mental load?
  • To design a language…
    • Figure out what users need
      • Formative studies
      • Write out programs in domain and brainstorm abstractions
      • Learn how people talk about their task

See 2024-01-30 • CS 294, 3Tu, 2024-03-14 • CS 294, 7Th – How to design languages, 2024-03-12 • CS 294, 7Tu – Cognitive dimensions of notation.

Considerations from languages past

Features

Data parallelism

Nested data parallelism was new! Think Rayon, with work-stealing thread pool.

See NESL, Data parallel Haskell.

Datalog

  • Datalog is a database of facts and rules to deduce new facts.
  • Optimizations
    • Semi-naïve: new-old, old-new, new-new
    • Magic set: specialize functions for queries.
  • Stratified negation: separate execution into distinct phases to enable negation.
  • Lattices, semirings

See Datalog, egglog.

Continuations, coroutines

See continuations, Coroutines in Lua