beginning work on LATL

a little introduction to a project i started thinking about in early 2020, as i was learning how to do web development and wanted to try my hand at combining some hobbies

skip the story and get to the point

what even is this?

a story of linguistics and hubris


so, when i was a wee little child, i discovered language. like, most wee little children discover language, but some wee little children get given the lord of the rings when they're ten or something and get into the narrative and the characters, sure. but those appendices.... there's .. a language here? called quenya? and it's written in this script? called tengwar? and there's a related language, sindarin? and this tolkien guy just made all this up?

so, i did the precocious kid thing and said to myself "if this dead british weirdo (who's like really into the concept of royalty) can make a whole new language, then surely i can too"

i did not, in fact, make a language. i made a relex of the language i already spoke (my own peculiar idiolect of u.s. english,) but we all gotta start somewhere

for a long time the internet to me was mostly the brown university conlang listserv. here i learned about different phonology, what the heck morphosyntactic alignment is, diachronicity and how different languages can be related. i got exposed to awkwords and sca2 (tools for generating words and modeling changes to those words.) but i never interacted with ppl much. i was a kid and the ppl in there really knew their stuff, and i never much felt comfy with the idea of being just in public on the internet like that

anyway i got better at making languages and learning about how language works, and it's just been a (sometimes more consistent, at times less) hobby of mine for most of my life

flash forward to a few years ago, i'm working on a language that has turned into the passion project that i've spend the majority of my conlanging on and i'm getting frustrated with my tools. other conlangers have made some really cool tools that i've used forever, but i wanted to change my workflow. i wanted to do more complex, phonological-feature-aware, sound change rules; i wanted diachroinc tooling for morhposyntactic bits of my languages; i wanted a tighter feedback loop between defining some changes, or lexical items, or whathave you, and seeing the results; i wanted to see how a derivational pattern at one stage in a parent form of a language branches out or collapses into different derivational patterns in a child language

all was not well in my conlanging

i would need to do some programming

the thing is, i had just learned javascript. i had built a few little toy web apps, and i was not ready to execute on a vision for a multi-purpose conlanging tool that was beginning to take shape in my head

i tried anyway

and i made a bad first draft of a sound change tool

there's an e-bnf grammar in that project somewhere! the hubris i had then, to think i could make a little javascript-backed language tool with all of the bells and whistles i needed! with the knowledge that i had then! (or more accurately, didn't have)


but now...

reviving this project

whatcha gonna do sorrel?


i'm still not ready

but at least, today i'm forgoing bells and whistles for execution models. core abstractions. experience using a (programming) language-oriented programming language maybe. there's a lot to think about

so, i'm going to try reviving this project. or, more accurately, reimagining this project. from the little sound change tool that was merely an unusably buggy iteration on tools that other conlangers had executed better, to a more robust environment for conlanging. one which gives language nerds the power to solve all of their language nerding problems in one runtime, with an extensible and reflective interface. and which is written in such a way, with the appropriate abstractions, that lanuage nerdy hackers can hack their own tools on top of it

and i'm going to be doing a hecking hacking retreat about it. i'll spend some full-time programming days making a goofy little thing for goofy little language nerds surrounded by goofy programming nerds doing whatever rad things they happen to be getting up to when i happen to be there

like many of the communities i am a part of, i am a quiet part of the conlanging community. so, we'll see how this goes. maybe it is only ever something of interest to me and the conlangers i interact with in meatspace. maybe it only teaches me some things about designing and building a tool of the type that i'm designing and building. hoooopefully it is helpful in a way to other conlangers such that it evolves beyond what i could do on my own (cause i ain't no whiz kid 10x programmer)

but that's all me getting ahead of myself (as is often my wont.) first! to pack for the trip!

packing for the trip

a biggg heap of things to expand


i'm just gonna fly right through these. there's going to be a lot to read up on, to explore, to think and talk through, to build toy versions of before it gets time for larger prototyping and building a workable tool. so, here's the very start of the thinking-in-public. each of these little thoughts is going to get at least it's own writeup (if not several) and i'll update with additional sections and links to the writeups as i go. a note: it would be impossible for me (and probably most ppl) to create the full vision in the time i'll be working on it fulltime

notes on the goals

it's good to have goals! to define what it even is yr tring to do. so here's my attempt. my goal is to create a foss+ working runtime that *can* serve as a singular tool for conlangers with some basic programming capacity. it should be linguistically *theory neutral* to the extant that such a thing is possible. it should allow for the definition of all relevant structures of a language *in code* and support the construction of grammars, dictionaries, text documents and (stretch goal) non-programmer friendly tools *from code*. it should support phonological, lexical, syntactic, morphological, semantic, etc transformations across different 'epochs' be they diachronic or synchronic. these transformations should work on transformations, ie morphological transformations should themselves be transformed by phonological transformations. users of the tool should be able to edit their work and see the consequences of their changes quickly. hopefully, this can all happen on the web, i guess, cause ppl like using their browser as the everything app

notes on existing tools

i'm going to talk a bunch about existing tools made by conlangers or made for professional linguists and used by conlangers or just yr regular old spreedsheets and such. i'm going to be doing some research about how conlangers do their conlanging, lest this truly be a just-for-me type project

notes on primitives

i think some interesting things start to bubble out of some of those goals up there. like the idea of supporting a bunch of different kinds of transformations that should themselves be transformable. the primitives we're working with have to work below the level of "lexeme" or "phoneme" to have something abstract that can apply to both. i'm not going to get into specifics even a little bit at this point-you'll have to stay tuned for more

notes on execution model

this is going to be the crunchiest stuff to think about. i'm going to make some arguments for some things that (it is my belief) fall out of these goals. things like dynamic typing. things like reflectivity (this is sooo important it gets its own section.) things like lazy evaluation (because languages are big and sometimes you only want to look at a subset of a language.) there's also some hypothetical notions that will require some experiments to determine applicability to the project. i'm just going to list them as questions and not expound upon or defend their existence as questions here: propositions as a means of combination? propagation networks as primitives?

notes on reflectivity and interaction

this is so important! i want conlangers to use this tool to iterate and that requires ~something like a REPL~ in a dynamic environment. my dream is to have a bidirectional flow of information; whereby a user of the system can define some rules about their language, evaluate those rules on some data in an interpreter, inspect those data, modify those data and run the interpreter such that it produces possible rules that would yield the new result. wether or not that experience results from the project, users should be able to rebind anything their project needs *at runtime*

notes on portability

as the project develops i will have to give some thought to how to make it available to conlangers with different kinds of computation experience. the ideal would be for a full featured web implementation that interoperates with hosted implementations, but we'll see

notes on the substrate

not a lot to say here. i will begin this project in racket because i have some familiarity with it and it is specifically built for developing languages. i will be using other tools to explore other aspects of the project and may ultimately move away from the racket ecosystem, but a girl has gotta start somewhere

about the name

it's pronouced ˈlæ.ɾɫ̩


i don't know dude, naming things is hard. it's a working name, it works good as an extension. my-conlang.latlanyone?

i also just like syllabic laterals? they sound neat to me. the official initialism is linguistic analytic transformation language, but it also double entendres to lower anterior temporal lobe, so that's just kind of fun.

and the l means there can be lambda iconography-this is crucial for a new computer project. [ˈλæ.ɾɫ̩] as a typographic image is so perfectly specific to the kinds of things i dream about.

maybe it'll have a different name some day, idk