Object

All data that can be assigned to a variable. The attributes of the Object class are as follows.

  • .__repr__: Returns a (non-rich) string representation of the object
  • .__sizeof__: Returns the size of the object (including heap allocation)
  • .__dir__: Returns a list of object attributes
  • .__hash__: returns the hash value of the object
  • .__getattribute__: Get and return an attribute of an object
  • .clone: Creates and returns a clone of an object (with an independent entity in memory)
  • .copy: Returns a copy of the object (pointing to the same thing in memory)

Record

An object generated by a record literal ({attr = value; ...}). This object has basic methods such as .clone and .__sizeof__.

obj = {.x = 1}
assert obj.x == 1

obj2 = {*x; .y = 2}
assert obj2.x == 1 and obj2.y == 2

Attribute

An object associated with an object. In particular, a subroutine attribute that takes self (self) as its implicit first argument is called a method.

# note that there is no `.` in private_attr
record = {.public_attr = j; private_attr = 2; .method = self -> self.i + 1}
record. public_attr == 2
record.private_attr # AttributeError: private_attr is private
assert record.method() == 3

Element

An object belonging to a particular type (e.g. 1 is an element of type Int). All objects are at least elements of type {=}. Elements of classes are sometimes called instances.

Subroutine

Indicates an object that is an instance of a function or procedure (including methods). The class representing a subroutine is Subroutine. An object that implements .__call__ is more commonly called a Callable.

Callable

An object that implements .__call__. It is also the superclass of Subroutine.

Type

An object that defines requirement attributes and commonizes objects. There are two main types: Polymorphic Type and Monomorphic Type. Typical monomorphic types are Int, Str, etc., and polymorphic types are Option Int, [Int; 3], etc. Furthermore, a type that defines a method that changes the state of an object is called a Mutable type, and it is necessary to add ! to the variable attribute (e.g. dynamic array: [T; !_]) .

Class

A type that has .__new__, .__init__ methods, etc. Implement class-based object orientation.

Function

A subroutine that has read permission for external variables (excluding static variables) but does not have read/write permission for external variables. In other words, it has no external side effects. Erg functions are defined differently than Python's because they do not allow side effects.

Procedure

It has read and self permissions for external variables, read/write permissions for static variables, and is allowed to use all subroutines. It can have external side effects.

Method

A subroutine that implicitly takes self as the first argument. It is a different type than a simple function/procedure.

Entity

Objects that are not subroutines and types. Monomorphic entities (1, "a", etc.) are also called value objects, polymorphic entities ([1, 2, 3], {"a": 1}) are also called container objects .