Go ilə işləyən hər kəs const bloklarında iota ilə qarşılaşıb. Amma bu qəribə identifier nədir — niyə belə adlanır və haradan gəlir? Cavab sizi 1962-ci ilə, kanadalı riyaziyyatçı Kenneth Iverson və onun APL dilinə aparacaq.
iota nədir?
Go spesifikasiyasına görə iota, yalnız const declaration daxilində işləyən predeclared identifier-dır. O, sadəcə bir şey edir: avtomatik olaraq nömrələyir. Hər const blokunda sıfırdan başlayır və hər yeni sətirdə bir artır. Sadə görünür, amma gücü ondadır ki, iota bir expression-dur — onu vura, bölə, bit shift edə bilərsiniz.
const ( _ = iota // 0 (skip) KB = 1 << (10 * iota) // 1 << 10 = 1024 MB // 1 << 20 = 1.048.576 GB // 1 << 30 )Bu, Go'da enum, bitmask və constant seriyaları yaratmağın standart üsuludur. Və hər şey bir yunan hərfi ilə başlayır.
iota adının mənşəyi: ι və APL
ιώτα (iota) yunan əlifbasının 9-cu hərfidir və eyni zamanda ən kiçik hərfdir — sadəcə bir xətt. İncil'dəki məşhur "not one iota" ifadəsi də buradan gəlir: "heç bir zərrə qədər". Və bu ad, "bir-bir artan" bir operator üçün mükəmməl seçimdir.
1962-ci ildə Kenneth E. Iverson "A Programming Language" kitabını nəşr etdi. O, proqramlaşdırmanın riyaziyyat kimi qısa, simvolik və güclü olması lazım olduğunu düşünürdü. APL dilində o, ⍳ operatorunu yaratdı — iota adlanan bu operator sadəcə bir şey edirdi: ardıcıllıq yaratmaq. ⍳5 → 1 2 3 4 5. ⍳100 → 1'dən 100'ə qədər bütün ədədlər.
Bell Labs əlaqəsi: Ken Thompson, Rob Pike, Robert Griesemer
APL yalnız bir dil deyildi — bir düşüncə tərzi idi. Ken Thompson (Unix yaradıcısı) APL interpreter yazanlardan biri idi. Rob Pike və Robert Griesemer də eyni şeyi etmişdi. Hər üçü sonradan Go dilini yaratdı. Məhz bu ortaq keçmiş sayəsində iota adı onlara təbii gəldi.
Pike, Thompson və Griesemer Go-nu 2007-ci ildə dizayn etməyə başlayanda bir məqsəd qoymuşdular: hər şeyi C'dən daha sadə etmək. C'də enum yazmaq yorucu idi — hər sabitə əl ilə dəyər vermək lazım idi. Onlara isə avtomatik sayan, expression kimi istifadə oluna bilən bir həll lazım idi. Beləcə iota Go-ya daxil oldu.
iota niyə bu qədər xüsusidir?
iota sadəcə bir auto-increment mexanizmi deyil. Bu, Go-nun fəlsəfəsinin bir hissəsidir: "bir işi yaxşı et". Go'da constant seriyaları yaratmağın yalnız bir yolu var — iota. Və bu yanaşma təmiz, oxunaqlı və proqnozlaşdırıla biləndir.
const ( Read = 1 << iota // 1 Write // 2 Execute // 4 )Üstəlik, iota compile zamanında həll olunur — heç bir runtime overhead yoxdur. Və ən gözəli odur ki, hər dəfə bir proqramçı "iota nədir?" deyə soruşduqda, o, APL-dən tutmuş Bell Labs'a qədər proqramlaşdırma tarixinin bir parçasını kəşf edir.
Bir yunan hərfi ilə başlayan bu yolculuq 50 ildən çox çəkdi — riyaziyyatdan, APL dilinə, Unix'ə və nəhayət Go-ya qədər. Və bu gün milyonlarla proqramçının gündəlik istifadə etdiyi bir alətə çevrildi.



