Bahasa pengaturcaraan E

Falsafah

Keseluruhan bahasa ini direka dengan perancangan keselamatan komputer; ini dicapai kebanyakannya melalui kepatuhan kepada model penkomputeran berasaskan objek, yang dalam bentuk tulinnya mempunyai ciri-ciri yang menyokong pengkomputeraan selamat. Bahasa pengaturcaraan E dan perpustakaan piawaiannya menggunakan falsafah rekabentuk keselamatan berasaskan keupayaan sepenuhnya agar dapat membantu pengaturcaraan membina aturcara selamat dan membolehkan komponen aturcara bekerjasama sungguhpun ia saling tidak mempercayai sesama sendiri sepenuhnya. Bagi E, rujukan objek bertindak sebagai keupayaan, dengan itu keupayaan tidak menambah kepada kos asas pengkomputeran atau konsep. Sintak bahasa direka bagi memudahkan orang mengaudit bagi kecacatan keselamatan. Sebagai contoh, bidang lexical menghadkan jumlah kod yang perlu diperiksa bagi kesan pada pembolehubah yang tertentu. Sebagai contoh lain, bahasa ini menggunakan operator == bagi perbandingan dan operator := bagi tugasan; bagi mengelakkan kekeliruan, tidak terdapat operator =.

Model pengiraan

Dalam E, kesemua nilai adalah objek dan pengiraan dilakukan dengan menghantar pesanan kepada objek. Setiap objek dimiliki tangki vat (sama dengan proses pengiraan (computing process). Setiap tangki vat memiliki satu benang perlaksanaan, rangka susunan, dan satu barisan peristiwa. Pengaturcaraan diagihkan hanyalah penghantaran pesanan-pesanan kepada objek jauh (objek dalam tangki vat lain). Semua hubungan dengan pihak jauh adalah dienkod dengan sukar oleh perlaksanaan E. Pesanan yang bari tiba diletakkan dalam barisan peristiwa tangki; pemprosesan kitar peristiwa tangki yang memproses pesanan satu demi satu menurut masa ketibaan.
E mempunyai dua cara menghantar pesanan: panggilan segera dan hantar akhirnya. Panggilan segera adalah sama seperti fungsi biasa atau kaedah panggilan dalam bahasa tidak serentak: penghantar menunggu sehingga penerima selesai dan memulangkan nilai. Hantar akhirnya menghantar pesanan sementara mencipta pemegang bagi keputusan dikenali sebagai janji. Penghantar segera memproses menggunakan janji. Kemudian apabila penerima selesai dan menghasilkan keputusan, janji menyelesaikan keputusan. Oleh kerana hanya hantar akhirnya dibenarkan apabila berhubungan dengan objek jauh, deadlock tidak boleh berlaku. Dalam sistem teragih, mekanisma janji turut menimumkan kelewatan disebabkan kelesuan jaringan.

Sintak dan contoh

Sintak E menyerupai bahasa pengaturcaraan Java, sungguhpun ia turut menyerupai bahasa pengaturcaraan Python dan bahasa pengaturcaraan Pascal. Pembolehubah adalah jenisdata dan skop lexically. Bagaimanapun, tidak sebagaimana Java atau Python, E terbentuk sepenuhnya dari pengaturcaraan gambaran. Disini adalah contoh aturcara E mudah.

println("Hello, Dunia!")
Ini adalah fungsi rekursif bagi mengira faktoria bagi nombor, ditulis menggunakan E. Fungsi ditakrifkan menggunakan kata kunci def.

def factorial(n :int) :int {
  if (n == 0) {
    return 1
  } else if (n > 0) {
    return n * factorial(n-1)
  } else {
    throw("invalid argument to factorial: "+n)
  }
}
Dalam baris pertama, :int merupakan pengawal yang menghadkan argument dan hasil fungsi tersebut. Pengawal tidak sama dengan pengistiharan jenis; pengawal merupakan pilihan dan boleh menyatakan kekangan. :int pertama memastikan badan fungsi hanya baoleh mengendalikan kenyataan integer. Tanpa :int kedua di atas, fungsi ini tidak mampu memulangkan nilai. Kemampuan melihat dibahagian awal bahawa maklumat yang keluar dari fungsi memudahkan pengauditan keselamatan.