Figyelmet érdemlő modern nyelvek, I. rész: Hack, Scala, Swift
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
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.