# Announcing convey } 1"< {"v {/+? "+1 2|!} >,^ } Convey is a somewhat codegolf-y 2d esolang based on conveyor belts, that will push values around in a factory. Just browse https://λ.land/convey/ for an overview, with links to an online interpreter and a manual. A repository will be published if I get around to rewrite this whole thing. As I designed convey while implementing it along the way, the code evolved into quite a mess that supports several now disabled features. Here is a place for honorable mentions. # What worked and what not ## Rough design principles * 1-to-1 mapping of input characters to factory tiles. * The program's state should be as visible as possible. * Make compact programs possible. ## Variadic functions One initial idea for convey was to support functions that behave based on the number of in- and output ports. Like in J, where `x * y` is multiplication and `* y` is signum, but with up to 4 variables: v ^ v v v v v >f< >f< >f< >f ,>^ This would not work, as `?` would happily push values to the left, even if no other value waited on the left side of `+.`. So `.` changed function behavior after parsing. This was easy to implement, but limits the modified function to have the same ports as the unmodified one. ## Port order Another alternative to the strict order was making the main port on the other side of the opposite port, i.e. 3 3 3 2>->} }<-<2 2>->} 2>->} 3 would all mean 2 - 3, because the main path was the straight one. This felt intuitive most of the time, but whenever one wanted 3 - 2, some verbose rerouting would have been needed. Also, corners, `@`, and `#` still needed a port order, so that could have been only a special rule. As I realized this also restricted things, this got immediately ditched. F.e. you could not have { ?;… ?;… … but always needed to loop back to get a straight line: {?;… v< >?;… …