Skip to main content
The Fift stack can contain values of the following types:
TypeDescription
IntegerA TVM signed 257-bit integer.
CellA TVM cell for persistent data storage on TON Blockchain. A cell consists of up to 1023 data bits and up to 4 references to other cells.
SliceA TVM slice is a read-only view of a TVM cell that allows sequential access to the cell’s data and references. A cell can be converted into a slice, extracting stored bits and references without modifying the original cell.
BuilderA TVM builder is used to construct a cell by adding data and cell references.
NullThe TVM Null type has exactly one value null. In Fift, null is mostly used to initialize Box’es, hashmaps and lists. Usually denoted by .
TupleA tuple is an ordered collection of values of any of the Fift types in this list, where each value is not necessarily of the same type.
ContinuationA TVM continuation employed for execution of TVM code.
StringA UTF-8 string.
BytesAn arbitrary sequence of 8-bit bytes, typically used to represent binary data.
BoxA container occupying one stack slot, that can be used to store one value of any type. Usually used to represent variables and mutable data structures.
AtomA simple entity uniquely identified by its name. Can be used to represent identifiers, labels, operation names, tags, and stack markers.
ObjectAn arbitrary C++ object. Entities like word lists, execution tokens and Fift hashmaps are represented as having the type Object. This type may also be used by Fift extensions to manipulate other data types and interface with other C++ libraries.
The first seven types listed above are shared with TVM; the remainder are Fift-specific.
No boolean typeThere is no dedicated Boolean type. Instead, booleans are represented as integers:
  • “false” is 0, “true” is -1, a 257-bit integer with all bits set to 1.
  • Logical operations are performed using bitwise operations.
  • In conditional execution of blocks and loops with exit conditions, any nonzero integer in the conditions is regarded as “true”.
TuplesTuples can be used to represent values of arbitrary algebraic data types and Lisp-style lists. Refer to the Tuples section in the basic values page.
The Object typeMany entities in Fift do not have a dedicated type, but they are assigned type Object. Fift provides words for creating and manipulating these entities. Examples of entities of type Object:
  • Word list: A partially created list of word references, used for creating an execution token. See section for Blocks in the Control Flow page. See also Section 4.7 in the whitepaper for a list of words that create and manipulate word lists.
  • Execution token: Fift code that can be executed and manipulated on the Fift stack. See section for Blocks in the Control Flow page for more details.
  • Fift hashmap: A hashmap specific for Fift. These hashmaps are not represented as cells, contrary to TVM hashmaps. Refer to Fift hashmaps section in the Basic Values page. As a comparison with TVM hashmaps, refer to Section 6.3 in the whitepaper for a list of words that create and manipulate TVM hashmaps.