ITHub

Figyelmet érdemlő modern nyelvek, I. rész: Hack, Scala, Swift

Figyelmet érdemlő modern nyelvek, I. rész: Hack, Scala, Swift
Farkas Gábor
Farkas Gábor
| ~4 perc olvasás

Egy korábbi posztunkban már írtunk néhány nagyon furcsa programozási nyelvről, most azonban három olyan, talán viszonylag kevéssé ismert darabot mutatunk be, amiknek (kifejezetten jelentős) valós felhasználása is van.

Hack, Scala, Swift: figyelmet érdemlő modern nyelvek

Hack

A Hack nyelvet a Facebook berkein belül fejlesztették ki kifejezetten a HHVM-hez, ami egy PHP-t kiszolgáló virtuális gép megoldás. Ebből kiindulva nem meglepő, hogy a Hack tulajdonképpen a PHP továbbgondolása, sőt mi több, a legtöbb PHP fájl egyben eleve teljesen érvényes Hack forráskód is.

A motivációt néhány gyakori, mindennap előforduló PHP-s probléma adja. Vegyük azt a tipikus esetet, amikor egy metódushívás null objektumon történik, és ez csak futásidőben generál hibát. Nagyméretű rendszereknél — mint amilyen a Facebook is — az ilyen jellegű problémák felnagyítódnak. A gyengén típusos nyelvek nagy előnye hagyományosan a gyors fejlesztési ciklus, azonban ennek oltárán általában fel kell áldoznunk a korai hibadetekciót. Az erősen típusos nyelvek ugyan nyújtanak egyfajta védőhálót, azonban ez sokszor a gyorsabb fejlesztés kárára megy. A Facebooknál úgy gondolták, hogy ennek nem muszáj szükségszerűen így lennie, és kell lennie egy sweet spotnak — így született meg a Hack.

A nyelv tulajdonképpen egy erősen típusos PHP (persze néhány már amúgy sem ajánlatos, ill. a statikus típusokkal nem kompatibilis függvényt el kellett távolítani), a függvények paraméterlistái (és a visszatérési paraméter is) típusokkal annotálhatók, ami statikus, fordítás idejű ellenőrzést tesz lehetővé. Valahogy így:

function negate(bool $x): bool {
  return !$x; 
}

Persze ennél többet is ad, hiszen használhatunk például más nyelvekből megszokott generikus kollekciókat is. Fontos szót ejteni a forradalmian gyors típusellenőrzőről, ami egyáltalán nem lassítja le a fejlesztési folyamatot. A Hack nyelvről bővebben a hivatalos Hack weboldalon tájékozódhattok.

Scala

A név a Scalable Language rövidítése, ami azt hivatott kifejezni, hogy a nyelv a felhasználójával együtt növekszik. Ha akarjuk, egy szkriptnyelvhez hasonlóan egysoros kifejezésekkel játszhatunk, de használhatjuk olyan kritikus rendszerek építéséhez is, mint a Twitter, vagy a LinkedIn.

A Scala egy tisztán objektumorientált nyelv, de a funkcionális nyelvek számos vívmányát tartalmazza (closure-ok, lazy evaulation, stb.). Alapvetően Java bájtkódra fordul, és más tekintetben is erősen kötődik a Javához, így a tulajdonságait ehhez viszonyítva érdemes taglalni.

A Javánál a Scala szintaktikailag rugalmasabb, nincs szükség például az utasítások végén pontosvesszőkre, bármely metódus infix operátorként is használható, az osztályok tagváltozói pedig transzparens módon getter-setter metódusokként is működnek.

Az egységesített típusrendszer a Javától eltérően nem különböztet meg primitív- (pl. int, float) és referenciatípusokat, a Scalaban kizárólag az utóbbiak léteznek (és mindegyik az Any ősosztályból származik). Ismerkedésképpen így néz ki egy egyszerű osztály definíciója Scala nyelven:

class Point(
    val x: Double, val y: Double,
    addToGrid: Boolean = false
) {
  import Point._
 
  if (addToGrid)
    grid.add(this)
 
  def this() {
    this(0.0, 0.0)
  }
 
  def distanceToPoint(other: Point) =
    distanceBetweenPoints(x, y, other.x, other.y)
}
 
object Point {
  private val grid = new Grid()
 
  def distanceBetweenPoints(x1: Double, y1: Double,
      x2: Double, y2: Double) = {
    math.hypot(x1 - x2, y1 - y2)
  }
}

Swift

Ez messze a legújabb programozási nyelv ebben a rövid listában, a napokban jelentős sajtót is kapott (persze miről nem mondható ez el, ami az Apple nevéhez fűződik?). Az almás cég tulajdonképpen az Objective-C-t gondolta egy kicsit tovább, kiegészítve néhány modern nyelvi elemmel. Chris Lattner kezdte el a fejlesztését még 2010-ben, elmondása szerint sok egyéb mellett az új specifikáció főleg a Haskellből, a Rubyból, a Pythonból, és a C#-ból merít ötleteket.

Az Objective-C-ben még meglévő pointerek a Swiftben már eltűntek, és header fájlokra sincs többé szükség. Megjelent az operator overloading, a generikus nyelvi elemek, és az erős típusosság. A típusok terén még egy fontos változás, hogy a Foundation kitből ismert alaptípusok (NSSTring, NSArray, stb.) nyelvi szintre emelődtek, így használatuk sokkal egyszerűbbé vált. Nézzünk meg egy példát erre. Az Objective-C-ben két NSString típusú változót így tudtunk konkatenálni:

NSString *str = @"hello,"; str = [str stringByAppendingString:@" world"];

Bár a motorháztető alatt ugyanaz történik, a Swiftben már megtehetjük az alábbi manővert:

var str = "hello,"; str += " world"

Aki szeretne jobban megismerkedni a Swift nyelvvel, a hivatalos weboldalon a dolgok mélyére áshat.