Pereiti prie pagrindinio turinio

PHP programuotojas: Facebook sukurta programavimo kalba, sujungusi statines ir dinamines kalbas

Kai Markas Zuckerbergas ėmė kurti thefacebook.com, jam reikėjo pasirinkti programavimo kalbą. Jis pasirinko PHP ir tam buvo kelios priežastys. PHP turi labai greitą grįžtamojo ryšio ciklą – atliekate pakeitimą, išsaugote failą, F5 ir išsyk matote pakeitimus. Dar viena priežastis – PHP yra dinamiška, ji nereikalauja nurodyti kintamųjų tipų.

Tarkim, Java, C#, C++ – statiškos kalbos reikalauja sukompiliuoti kodą prieš paleidžiant programą. Visgi, statinės kalbos turi pliusų, pavyzdžiui – galimybė greitai atrasti klaidas, ar tai, kad statinė informacija apie kintamuosius siūlo tam tikrą automatizuotą kodo dokumentaciją.

Nuo 80 programuotojų 2008 – aisiais, iki 1000 – čio 2012 – aisiais. Tiek išaugo Facebook gretos. Dirbti tokioje didelėje komandoje yra sunku, o Facebook jau tada bent 2 kartus per dieną leisdavo naujas versijas. Tad rezultatas – turime daug kodo eilučių ir daug potencialių klaidų. Reikėjo ieškoti sprendimo  – IT specialistų komanda nusprendė apjungti geriausias statinių ir dinaminių kalbų savybes – taip gimė Hack kalba.

Pirma sykį kalba pristatyta 2012 metais, ji tapo socialinio tinklo pagrindu. Dabar Hack kalbos naudojimas minimalus, dauguma framework’ų Hack nepalaiko. Visgi, tam tikrus Hack kalbos sprendimus perėmė PHP 7 – jos vystosi kartu ir sinchronizuojasi kartu.

Denis – PHP programuotojas @Visma Lietuva ir hub‘ų entuziastas – dalinasi žiniomis iš hub’o apie Hack programavimo kalbą. Kokie pagrindiniai šios programavimo kalbos aspektai?

TYPE ANNOTATIONS:

  • Platesnės skaitymo ir palaikymo galimybės
  • Klaidų radimas prieš paleidžiant
  • Leidžia turėti geresnes type-aware autocomplete funkcijas IDE
  • Galima naudoti parametrams, klasės narių kintamiesiems ir gražinamoms metodu reikšmėms

Į galimas anotacijas įeina:

  • Primityvūs tipai: int, float, string, bool, array, resource
  • Vartotojo nustatytos klasės: Vector<some type>
  • Mišrios: mixed
  • Tuščios: void
  • nullable-reikšmės: ?<type>
  • Tipizuoti masyvai: array<string>, array<Bartender>

Generics

Generics`ai leidžia programuotojams parašyti klasę ar metodą su galimybe bet kokiam tipui parinkti parametrus, tuo pačiu išsaugant tipo saugumą. Be generics, kuriant panašų modelį kaip pavaizduota paveikslėlyje žemiau, reikėtų sukurti kelias panašias klases kiekvienam skirtingam tipui, pvz., “PairString” ir “PairInt”, ir tai greitai tampa per sudėtinga, nes atsiranda daug, iš esmės, besikartojančio kodo.

  • Nepakeičiama (immutable), kai tik tipas buvo priskirtas
  • Gali būti patikrinta statiškai
  • Palaikomi nullable tipai
  • Palaikoma bendra kovariacija (+) ir kontravariacija (-)

Nullable tipai

  • Saugesnis būdas dirbti su null-reikšmėmis
  • Palaikoma naudojant ? operatorių
  • void ir noreturn tipai – negali būti nullable (negali turėti reikšmės null)
  • ?mixed – neleidžiama, nes mixed tipas jau ir taip leidžia turėti null reikšmę

Kolekcijos

  • PHP masyvai yra pernelyg bendro pobūdžio (vienas dydis tinka visiems)
  • Vector, Map, Set, Pair
  • Immutable versijos: ImmVector, ImmMap, ImmSet
  • Traversable
  • Type annotation (pvz., Map<int, int>)

Kolekcijos teikia pirmos klasės integruotus parametrų tipus, tokius kaip „Vector“ (surikiuotas, indeksuojamas sąrašas – angl. “ordered index-based list”), „Map“ (surikiuotas žodynas – angl. “ordered dictionary”), „Set“ (unikalių elementų rinkinis) ir „Pair“ (indeksuojama kolekcija, turinti lygiai du elementus).

Lambdas

Lambda – yra anoniminė funkcija užrašyta naudojant lambda operatorių. Veikimo principas yra toks pat, tačiau lambda sintaksė skiriasi nuo kanoninės anoniminių PHP funkcijų sintaksės savo “minimalizmu” (angl. “less verbose”).

Rašoma naudojant lambdą rodyklę ==>

Lambda - yra anoniminė funkcija
  • Dešininė asociacija (right-associative), ir galimas nuoseklus sujungimas (angl. “chaining”)
  • Netiesiogiai naudoja kintamuosius iš išorinio konteksto (angl. “outer scope”)

Kiti aspektai:

  • Async palaikymas
  • Konstruktoriaus parametrų iškėlimas (angl. “parameter promotion”)
  • Variadinės (angl. “variadic”) funkcijos (priima kintamą argumentų kiekį)
  • Tipu aliasinimas (angl. “type aliasing”): type Counter = int; arba newtype Point = (int, int)
  • Formos (angl. “shapes”) – grupė iš nulių ar daugiau duomenų laukų, paimta nedalomai kaip visuma
  • XHP (XML-pavidalo išvedimo atvaizdavimas, su duomenų tipų patikra)

Nuorodos:

  1. https://docs.hhvm.com/hack/overview/
  2. https://hacklang.org/tutorial.html
  3. https://docs.hhvm.com/hack/tools/hackificator

Populiariausi blog'ai

  • Migrating from Xamarin to .NET MAUI: A Comprehensive Guide

    The world of mobile application development is constantly evolving, and Microsoft’s .NET Multi-platform App UI (.NET MAUI) is at the forefront of this change. As an evolution of Xamarin.Forms, .NET MAUI offers developers a modern, cross-platform framework for building native device applications. This blog post will guide you through the process of migrating your existing Xamarin.Forms application to .NET MAUI.

  • My experience on taking the eWPTXv2 exam

    So a few months ago I had the joy of passing the eWPTXv2 exam. Well, it does not sound intriguing until you translate it into human language. The eWPTXv2 is actually eLearnSecurity Web Penetration Testing Extreme second version. Everything sounds better than you put extreme into it. Well, this is not that case since the exam is actually a bit hard.

  • Socialinis intranetas „Simoona“ – dabar prieinamas kiekvienam!

    Šiame blog’o įraše papasakosime apie vidinės komunikacijos įrankį, mūsų kurtą socialinį tinklą „Simooną“. Tik prasidėjus kūrybos procesui mums rūpėjo tik viena – kaip kuo daugiau įmonės kultūros perkelti į skaitmeninę erdvę. Ir prieš aštuonerius metus, net neįsivaizdavome, kad šis vidinis intranetas, bus toks svarbus kuriant glaudžius ryšius tarp kolegų ir tikrai net negalėjome nutuokti, kokia svarbi „Simoona“ bus užklupus pasaulinei pandemijai.