  The increasing control complexity of Noisy Intermediate-Scale Quantum (NISQ)
systems underlines the necessity of integrating quantum hardware with quantum
software. While mapping heterogeneous quantum-classical computing (HQCC)
algorithms to NISQ hardware for execution, we observed a few dissatisfactions
in quantum programming languages (QPLs), including difficult mapping to
hardware, limited expressiveness, and counter-intuitive code. Also, noisy
qubits require repeatedly performed quantum experiments, which explicitly
operate low-level configurations, such as pulses and timing of operations. This
requirement is beyond the scope or capability of most existing QPLs.
  We summarize three execution models to depict the quantum-classical
interaction of existing QPLs. Based on the refined HQCC model, we propose the
Quingo framework to integrate and manage quantum-classical software and
hardware to provide the programmability over HQCC applications and map them to
NISQ hardware. We propose a six-phase quantum program life-cycle model matching
the refined HQCC model, which is implemented by a runtime system. We also
propose the Quingo programming language, an external domain-specific language
highlighting timer-based timing control and opaque operation definition, which
can be used to describe quantum experiments. We believe the Quingo framework
could contribute to the clarification of key techniques in the design of future
HQCC systems.
