Changelog for swarm-0.7.0.0
Revision history for swarm
0.7.0.0 - 2025-06-03
Breaking changes
return
has been renamed topure
(#2285)fst
/snd
have been removed in favor of a pair eliminator calledmatch
(#2407)require <n> <item>
has been renamed tostock <n> <item>
to reduce ambiguity withrequire <device>
(#2455).
You can use swarm format --v0.6
to automatically convert old code.
Bugfixes
- Report cycles correctly in error messages (#2199)
- Validate hex colors in
FromJSON
instance (#2237) - Make custom entities override built-in entities (#2241)
- Make
halt
ed robots immediately wake up (#2254) - Don't update scenario completion stats after scenario completion (#2256)
- Only
meet
interactive robots (#2262) - Evaluate argument to
instant
/atomic
atomically (#2271) - Fix type inference for recursive let bindings (#2187)
- Fix two space leaks (#2448)
- Fix robot modal memory leak by only rendering modal when it is displayed (#2379)
- Fix completed scenarios so they always show green status (#2312)
- Fix shadowing for user-defined types (#2450)
Features + Enhancements
New commands
print
+erase
commands for printing on paper (#2245)- New
read
command to act as partial inverse toformat
(#2224, #2461) - New subworld-aware teleportation and location query commands,
warp
andlocateme
(#2195)
Language
- Improve type inference for record projection (#2172)
- Scoped type variables (#2178)
- Do requirements analysis for literal text argument to
use
(#2211) - Rename
return
topure
(#2285) - Replace
fst
andsnd
with pair eliminatormatch
(#2407) - Rename
require n
tostock
(#2455) - Custom error message for missing
end
(#1141) (#2373) - Use original variable names in error messages about Skolem variables (#2340)
Entities + Recipes
- Make
rolex
show time (#2147) atlas
entity (#2257)- Recipes for
binoculars
(#2391) water
disappears when placed (#2358)
Tutorials + Scenarios
- Make
Tutorial
menu choice auto-start first unsolved tutorial scenario (#2314) - Add some optional goals to the classic scenario (#2436)
- A number of small tutorial improvements (#2406, #2405, #2404, #2409, #2421, #2361, #2359, #2444)
- Progress bar vignette (#2190)
- Counting flowers (#2249)
- Spiders demo (#2275)
- Dictionary implementation + benchmark (#2191)
- Get rid of "world offset" + add burned patch around base in classic scenario (#2344)
- DNA copying challenge (#1031)
- Exterminator scenario (#2126)
Achievements
- Achievement for completing all tutorials (#2354)
- Grant
AttemptSelfDestructBase
achievement for movement as well asselfdestruct
(#2356) - Swiss Army Robot achievement for equipping all craftable devices in classic game (#2424)
Scenario mechanics and authoring improvements
- Refactor + comment
World Examples/clearing
to make it easier to understand (#2305) - New combustion delay parameter (#2248)
- Structure enhancements
- Render contiguous boundaries (#1285) and remove old individual wall entities (#2328)
UI enhancements
- Pause on objective completion (#2096)
- Navigable robots table (#2140)
- Expose waypoint and portal info to web API (#2185)
- Warn the user when debugging options are on (#2278)
- Scenarios started from command line now quit directly back to command line (#2280)
- Make FPS toggle and "recenter view" into global events (#2293)
- Minimize list of required device sets in error messages (#2299)
- Clickable shortcuts in TUI (#2324)
- Don't re-validate REPL input when moving the cursor left or right (#2365)
- Legend for colorization in F1 dialog (#2175)
- Render map preview as dynamic PNG (#2184)
- Don't insert extra close bracket when the cursor is already on top of one (#2215)
- Add Replay game script (#2446)
Pretty printing + Formatting
- Put end on separate line when pretty printing definitions (#2100)
- Improvements to comment preservation in
swarm format
(#2329)
Command line options
Building/packaging
- Add support for GHC 9.10 and 9.12, and drop 9.2 and 9.4
0.6.0.0 - 2024-07-15
Some of the highlights of this release include native Windows support, customizable keybindings, type synonyms and equirecursive types, and a prototype tournament server (#1798) where players can upload their solutions to challenge scenarios. See below for a more detailed list (or see the complete list of git commits).
Aside from the more visible changes listed below, this release cycle saw a lot of internal refactoring. For example, we finished splitting the codebase into a number of independent sublibraries and split several large modules into smaller modules.
Community
- New Discord server!
Breaking changes
- Types are now required to start with an uppercase letter (#1583)
- Use
swarm format --v0.5
to convert old code.
- Use
Bugfixes
New Features
Language
volume
command measuring the enclosed area around a given location (#1747)sow
command for planting growing entities that spread (#1817)- Type synonyms (#1865)
- Recursive types (#1894)
- Entity tags and related commands (#1635)
meetAll
command now returns a list (#1999)
Entities + recipes
- New
lens
entity and recipe fordetonator
(#1876) infinite improbability drive
device enablingteleport
command (#1724)- Recipes for
rolex
,olfactometer
,dozer blade
, andhourglass
entities (#2028, #2025)
New scenarios
- Beekeeping scenario (#1599)
- Fishing scenario (#1628)
- Dim sum restaurant (#1686)
- Gallery scenario (#1760)
- Snake automata (#1699)
Scenario mechanics and authoring improvements
- Path caching, for more efficient repeated use of the
path
command (#1595) - Render any map to PNG (#1632)
- Extensible terrain (#1775)
- Spreadable plant growth (#1817)
- Exercising commands can consume entities (#1777)
- Recognize built structures (#1579)
- Test for point-to-point connectivity (#1721)
- Validate palettes (#1938), map shape (#1935), subworld references (#1875)
UI enhancements
- Fix REPL type display (#1610)
- Handle backword kill word event in REPL (#1861)
- Make log error messages ephemeral (#1877)
- Pretty print code blocks according to widget size (#1897)
- Automatically insert matching close brackets at REPL (#1953)
- Highlight only the part of the REPL input indicated as the location of an error (#1957)
- Popups for new achievements, recipes, and commands (#2027)
- Save current REPL input with down arrow (#2000)
- Customizable keybindings (#1979)
Command line options
format
subcommand now tries to preserve comments (#1845)- Add
format --v0.5
option to port code from older syntax (#1851) keybindings
subcommand for displaying and initializing keybinding configuration (#1979)docs recipes
subcommand now takes--forward
and--next
flags for filtering the output edges (#2033)
Building/packaging
0.5.0.0 - 2023-11-01
Bugfixes
- Fix bug where some pretty-printed terms contained extra elaborated terms inserted by @byorgey (#1497)
New Features
Language
- New
path
command for pathfinding by @kostmo (#1523)
New scenarios
New achievements
- Grant
RobotIntoWater
achievement by @byorgey (#1504) - Achievement for pointless swapping by @kostmo (#1588)
UI enhancements
- Support Markdown in achievement descriptions by @kostmo (#1508)
- Render map preview on scenario selection screen by @kostmo (#1515)
- Robot activity counts in F2 menu by @kostmo (#1484)
- Show robot IDs in F2 menu by @kostmo (#1482)
- Print REPL errors inline and get rid of error popup by @byorgey (#1487)
- Improvements to scrolling by @byorgey (#1481)
Command line options
- Improvements to term pretty-printing by @xsebek (#1464)
swarm format
now actually formats by @xsebek (#1459)
0.4.0.0 - 2023-08-18
Bugfixes
- Save completion time immediately upon finishing scenario by @xsebek (#1118)
- Fix rightward bleeding of custom attributes by @kostmo (#1137)
- Recreate
GameState
from scratch when starting a scenario by @byorgey (#1277) - Load persistent state from disk only once and reuse for all integration tests by @byorgey (#1383)
- Continue parsing the rest of the scenarios in a directory when one fails by @byorgey (#1391)
- Throw an error instead of crashing on impredicative types by @byorgey (#1418)
New Features
Tutorials
- Some tutorial improvements, and enforce in CI that commands and entities are introduced before they are required by @kostmo (#1186)
Swarm language
- The
drill
command now returns the first inventory addition by @kostmo (#1165) - Type ascription syntax by @Alexander-Block (#1164)
- Records and record types by @byorgey (#1148)
requirements
command for viewing requirements of any expression by @byorgey (#1183)stride
command by @kostmo (#1219)- Many new robot sensing commands by @kostmo:
- New key input handler framework by @byorgey, so you can program robots to respond to keypresses (#1214)
instant
command (unrestricted variant ofatomic
) by @kostmo (#1231)push
command by @kostmo (#1235)density
command by @kostmo (#1296)use
command by @kostmo (#1287)halt
command by @byorgey (#1256)backup
command by @kostmo (#1400)
Entities + recipes
- Make
sand
a bit harder to get by @byorgey (#1024) - New
tweezers
entity to enable debugging view and single-stepping CESK machine by @xsebek (#1081) ADT calculator
description now mentionsunit
andvoid
types #1226- Allow zero-tick recipes to apply immediately by @kostmo (#1272)
- New
hourglass
device that provides relative (wait
) but not absolute (time
) capability by @kostmo (#1261) - New
binoculars
device that providesscout
command by @kostmo (#1337) - Separate entities to provide each text operation by @kostmo (#1339)
World features
- Structure templates by @kostmo (#1332)
- Waypoints and portals by @kostmo (#1356)
- Subworlds by @kostmo (#1353)
- World description DSL by @byorgey (#1376)
LSP improvements
let
-in
syntax highlighting by @kostmo (#1162)
Web API
- Web API to parse, render, and run code by @kostmo (#1142)
Command line options
- CLI option to set initial speed by @kostmo (#1255)
New scenarios
- Adventure game scenario by @kostmo (#1136)
- Run around in circles by @kostmo (#1158)
- hackman by @kostmo (#1135)
- Whack-a-mole by @kostmo (#1026)
- Additional tutorial level on
give
by @byorgey (#1249) - Lights out by @kostmo (#1273)
- Pig capturing scenario by @kostmo (#1258)
- Sokoban levels by @kostmo (#1269)
- Traffic vignette by @kostmo (#1334)
- Active trapdoor demo by @kostmo (#976)
- Sliding puzzle by @kostmo (#1237)
- Scenario with enemies by @kostmo (#971)
- Arbitrage scenario by @kostmo (#1192)
- Powerset scenario by @kostmo (#1342)
UI enhancements
- Allow scrolling the world map unless explicitly disallowed by @byorgey (#1109)
- Add random "static" to
view
outside a certain range by @byorgey (#1110, #1241) - Display the scenario in which an achievement was obtained by @kostmo (#1175)
- World editor prototype by @kostmo (#873)
- Scenario launch options selection by @kostmo (#1010)
- Record best code size by @kostmo (#974)
- Inventory search/filter mode by @byorgey (#1250)
- Display higher clock resolution at lower speeds by @kostmo (#1253)
- Make REPL panel collapsible by @ussgarci (#1076)
- Better typechecking error messages by @byorgey (#1308, #1318)
- Rename inventory to compendium by @kostmo (#1346)
- Goal dialog suppression with
--autoplay
by @kostmo (#1344) - Change binding for Hide REPL to
M-,
by @noahyor (#1375) - Highlight ticks per frame in red when it reaches the cap by @byorgey (#1386)
- Parse and render markdown descriptions by @xsebek (#1106, #1413)
Achievements
- Achievement for disorientation by @kostmo (#1173)
0.3.0.1 - 2023-02-01
A few critical bug fixes and improvements:
- Make sure the base always has a
logger
installed in every tutorial level, by @byorgey in #1067 and @xsebek in #1073 - Allow dialog boxes to scroll by @byorgey in #1071
- Fix bug that sometimes caused scenarios to be skipped or repeated by @byorgey in #1065
0.3.0.0 - 2023-01-30
This is the first release of 2023! It contains:
- various new features and bugfixes (see subsections below)
- UI tweaks
- fewer typos (thanks @bwignall and @kostmo)
- upgraded dependencies (
>=lsp-1.6
and>=brick-1.5
) and raised Stack resolver to use GHC 9.4 #1001 - a ton of internal refactoring
Fixed bugs
- copy parent robot context to child when executing
build
by @byorgey in #817 - Merge new requirements context with existing when running from REPL by @byorgey in #965
- Reset
lastFrameTime
when starting a new scenario by @byorgey in #855 - Fix capability checking, and refactor/add lots of comments by @byorgey in #959
- Fix
EntityMap
merging by @byorgey in #962 - Fix: add first heard message to log by @xsebek in #842
- Fix hypothetical result of condition by @xsebek in #940
- One file per achievement record by @kostmo in #954
- Show duplicate robot logs by @xsebek in #1022
- Copy requirements map to robot context when loading a new
ProcessedTerm
by @byorgey in #827 - Set REPL to
Working
when base hasprogram
field specified by @byorgey in #846 - Create swarm subdirectories as necessary by @xsebek in #943
New Features
Swarm language
- implement Equip/Unequip by @kostmo in #887
- The great
install
/equip
switch by @byorgey in #989
- The great
- Meeting other robots by @byorgey in #920
- New
heading
command by @byorgey in #955 - Add
isempty : cmd bool
to check whether current cell has an entity by @byorgey in #968
Entities
- Add
GPS receiver
device to providesenseloc
capability by @byorgey in #956 - Device with recipe for 'appear' capability by @kostmo in #1027
- device for setname by @kostmo in #1028
LSP improvements
- swarm-lang IDE hover by @kostmo in #972
- Include
SrcLoc
info with variable binding sites by @byorgey in #993 - Annotate ASTs with types at every node by @byorgey in #991
- Improve OnHover for Def/Let, App and Const by @xsebek in #986
- warn of unused variables by @kostmo in #983
Web API
- Expose REPL history via web interface by @kostmo in #821
Command line options
- Add full color mode option by @xsebek in #851
New scenarios
- New ranching scenario by @kostmo in #835
- new bind tutorial by @kostmo in #895
- A "bucket brigade" of robots by @kostmo in #885
- Ice Cream Shop by @kostmo in #1008
- word search by @kostmo in #999
- Wolf, Goat, Cabbage scenario by @kostmo in #944
- swarm logo animation by @kostmo in #1018
Scenario development
- Boolean expressions of objective prerequisites by @kostmo in #927
- support 'orientationMap' by @kostmo in #1023
- support custom attributes defined in scenarios by @kostmo in #1058
UI enhancements
- show devices that enable commands by @kostmo in #899
- Add a "driving mode" to the REPL by @kostmo in #819
Achievements
- achievements board by @kostmo in #796
- first tutorial completion achievement by @kostmo in #925
- Add achievement for losing by @kostmo in #945
Debugging
- Better CESK machine pretty-printing by @byorgey in #948
- Add the full expected location for the data directory by @TristanCacqueray in #908
- Extend logs for warnings by @xsebek in #982
0.2.0.0 - 2022-11-01
A bunch of small fixes and improvements; special thanks to new contributors @0xcefaedfe, @kostmo, @ussgarci, and @valyagolev. Notable changes include:
- New UI features:
- REPL improvements:
- Improve user experience around quitting & moving between tutorial challenges (#754)
autoplay
flag for automatically demonstrating scenario solutions (#792)- Improved inventory sorting and user-controllable sort criteria (#793)
- Ability to temporarily hide robots so you can see what's under them (#802)
- New language features:
- New
void
type (#735)
- New
- Bug fixes:
- Documentation:
- Generate all wiki "cheat sheets" automatically (#769)
- Support for building on GHC 9.4 (#752)
There were several other small fixes and improvements; see the full changelog here.
0.1.1.0 - 2022-10-14
A couple new features and an important bugfix for the Hackage release.
- Update to
hsnoise-0.0.3
, fixing some world generation bugs that only showed up in the Hackage release. (#746) - New "blank" creative scenario (#741)
- REPL improvements
0.1.0.1 - 2022-10-06
A bugfix release for a few minor bugs that plagued the first release:
- Fall back to to the swarm data directory when a
run
file is not found (#730)- This bug caused the move tutorial to be unplayable because it tried to execute
run "data/scenarios/Tutorials/move_system.sw"
- This bug caused the move tutorial to be unplayable because it tried to execute
- Fix version check when there is no GitInfo
(#729)
- This bug caused the game to always report that there was a new version available even when you already had the latest (and only!) version.
0.1.0.0 - 2022-10-06
First Swarm release! Swarm already has:
- a programming language based on the polymorphic lambda calculus + recursion, with a command monad for describing first-class imperative actions
- scenarios which can be loaded from YAML files
- the release comes with official challenges and an in-game tutorial
- the default Classic and Creative modes use the same YAML syntax
- we include JSON schemas for editor support when writing scenarios
- procedural 2D world generation
- LSP server built into the Swarm executable
- Terminal UI interface
- running the executable opens the Main menu by default
- game screen with a world view, inventory and REPL
- popup windows for messages, challenge descriptions, etc.