def self.main(&)Source
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 and STDERR
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.