Difference between metaprogramming and homoiconicity in programming languages? Which of them includes "modifying the code on the execution"?


So I have two questions:

  1. What is the difference between metaprogramming and homoiconicity in programming languages?

  2. Which of those terms includes "modifying the code on the execution"?