module Crystal
Defined in:
crystal/main.crConstant Summary
-
BUILD_COMMIT =
"b782738ff"
-
BUILD_DATE =
"2018-06-27"
-
CACHE_DIR =
"/root/.cache/crystal"
-
DEFAULT_PATH =
""
-
DESCRIPTION =
"Crystal 0.25.1 [b782738ff] (2018-06-27)\n\nLLVM: 4.0.0\nDefault target: x86_64-unknown-linux-gnu"
-
LLVM_VERSION =
"4.0.0"
-
PATH =
"/crystal/src:lib"
-
VERSION =
"0.25.1"
Class Method Summary
-
.main(&block)
Defines the main routine run by normal Crystal programs:
-
.main(argc : Int32, argv : Pointer(Pointer(UInt8)))
Main method run by all Crystal programs at startup.
-
.main_user_code(argc : Int32, argv : Pointer(Pointer(UInt8)))
Executes the main user code.
Class Method Detail
Defines the main routine run by normal Crystal programs:
- Initializes the GC
- Invokes the given block
- Handles unhandled exceptions
- Invokes
at_exit
handlers - Flushes
STDOUT
andSTDERR
This method can be invoked if you need to define a custom main (as in C main) function, doing all the above steps.
For example:
fun main(argc : Int32, argv : UInt8**) : Int32
Crystal.main do
elapsed = Time.measure do
Crystal.main_user_code(argc, argv)
end
puts "Time to execute program: #{elapsed}"
end
end
Note that the above is really just an example, almost the
same can be accomplished with at_exit
. But in some cases
redefinition of C's main is needed.
Main method run by all Crystal programs at startup.
This setups up the GC, invokes your program, rescuing
any handled exception, and then runs at_exit
handlers.
This method is automatically invoked for you, so you don't need to invoke it.
However, if you need to define a special main C function,
you can redefine main and invoke Crystal.main
from it:
fun main(argc : Int32, argv : UInt8**) : Int32
# some setup before Crystal main
Crystal.main(argc, argv)
# some cleanup logic after Crystal main
end
The Crystal.main
can also be passed as a callback:
fun main(argc : Int32, argv : UInt8**) : Int32
LibFoo.init_foo_and_invoke_main(argc, argv, ->Crystal.main)
end
Note that before Crystal.main
is invoked the GC
is not setup yet, so nothing that allocates memory
in Crystal (like new
for classes) can be used.
Executes the main user code. This normally is executed
after initializing the GC and before executing at_exit
handlers.
You should never invoke this method unless you need to
redefine C's main function. See Crystal.main
for
more details.