| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | # Factor
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | Factor is a [concatenative](https://www.concatenative.org), stack-based | 
					
						
							| 
									
										
										
										
											2012-08-16 23:26:17 -04:00
										 |  |  | programming language with [high-level | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | features](https://concatenative.org/wiki/view/Factor/Features/The%20language) | 
					
						
							| 
									
										
										
										
											2012-08-16 23:26:17 -04:00
										 |  |  | including dynamic types, extensible syntax, macros, and garbage collection. | 
					
						
							|  |  |  | On a practical side, Factor has a [full-featured | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | library](https://docs.factorcode.org/content/article-vocab-index.html), | 
					
						
							| 
									
										
										
										
											2012-08-16 23:26:17 -04:00
										 |  |  | supports many different platforms, and has been extensively documented.  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The implementation is [fully | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | compiled](https://concatenative.org/wiki/view/Factor/Optimizing%20compiler) | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | for performance, while still supporting [interactive | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | development](https://concatenative.org/wiki/view/Factor/Interactive%20development). | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | Factor applications are portable between all common platforms.  Factor can | 
					
						
							|  |  |  | [deploy stand-alone | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | applications](https://concatenative.org/wiki/view/Factor/Deployment) on all | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | platforms.  Full source code for the Factor project is available under a BSD | 
					
						
							|  |  |  | license. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Getting Started
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 15:02:29 -04:00
										 |  |  | ### Building Factor from source
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you have a build environment set up, then you can build Factor from git. | 
					
						
							|  |  |  | These scripts will attempt to compile the Factor binary and bootstrap from | 
					
						
							|  |  |  | a boot image stored on factorcode.org. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To check out Factor: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 15:14:04 -04:00
										 |  |  | * `git clone git://factorcode.org/git/factor.git` | 
					
						
							|  |  |  | * `cd factor` | 
					
						
							| 
									
										
										
										
											2012-08-10 15:02:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | To build the latest complete Factor system from git: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 06:16:33 -04:00
										 |  |  | * Windows: `build.cmd` | 
					
						
							|  |  |  | * Unix: `./build.sh update` | 
					
						
							| 
									
										
										
										
											2012-08-10 15:02:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Now you should have a complete Factor system ready to run. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | More information on [building factor](https://concatenative.org/wiki/view/Factor/Building%20Factor) | 
					
						
							|  |  |  | and [system requirements](https://concatenative.org/wiki/view/Factor/Requirements). | 
					
						
							| 
									
										
										
										
											2012-08-10 15:02:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ### To run a Factor binary:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | You can download a Factor binary from the grid on [https://factorcode.org](https://factorcode.org). | 
					
						
							| 
									
										
										
										
											2012-08-10 15:02:29 -04:00
										 |  |  | The nightly builds are usually a better experience than the point releases. | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | * Windows: Double-click `factor.exe`, or run `.\factor.com` in a command prompt | 
					
						
							|  |  |  | * Mac OS X: Double-click `Factor.app` or run `open Factor.app` in a Terminal | 
					
						
							|  |  |  | * Unix: Run `./factor` in a shell | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 15:02:29 -04:00
										 |  |  | ### Learning Factor
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | A tutorial is available that can be accessed from the Factor environment: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```factor | 
					
						
							|  |  |  | "first-program" help | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some other simple things you can try in the listener: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```factor | 
					
						
							|  |  |  | "Hello, world" print | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 4 8 15 16 23 42 } [ 2 * ] map . | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1000 [1,b] sum . | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 4 iota  [ | 
					
						
							|  |  |  |     "Happy Birthday " write | 
					
						
							|  |  |  |     2 = "dear NAME" "to You" ? print | 
					
						
							|  |  |  | ] each | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | For more tips, see [Learning Factor](https://concatenative.org/wiki/view/Factor/Learning). | 
					
						
							| 
									
										
										
										
											2012-08-10 15:14:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | ## Documentation
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The Factor environment includes extensive reference documentation and a | 
					
						
							|  |  |  | short "cookbook" to help you get started. The best way to read the | 
					
						
							|  |  |  | documentation is in the UI; press F1 in the UI listener to open the help | 
					
						
							|  |  |  | browser tool. You can also [browse the documentation | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | online](https://docs.factorcode.org). | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Command Line Usage
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Factor supports a number of command line switches: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | Usage: factor [Factor arguments] [script] [script arguments] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Common arguments: | 
					
						
							|  |  |  |     -help            print this message and exit | 
					
						
							|  |  |  |     -i=<image>       load Factor image file <image> (default factor.image) | 
					
						
							|  |  |  |     -run=<vocab>     run the MAIN: entry point of <vocab> | 
					
						
							|  |  |  |         -run=listener    run terminal listener | 
					
						
							|  |  |  |         -run=ui.tools    run Factor development UI | 
					
						
							|  |  |  |     -e=<code>        evaluate <code> | 
					
						
							|  |  |  |     -no-user-init    suppress loading of .factor-rc | 
					
						
							| 
									
										
										
										
											2016-03-03 14:24:54 -05:00
										 |  |  |     -roots=<paths>   a list of path-delimited extra vocab roots | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Enter | 
					
						
							|  |  |  |     "command-line" help | 
					
						
							|  |  |  | from within Factor for more information. | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can also write scripts that can be run from the terminal, by putting | 
					
						
							|  |  |  | ``#!/path/to/factor`` at the top of your scripts and making them executable. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Source Organization
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The Factor source tree is organized as follows: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * `vm/` - Factor VM source code (not present in binary packages) | 
					
						
							|  |  |  | * `core/` - Factor core library | 
					
						
							|  |  |  | * `basis/` - Factor basis library, compiler, tools | 
					
						
							|  |  |  | * `extra/` - more libraries and applications | 
					
						
							|  |  |  | * `misc/` - editor modes, icons, etc | 
					
						
							|  |  |  | * `unmaintained/` - unmaintained contributions, please help! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Community
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Factor developers meet in the `#concatenative` channel on | 
					
						
							|  |  |  | [irc.freenode.net](http://freenode.net). Drop by if you want to discuss | 
					
						
							|  |  |  | anything related to Factor or language design in general. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-05 14:42:26 -05:00
										 |  |  | * [Factor homepage](https://factorcode.org) | 
					
						
							|  |  |  | * [Concatenative languages wiki](https://concatenative.org) | 
					
						
							| 
									
										
										
										
											2012-05-17 14:50:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Have fun! |