Хэлмэрчтэй хэлүүд(Interpreted languages)

Programs must be written for people to read, and only incidentally for machines to execute.
—Abelson & Sussman, SICP, preface to the first edition
I want to see people using Perl to glue things together creatively, not just technically but also socially.
—Larry Wall
The apprentice avoids all use of Java classes. The journeyman embraces Java classes. The master knows which classes to embrace and which to avoid.
—Michael Fogus, The Joy of Clojure

Interpreted programming languages

“Хэлмэрчтэй програмчлалын хэлүүд” эсхүл “Хэлмэрчтэй хэлүүд” гэхээр хөгийн сонсдож байгаа байх, “interpreted languages”-ийг орчуулж байгаа нь энэ л дээ. Програмчлалын хэлүүдийг хөрвүүлэгдэх хэлбэрээр нь хөрвүүлэгдсэн(compiled) болон хэлмэрчтэй(interpreted) гэж ангилдаг. Хөрвүүлэгдсэн програмын код нь тухайн хатуумж(hardware)даа зориулагдсан байдаг. Interpreted language гэдэг нь хагас хөрвүүлэгдсэн эсвэл огт хөрвүүлэлт хийгдээгүй хэлбэртэйгээр ажилладаг хэлүүд юм. Эдгээр хэлүүд дээрх програм нь хатуумжид зориулагдан хөрвөдөггүй, харин хэлмэрч буюу interpreter нь програмыг ажиллуулах үедээ тухайн хатуумжийн хэл рүү(хамгийн доод түвшний хэл) хөрвүүлдэг.

Хэлмэрчтэй ажиллах програмууд хөрвүүлэгдсэн програмаас удаан ажилладаг боловч нилээд олон давуу талуудтай:

  • Платформоос(хатуумж болон үйлдлийн систем) хамааралгүй
  • Дебаг хийхэд амар
  • Динамик төрөл ашиглах
  • Програмын хэмжээ бага

Эдгээрээс гадна хэлмэрчтэй хэл дээр код бичих “засаад->хэлмэрчлээд->дебагдах” -гэсэн цикл нь хөрвүүлэгдсэн хэл дээрх “засаад->хөрвүүлээд->ажиллуулаад->дебагдах” -гэсэн циклээс хурдан байдаг. Учир нь бүхэл програмыг хөрвүүлэхээс багахан хэсгийг хэлмэрчлэн ажиллуулах нь хурдан, тэгээд ч дебаг хийгдэх боломж нь их, кодын тунгалаг чанар сайн байдаг. Хөрвүүлэгдсэн програмын хурдан ажиллах чанар, хэлмэрчтэй програмын хөгжүүлэхэд хялбар байх чанаруудыг зарим хэлүүд дээр хослуулсан байдаг. Жишээ нь Common LISP-ийн зарим хувилбарууд хагас хөрвүүлэгдсэн хэлбэрт хөгжүүлэлт хийгээд эцсийн бүтээгдэхүүнээ бүрэн хөрвүүлэгдсэн байдлаар гаргах боломжтой байдаг. Мөн JVM(Жава виртуал машин) нь хагас хөрвүүлэгдсэн жавагийн байткодыг ажиллуулах үедээ шаардлагатай хэсгүүдийг бүрэн хөрвүүлж хадгалаад ашигладаг. Энэ аргыг JIT(Just in time) хөрвүүлэлт гэдэг ба .NET -ийн CLR(Common Language Runtime) нь CIL(Common Intermediate Language) дээр байгаа програмын кодыг ажиллуулахдаа бас JIT хөрвүүлэлтийг хийдэг байна.

Үнэндээ C, C++ гэх мэт хөрвүүлэгдсэн хэлүүд ч дотроо хэлмэрчээр дамжигдан хөрвөдөг. Гэхдээ хэлмэрч нь хөрвүүлэгчийнхээ салшгүй хэсэг болсон байдаг. Түгээмэл хэрэглэгддэг хэлмэрчтэй хэлүүд гэвэл:

  • Java(байткод руу хөрвөөд виртуал машин дотор ажилладаг)
  • Lisp(хөрвөгдөөгүй эсвэл хагас хөрвөсөн эсвэл бүрэн хөрвөсөн байдлаар)
  • ASP(Вэб хуудас хийдэг скрипт хэл)
  • PERL(байткод руу хөрвөөд хэлмэрчлэгдэж ажилладаг)
  • BASIC(хэлмэрчтэй ажилладаг)
  • PHP(байткод руу хөрвүүлэгдээд хэлмэрчлэгдэж ажилладаг)
  • JavaScript(HTML дотор дагалдаж браузераар хэлмэрчлэгддэг)