Auster Report
Auster Report
Language Auster
Claude Assistant
October 1, 2024
1 Introduction
This preliminary report introduces Auster, a novel concurrent dataflow pro-
gramming language designed to merge the concepts of Lucid, Go, and functional
programming paradigms. Auster aims to provide a powerful and expressive en-
vironment for numerical computation, parallel processing, and dataflow-oriented
programming.
2 Language Overview
Auster is founded on the principles of dataflow programming, as exemplified
by Wadge and Ashcroft’s Lucid language. It incorporates concurrent program-
ming features inspired by Go, functional programming concepts, and a strong
emphasis on parallel numerical computation. The language is designed to be
compiled to various targets, including vector-enabled architectures like SSE4,
AVX2, and AVX512 for x86-64, as well as Aarch64 with vector extensions and
NVIDIA’s assembly language.
Key features of Auster include:
1
3 Syntax
The syntax of Auster is designed to be expressive yet readable, combining
elements from Lucid, Go, and functional programming languages. Here’s a
BNF grammar for the core syntax of Auster:
<program> ::= <statement>*
<statement> ::= <definition> | <expression>
<definition> ::= <identifier> ”=” <expression> [”where” <where-clause>
”end”]
<where-clause> ::= <definition>*
<expression> ::= <literal> | <identifier> | <binary-operation> | <function-
call> | <if-expression> | <match-expression> | <fby-expression> | <channel-
operation> | <spawn-expression> | <sync-expression> | <list-comprehension>
<literal> ::= <number> | <string> | <boolean>
<binary-operation> ::= <expression> <operator> <expression>
<operator> ::= ”+” | ”-” | ”*” | ”/” | ”==” | ”!=” | ”<” | ”>” | ”<=” |
”>=”
<function-call> ::= <identifier> ”(” <expression> ”,” <expression>* ”)”
<if-expression> ::= ”if” <expression> ”then” <expression> ”else” <expres-
sion>
<match-expression> ::= ”match” <expression> ”with” <pattern> ”->”
<expression>+ ”end”
<fby-expression> ::= <expression> ”fby” <expression>
<channel-operation> ::= ”makec hannel””(” < type > [”, ” < number >
]”)”|”send””(” < identif ier > ”, ” < expression > ”)”| < identif ier > ”?”
<spawn-expression> ::= ”spawn” <expression>
<sync-expression> ::= ”sync” <expression>
<list-comprehension> ::= ”[” <expression> ”for” <identifier> ”in” <ex-
pression> ”where” <expression>? ”]”
<type> ::= ”int” | ”float” | ”bool” | ”string” | ”list” ”of” <type> | ”channel”
”of” <type> | ”vector” ”<” <type> ”,” <number> ”>”
<pattern> ::= <literal> | <identifier> | ””
4 Normative Examples
The following examples demonstrate the key features and syntax of Auster.
These examples serve as a reference for understanding the language’s capabilities
and idioms.
2
Listing 2: Example 2: Arithmetic expressions
r e s u l t = (10 + 20) ∗ 3 / 2
4.3 Functions
3
4.4 Concurrency and Channels
pr o d u c t = a ∗ b
r e s u l t = p ro d u c t + c
end
f i l t e r e d = low_pass_filter ( signal )
a m p l i f i e d = map( lambda x : x ∗ 2 . 5 , f i l t e r e d )
processed = high_pass_filter ( amplified )
end
4
n <− get_input ( )
p u t _ l i n e ( ” The number i s : ” ++ t o _ s t r i n g ( n ) )
end
5
4.9 Parallel Operations
i f l e n g t h ( l s t ) <= 1 then l s t
else
mid = l e n g t h ( l s t ) / 2
l e f t = spawn merge_sort ( l s t [ 0 : mid ] )
r i g h t = spawn merge_sort ( l s t [ mid : ] )
merge ( sync l e f t , sync r i g h t )
end
r e s u l t = simd_add ( a , b )
end
pr o d u c t = simd_multiply ( a , b )
r e s u l t = simd_sum ( p ro d u c t )
end
6
Listing 26: Example 26: Lazy Fibonacci sequence
lazy_fib = {
0 : : 1 : : [ a + b f or (a , b) in zip ( lazy_fib , t a i l ( lazy_fib ) ) ]
}
4.14 Metaprogramming
7
Listing 32: Example 32: Code generation
g e n e r a t e _ v e c t o r _ o p s ( op , s i z e ) =
” vector_ ” ++ op ++ ” ( a , b ) where
a , b : v e c t o r <f l o a t , ” ++ t o _ s t r i n g ( s i z e ) ++ ”>
r e s u l t : v e c t o r <f l o a t , ” ++ t o _ s t r i n g ( s i z e ) ++ ”>
r e s u l t = simd_” ++ op ++ ” ( a , b )
end ”
end
square (x) = x ∗ x
import Math
a r e a = Math . c i r c l e _ a r e a ( 5 )
8
5 Conclusion
This preliminary report introduces Auster, a concurrent dataflow program-
ming language that combines concepts from Lucid, Go, and functional pro-
gramming paradigms. The language’s syntax and semantics are designed to
support expressive, parallel, and numerically-focused computation.
The examples provided demonstrate Auster’s capabilities in areas such as
basic arithmetic, sequence generation, function definition, concurrency, dataflow
graphs, monadic side effects, pattern matching, list comprehensions, parallel
operations, vector operations, lazy evaluation, temporal logic, error handling,
metaprogramming, and module systems.
As Auster continues to evolve, future work will focus on refining the type
system, optimizing the compiler for various target architectures, and expand-
ing the standard library to support a wide range of numerical and scientific
computing tasks.