Konu ile ilgili olarak ReadWrite ile yaptığı röportajda Facebook Hack ekibinin yöneticisi Bryan O'Sullivan; bundan 10 yıl önce Facebook'un, hızlı bir şekilde interaktif web sayfaları geliştirmek için kullanılan PHP ile yola çıktığını, ancak şirket büyüdükçe PHP yönetilmesi zor ve geliştiricilerin hata yapmasına müsait olan bir programlama dili haline geldiğini belirtti. Rahat bir şekilde yönetilmesi ve geliştiricilerin hata yapmasını minimuma indirebilmesi için Hack'i geliştirdikleri belirtildi.
Yapı olarak PHP ile neredeyse birebir aynı ancak return türleri/türler üzerinde çok durmuşlar. Birçok PHP scriptinin şuan Hack ile uyumlu olduğu söylenmekte.
- Fonksiyonun return tipi önceden belirtilebiliyor. (örn function fonksiyon(int $x): string {} //fonksiyon string döndürecek
- Hatalar anlık gösteriliyor. Örneğin bir fonksiyonun int döndürmesi gerekirken string döndürüyorsa bu hata önceden yansıyor. (IDE ve lint pluginleriyle normal PHP'de de bu tür hatalar yakalanıyor ancak tam emin olamadım.)
- ? ile nullable yapılabiliyor. (örn function fonksiyon( ?int $x )) //nullable
- Yeni collection türleri var. (Vector, Set and Map) PHP'de object ve array var.
- Koleksiyonların içerikleride tür olarak belirtilebiliyor. (örn Vector, sadece int değerlerine sahip olan Vector türü anlamına geliyor)
- Vector'ler birer object. Lambdalarda kullanımı kolaylaştırıyor. ( return $v->map($x ==> $x * 2); Her bir vektör değerini 2 katına çıkarıyor. Vectorlerde, clear, isEmpty gibi methodlar var.
- Class üyelerinin initlenmesi mecburi olmuş. Örn. aşağıdaki sınıf çalışmayacak çünkü $y değeri initialize edilmedi.
- Yeni bir syntax ile artık sınıf üyeleri otomatik olarak intialize edilebiliyor. Yukarıdaki örneğin aynısı:
publicfunction __construct(privatefloat $x,privatefloat $y
){}// $this->x = $x yapmaya gerek yok.
- Kendi veri tiplerimizi oluşturabiliyoruz.
- type kullanarak alias yaratabiliyoruz. (type Matrix = Vector>);
- shape kullanarak değişmeyen anahtarlar oluşturabiliyoruz.
type my_shape = shape('field1'=>int,'field2'=>bool,);
shape('field1'=>1);//doğru
shape('field1'=>"Deneme");//yanlış
- XHP ile otomatik XSS protection var. (Bana kalırsa gereksiz.)
function build_paragraph(string $text,string $style)::div {return<div style={$style}>{$text}</p></div>;}
- Opaque (anlaşılmaz) türler var. Örnekle anlatmak gerekirse, "newtype user_id = int;" ile yeni bir "tür" oluşturuyoruz. Bu scope içerisinde "user_id" kullandığımız herhangi bir yerde bu türün "int" olduğu belirtiliyor. Ancak scope dışarısına çıktığımızda, "user_id" ye erişmeye çalıştığımızda bunun bir Opaque (anlaşılmaz/bulutlu gibi anlamları var) tür olduğu belirtiliyor.
- <> kullanarak methodların kalıtımla eklenmiş olmasını şart koşabiliyoruz.
classMyBaseClass{publicfunction get_user():MyUser{returnnewMyUser();}}classMyDerivedClassextendsMyBaseClass{<<Override>>publicfunction get_user():MyUser{//get_user methodu kalıtım yoluyla bırakılmış olmalı. (MyBaseClass sınıfından)returnnewMyUser();}}
- Sınıflarımızda "require extends" veya "require implements" kullanarak, bu sınıfı kullananmak isteyen sınıfın mutlaka SınıfAdı sınıfını extend/implement etmiş olmasını şart koşabiliyoruz.
class C {protectedfunction bar():void{}}interface I {publicfunction foo():void;}
trait T {requireextends C;//eğer bu olmasaydı $this->bar çalışmayacaktırequireimplements I;publicfunction do_stuff():void{
$this->bar();// Erişebiliyoruz çünkü "require extends" kullandık
$this->foo();}}
- Async desteği mevcut. (PHP için Ratched ve React var ama dil içerisinde olması çok daha güzel)
Benim en çok beğendiğim özellik yeni constructor syntaxı. Keşke PHP'de de bu tür özellikler olsa. Hatta bununla beraber Ruby'nin attr_accessor özelliğini veya C#'ın get; set; özelliğini alsalar tadından yenmez.
Şirket resmi olarak Hack diline geçen sene geçiş yapmıştı. Şimdi ise bu Hack'in açık kaynak kodlarını herkese açmış bulunuyor.
Facebook Hack
Facebook Hack'in en önemli özelliği ise programlarda hatalara yol açan ve istenmeyen sonuçların ortaya çıkmasına sebep olan bug'ları direkt olarak engellemek. Konu ile ilgili olarak O'Sullivan, PHP sisteminin program çalışırken hiçbir müdahalede bulunamadığını ve site çalışır durumdayken sadece mantıksal hataların bulunabildiğini belirtti. Hack'de ise bu hataların önceden tespit edilebildiğini ve bu sayede hataların hızlı bir şekilde saptanabildiğini belirtti.
Facebook tarafından geliştirilen Hack, yine bir Facebook teknolojisi olan ve PHP kodlarını native kodlara dönüştüren HipHop Virtual Machine (HHVM) üzerinde çalışıyor. Bu da Facebook'un tamamen kendi sistemine döndüğü anlamına geliyor.
Facebook'un programlama dili olarak tanımlanan Hack, PHP dili ile oldukça benzer özellikler tanıyor. PHP ile aynı yazılım tabanında çalışacak olan Hack, bu sayede PHP geliştiricilerinin kolaylıkla öğrenebilmesini sağlayacak.
Hack dilini denemek ve daha fazla bilgi almak isterseniz hacklang.org adresini ziyaret edebilirsiniz.
0 yorum:
Yorum Gönder