Factor ships with a gui ide, but I prefer to use the command line listener REPL within an emacs buffer for my coding. The advantage is that it's more tightly integrated with emacs - e.g. I can send blocks of code to the repl with keypresses. The downside is the lack of debugger.

Today I discovered that factor REPLs can be nested, rather like creating subshells in unix, using the 'listener' word. This is really handy because it means you can drop into a listener at any point in your code. E.g.

"mydir" [ listener ] with-directory

...opens a nested repl with "mydir" being the current working directory. Exit the repl with 'bye' (or ctrl-d) and execution returns to the parent listener in the parent directory.

This trick can be employed from any point so it's really handy for debugging state-machine style nested code. Here's a trivial example to illustrate the point:

3 [ listener ] map
  --- starts a new listener ---
drop "hello" bye
  --- starts a new listener ---
  --- starts a new listener ---
drop "goodbye" bye
  --- back to the parent ---
==> { "hello" 1 "goodbye" }