use __init/__exit macro