Mengapa pernyataan dalam banyak bahasa pemrograman diakhiri dengan titik koma?

130

Apakah ada alasan bahwa titik koma dipilih sebagai terminator garis alih-alih simbol yang berbeda?

Saya ingin mengetahui sejarah di balik keputusan ini, dan berharap jawabannya akan mengarah pada wawasan yang dapat memengaruhi keputusan di masa depan.

Seorang Coder
sumber
6
Erlang dan prolog menggunakan fullstops.
Dave Clarke
13
Saya ingin tahu berapa banyak bahasa pemrograman yang Anda ketahui. Ada banyak bahasa yang tidak menggunakan titik koma.
knivil
50
Saya berani bertaruh jawabannya akan menjadi sesuatu seperti "nilai ASCII dari titik koma sangat tahan lama bila digunakan sebagai karakter terakhir pada kartu punch 80 karakter."
Ryan Thompson
22
Pertanyaan Anda tidak cukup jauh. Pertanyaan sebenarnya adalah, “mengapa ada simbol sama sekali?”
Konrad Rudolph
5
Karena ada di deretan keyboard qwerty?
wim

Jawaban:

132

Dalam bahasa Inggris, titik koma digunakan untuk memisahkan item dalam daftar pernyataan, misalnya

Dia melihat tiga pria: Jamie, yang datang dari Selandia Baru; John, putra tukang susu; dan George, tipe pria kurus.

Saat memprogram Anda memisahkan sejumlah pernyataan dan menggunakan penghentian penuh dapat dengan mudah dikacaukan untuk titik desimal. Menggunakan tanda titik koma memberikan metode parse yang mudah untuk memisahkan masing-masing pernyataan program sambil tetap dekat dengan tanda baca bahasa Inggris normal.

Edit untuk ditambahkan
Pada hari-hari awal ketika memori mahal, pemrosesan lambat, dan bahasa pemrograman pertama sedang dirancang, ada kebutuhan untuk membagi program menjadi pernyataan terpisah untuk diproses. Beberapa bahasa mengharuskan setiap pernyataan ditempatkan pada garis sehingga carriage return dapat bertindak sebagai pembatas pernyataan. Bahasa lain memungkinkan format yang lebih bebas untuk tata letak teks dan karenanya diperlukan karakter pembatas tertentu. Karakter ini dipilih sebagai titik koma, kemungkinan besar karena kesamaan dengan penggunaannya dalam bahasa Inggris (ini harus menjadi anggapan; saya tidak ada di sana pada saat itu) dan karena tidak menghasilkan konflik dengan tanda baca lainnya tanda dan simbol yang diperlukan untuk tujuan sintaksis matematis atau lainnya.

Edit lagi
Kebutuhan akan beberapa karakter terminator kembali ke persyaratan untuk mem-parsing teks bahasa. Kompiler awal ditulis dalam bahasa assembly atau, dalam beberapa kasus, langsung dalam instruksi mesin biner buatan tangan. Memiliki karakter khusus yang mengidentifikasi akhir pernyataan dan membatasi potongan teks yang sedang diproses membuat pemrosesan lebih mudah. Seperti yang saya katakan di atas, bahasa lain telah menggunakan carriage return atau kurung. Algol, Pascal, Ada, BCPL, B, C, PL / M, dan keluarga bahasa lainnya menggunakan koma. Mengenai yang mana yang pertama kali menggunakan karakter khusus ini, saya tidak mengingat sejarah cukup jauh. Pilihan dan adopsinya masuk akal sebagai

  • Penggunaannya mencerminkan penggunaan dalam tanda baca bahasa Inggris yang normal.
  • Karakter lain (mis. Berhenti penuh) dapat membingungkan karena mereka sudah memiliki penggunaan umum (berhenti penuh juga digunakan sebagai titik desimal).
  • Karakter tanda baca yang terlihat memungkinkan tata letak kode format gratis.
  • Menggunakan karakter pembatas yang serupa dalam bahasa turunan atau yang lebih kemudian dibangun berdasarkan keakraban yang diperoleh oleh semua programmer yang telah menggunakan bahasa sebelumnya.

Sebagai komentar terakhir, saya pikir ada lebih banyak waktu yang dihabiskan untuk jawaban dan komentar ini daripada yang dihabiskan dalam memutuskan untuk menggunakan titik koma untuk mengakhiri pernyataan ketika merancang bahasa pertama yang menggunakannya dengan cara ini.

kamu
sumber
19
Tidak sepenuhnya benar. Tanda titik koma memisahkan kalimat menjadi blok: setiap blok harus menjadi kalimat yang berfungsi tetapi kami menggunakan tanda titik koma untuk menyatakan bahwa ada hubungan yang kuat antara dua kalimat. Itu setengah jalan antara koma dan berhenti penuh sehingga memang merupakan titik penghentian tetapi menghubungkan satu kalimat ke yang berikutnya. Kalimat di atas adalah: "Dia melihat tiga laki-laki; Jamie: yang datang dari Selandia Baru, John: putra tukang susu dan George: seorang lelaki yang kurus." Penggunaan Anda dari titik koma dapat diganti dengan koma. Mengabaikan topik tetapi intinya pada dasarnya sama; itu memecah pernyataan.
alex.p
40
@ alex.p sebenarnya penggunaan titik koma yang dapat diterima menggantikan koma ketika itu akan menyebabkan kalimat menjadi membingungkan, yang membuat ini benar.
Ryathal
13
Informasi penting tentang titik koma: theoatmeal.com/comics/semicolon
Ed James
7
@ alex.p: Tampaknya Anda mengatakan penggunaan Ian salah tetapi Anda mungkin hanya mengatakan penjelasannya tentang bagaimana kami menggunakan semi-titik dua tidak lengkap. Jika Anda mengatakan bahwa dia salah, maka Anda salah besar. Penggunaannya semi-titik dua sepenuhnya konvensional, dan saya kira jauh lebih umum daripada contoh yang Anda berikan. Jika Anda hanya mengatakan dia tidak memberikan penjelasan yang lengkap, maka saya tidak yakin mengapa itu benar-benar layak disebut.
iconoclast
17
@Ian "ini harus menjadi anggapan, saya tidak ada di sana pada saat itu" Anda melewatkan kesempatan yang sempurna untuk (dengan benar) menggunakan tanda titik koma di sana :)
Travis Christian
70

Banyak bahasa menggunakan sintaks yang dimodelkan setelah C (yang dimodelkan setelah B - terima kasih @Crollster). Seperti yang dapat dilihat di komentar, ada rantai panjang bahasa seperti itu ... B terinspirasi oleh PL / I, yang didahului oleh ALGOL dalam menggunakan ;sebagai pemisah.

Karena dalam C pernyataan terminator adalah ;, bahasa-bahasa ini mengikuti.

Adapun mengapa itu dipilih sebagai terminator pernyataan di C - mungkin karena penggunaannya dalam bahasa Inggris "untuk menunjukkan pernyataan saling tergantung" .

C juga ditemukan pada PDP-11 pada saat jumlah memori yang tersedia terbatas untuk set karakter, sehingga para penemu bahasa harus bekerja dalam batasan-batasan ini.

Oded
sumber
8
C hanya mengikuti konvensi menggunakan titik koma seperti yang digunakan oleh pendahulunya 'B'
Crollster
8
B baru saja mengikuti konvensi penggunaan titik koma seperti yang digunakan oleh pendahulunya 'PL / I' :)
Skomski
15
@Skomski - Yang mengikuti apa? Saya sedang menunggu kura-kura terakhir;)
Oded
26
-1; Ayo teman-teman, apakah kita semua sudah lupa ALGOL yang sangat berpengaruh? Itu memiliki titik koma sebagai pemisah pernyataan sebelum segala sesuatu yang Anda sebutkan. (Saya tidak tahu apakah itu mengambil ide dari tempat lain)
hugomg
13
@Oded - Saya pikir Anda akan menemukan Turtles sepanjang jalan . * 8 ')
Mark Booth
54

FORTRAN kereta bekas digunakan untuk menggambarkan pernyataan. COBOL menggunakan periode. LISP tidak menggunakan apa-apa, mengandalkan tanda kurung untuk semuanya. ALGOL adalah bahasa pertama yang menggunakan titik koma untuk memisahkan pernyataan. PASCAL mengikuti petunjuk ALGOL, menggunakan tanda koma untuk memisahkan pernyataan.

PL / I menggunakan titik koma untuk mengakhiri pernyataan. Ada perbedaan, dan itu mudah dilihat di PASCAL. Ada mengikuti petunjuk PL / I pada item yang satu ini, bukannya ALGOL.

Titik koma sebagai pemisah pernyataan atau terminator dengan cepat diterima oleh komunitas ilmu komputer sebagai notasi yang berguna, dan, sejauh yang saya tahu, setiap bahasa blok-terstruktur berikutnya mengikuti petunjuk ALGOL dan menggunakan tanda koma untuk memisahkan atau mengakhiri pernyataan.

Saya diberitahu bertahun-tahun yang lalu bahwa BCPL menggunakan titik koma DAN carriage return sebagai pemisah pernyataan / terminator, tetapi saya tidak pernah menggunakan bahasa itu sendiri dan tidak dapat memverifikasi ini. Pada titik tertentu, penggunaan carriage return untuk memisahkan atau mengakhiri pernyataan dijatuhkan dari keturunan BCPL. BCPL begat B, B begat C, C begat C ++, Java, D dan sejumlah hal yang kurang dipikirkan secara matang dibandingkan PASCAL dan Ada.

John R. Strohm
sumber
2
Perlu dicatat, bahwa penggunaan titik koma atau baris baru muncul kembali akhir-akhir ini. Javascript, Lua, Go dan Haskell semuanya memiliki titik koma implisit di baris baru jika secara sintaksis valid di sana. Dan tentu saja beberapa bahasa yang mempertahankan baris baru sebagai pemisah. Shell dan Python muncul di sini.
Jan Hudec
2
+1 untuk "jauh kurang dipikirkan dengan baik daripada PASCAL dan Ada"
Aditya
2
Algol 58 , pendahulu untuk Algol 60, menggunakan titik koma. Perhatikan bahwa pada saat itu, perbedaan sering dibuat antara bentuk publikasi bahasa dan bentuk input yang sebenarnya, karena perangkat input sangat terbatas: huruf besar saja, dll. Dikotomi itu tidak benar-benar berlaku untuk FORTRAN, tetapi benar dari sejumlah bahasa lain.
Dan Halbert
5
@kevincline: Apakah Anda menganggap Boeing 777 biasa digunakan? Setiap baris perangkat lunak avionik yang menerbangkan pesawat itu ditulis dalam Ada.
John R. Strohm
2
@kevincline Skype: ditulis dalam Delphi (Pascal.) Microsoft berusaha untuk mengubah ini setelah mereka mendapatkannya, tetapi mereka tidak dapat port dengan sukses, jadi sekarang mereka membeli lisensi Delphi. Pernah menonton TV di AS? Stasiun mungkin berjalan pada perangkat lunak oleh WideOrbit, yang ditulis dalam bahasa Delphi; mereka adalah pemimpin pasar dengan selisih yang sangat besar. Pernah ke taman hiburan? Ada kemungkinan besar bahwa sistem tiket ditulis dalam Delphi. Pascal ada di mana-mana; hanya saja itu memberikan keunggulan kompetitif yang kuat sehingga banyak orang mencoba untuk diam tentang hal itu sehingga pesaing mereka tidak mengetahuinya.
Mason Wheeler
14

Mengapa tidak ada simbol lain?

Beberapa bahasa telah menggunakan simbol lain - versi lama BASIC menggunakan titik dua sebagai gantinya, misalnya.

Mengabaikan beberapa pengecualian, saya pikir ada dua alasan utama. Yang pertama adalah bahwa Anda hanya mencari sesuatu yang tidak ambigu. Dalam parser biasa, jika Anda mengalami kesalahan yang cukup serius sehingga Anda tidak dapat melanjutkan parsing pernyataan saat ini, Anda biasanya mencoba untuk mendapatkan parser kembali disinkronkan dengan hanya melompat ke depan ke terminator pernyataan dan memulai kembali parser dari mulai dari pernyataan selanjutnya. Untuk itu, Anda menginginkan sesuatu yang biasanya tidak terjadi di tempat lain dalam kode, dan tanda titik koma adalah simbol dengan sedikit makna lain yang terlampir, sehingga cukup mudah untuk mendedikasikannya untuk tujuan ini.

Alasan kedua agak mirip, tetapi lebih ditujukan pada orang yang membaca / menggunakan kode. Sekali lagi, kembali ke fakta bahwa simbol yang sebenarnya Anda gunakan tidak terlalu berarti. Ada keuntungan substansial dalam keterbacaan yang diperoleh dari penggunaan simbol yang biasa dilihat pembaca Anda untuk tujuan tertentu, kapan dan jika memungkinkan. Itu tidak berarti bahwa C adalah satu-satunya sintaks yang sempurna dan yang lainnya harus mengikutinya dengan rendah hati, tetapi itu berarti bahwa cukup banyak orang yang akrab dengan gaya sintaksis yang bahasa samar-samar serupa mendapatkan banyak (dan kehilangan sangat sedikit) dengan mengikuti kira-kira sintaksis yang sama di mana ia bisa.

Saya perhatikan bahwa ini hampir seperti merancang hampir semua program lain. Jika saya menulis sebuah program yang menggunakan beberapa jenis windows, saya akan mencoba untuk hanya menggunakan fitur asli platform target. Banyak keputusan yang mewujudkan sebagian besar akan sewenang-wenang, dan dapat dilakukan secara berbeda tanpa kehilangan fungsionalitas yang besar - tetapi sama-sama, mengubahnya tanpa keuntungan substansial dalam fungsionalitas hanya membingungkan pengguna tanpa mencapai sesuatu yang bermanfaat. Prinsip dasar yang sama berlaku untuk "apa yang harus mengakhiri (atau memisahkan) pernyataan dalam bahasa?" sebagai "seperti apa tampilan bilah gulir", atau "bagaimana seharusnya kontrol pohon bekerja?" Dalam semua kasus ini, keputusannya sebagian besar arbitrer, dan keseragaman memberikan manfaat besar dalam dan dari dirinya sendiri.

Saya akan menambahkan bahwa hal yang sama terjadi di banyak bahasa, hanya dengan cara yang sebagian besar dari kita sudah terbiasa sebelum pemrograman sehingga beberapa orang berpikir tentang hal itu. Mengapa semua orang menggunakan "+" untuk mengindikasikan penambahan, atau "-" untuk menunjukkan pengurangan? Karena bentuk simbol tidak terlalu penting, tetapi semua orang yang setuju untuk menerapkan makna yang sama untuk setiap simbol sangat penting.

Jerry Coffin
sumber
Poin yang sangat bagus (+1), meskipun saya tidak bisa setuju dengan bagian "kebanyakan arbitrer". Saya pikir pasti ada beberapa hal yang lebih intuitif dan yang lain kurang intuitif. Dalam penggunaan Windows X untuk menutup windows, ada beberapa (mungkin hanya samar-samar terhubung) simbol yang sudah ada yang digunakannya. Dan yang pasti dalam penggunaan warna OS X ada simbolisme kuat yang digunakannya. (Saya mengabaikan sejenak bahwa M $ Windows mungkin telah mencuri X dari X Windows, karena saya tidak ingat apa yang digunakan.)
iconoclast
3
@Brandon: Saya tentu tidak bermaksud mengatakan bahwa semua bagian dari desain GUI adalah arbitrer - mungkin saya seharusnya mengatakan "some" daripada "most". Bukan X yang menentukan bentuk tertentu untuk ikon "tutup jendela" - yang akan tergantung pada pengelola jendela individual.
Jerry Coffin
Seingat saya, BASIC Dartmouth yang asli hanya menggunakan carriage return untuk mengakhiri pernyataan (yaitu, satu pernyataan per baris). SAYA BERPIKIR banyak pernyataan dalam satu baris, dipisahkan oleh titik dua, adalah ekstensi Microsoft.
John R. Strohm
7

Titik koma awalnya diusulkan dalam Algol 60 sebagai pemisah pernyataan , bukan terminator.

Sebelum Algol 60, satu-satunya bahasa pemrograman tingkat tinggi yang ada adalah Fortran, yang mengharuskan setiap pernyataan berada pada baris terpisah. Pernyataan yang mencakup banyak baris, seperti do-loop, dianggap aneh, dan dianggap sebagai 'blok pernyataan'.

Para perancang Algol 60 menyadari bahwa pernyataan memerlukan struktur hierarkis (jika-kalau-kalau-itu, lakukan-loop, pernyataan kasus dll) dan mereka bisa bersarang di dalam satu sama lain. Jadi, ide setiap pernyataan yang berada di jalur yang terpisah tidak masuk akal lagi. Komposisi berurutan dari pernyataan bentuk S1; S2; ...; Sn di opsional tertutup mulai - akhir kurung disebut pernyataan majemuk , dan masuk ke dalam struktur hirarkis laporan yang dibayangkan oleh Algol 60. Jadi, di sini, titik koma jelas pernyataan pemisah , bukan sebuah terminator.

Ini memunculkan masalah dalam praktik. Algol 60 juga memiliki "pernyataan kosong" yang dilambangkan dengan tidak menulis apa pun. Jadi, orang dapat menulis " mulai S1; akhir " di mana tanda koma muncul seolah-olah itu mengakhiri S1. Tetapi kompiler Algol 60 benar-benar memperlakukannya sebagai pemisah antara S1 dan pernyataan kosong tak terlihat yang mengikutinya. Kehalusan ini sedikit banyak bagi programmer praktis. Setelah terbiasa dengan bahasa yang berorientasi garis seperti Assembly dan Fortran, mereka benar-benar menganggap titik koma sebagai terminator untuk pernyataan. Ketika program ditulis, biasanya titik koma diletakkan di akhir pernyataan, seperti:

    a [i]: = 0;
    i: = i +1

dan titik koma benar-benar tampak seperti terminator untuk pernyataan pertama. Jika pemrogram memperlakukan titik koma sebagai terminator, maka pernyataan seperti ini akan memberikan kesalahan sintaksis:

    jika i> 0 maka
      a [i]: = 0;
    lain
      a [i]: = 1;

karena titik koma mengakhiri "jika" dan, jadi, "yang lain" menjadi menggantung. Pemrogram benar-benar bingung.

Jadi, PL / I, yang merupakan penerus IBM untuk garis berorientasi Fortran, memutuskan untuk membuat titik koma sebagai terminator pernyataan daripada pemisah. Programmer senang dengan pilihan itu. Mayoritas bahasa pemrograman mengikutinya. (Pascal menolak tren itu, tetapi penggantinya Ada menyerah.)

[Catatan ditambahkan: Artikel Wikipedia tentang perbandingan bahasa pemrograman memiliki tabel yang bagus yang merangkum bagaimana titik koma diperlakukan dalam berbagai bahasa pemrograman.]

Uday Reddy
sumber
6

Ini adalah pekerjaan menebak yang murni, tetapi melihat keyboard QWERTY standar terbatas pada nilai-nilai ASCII, karakter alami untuk penghentian / pemisahan adalah.!?::; dan carriage kembali. dari mereka!?: harus segera didiskualifikasi karena mengambil beberapa kunci dan pemutusan pernyataan akan menjadi hal yang sangat umum. Periode akan didiskualifikasi karena mereka mudah dikacaukan dengan titik desimal yang akan membuatnya tidak perlu rumit untuk menjadi terminator karena ruang komputer awal yang terbatas. carriage return akan didiskualifikasi setelah garis kode berpotensi lebih panjang daripada yang dapat ditampilkan pada satu baris pada layar, sehingga akan lebih sulit untuk membaca program ketika garis harus digulir secara horizontal, atau membutuhkan karakter tambahan untuk membuat kelanjutan pada baris berikutnya yang lagi-lagi menambah kompleksitas. ini meninggalkan, dan; sebagai opsi, dari mereka, digunakan lebih sering dalam tulisan dibandingkan dengan; jadi titik koma dipilih karena lebih mudah untuk diketik, kurang membingungkan karena menambah makna pada karakter dengan makna terbatas dan kurang rumit karena kasus khusus tidak benar-benar ada dengan penggunaannya.

Titik koma dipilih karena itu adalah karakter terbaik berdasarkan kemalasan dan kesederhanaan.

Ryathal
sumber
Anda punya poin bagus di sini; Saya hanya akan menuliskan kembali kata "terpilih" (yang sulit dibuktikan) untuk sesuatu seperti "... Tanda titik koma telah menang karena itu adalah karakter terbaik berdasarkan kemalasan dan kesederhanaan"
gnat
2
Hampir tidak. Titik koma sebagai terminator / pemisah pernyataan dimulai di ALGOL (1958), yang mendahului ASCII (pekerjaan dimulai tahun 1960, rilis pertama 1963, rilis utama 1967, terakhir diperbarui tahun 1986).
John R. Strohm
@ JohnR.Strohm baik itu berita bagi saya, tapi semua ini adalah sejarah kuno bagi saya
Ryathal
6
Ini adalah teori yang hebat, tetapi kenyataannya adalah bahwa keypunches memerlukan tombol shift untuk sampai ke titik koma sampai input keyboard modern muncul di tahun 70-an. (Ada beberapa foto bagus di dekat bagian bawah artikel wiki: en.wikipedia.org/wiki/Keypunch ) Kemungkinan besar hanya berdasarkan aturan bahasa Inggris alami, sebuah mode yang sangat populer pada saat yang sama. (Saya akan memasukkan semua bahasa 50-an: ALGOL, FORTRAN, COBOL, dan SQL, tidak termasuk LISP.) Semi-kolon ALGOL hanyalah salah satu dari banyak konvensi bahasa Inggris yang digunakan, yang kemudian dikembangkan BASIC lebih jauh.
SilverbackNet
@ SilververbackNet itulah sebabnya "tebakan murni" mungkin seharusnya tidak menjadi dasar jawaban di sini.
user1717828
6

Ini sebagian besar pilihan yang sewenang-wenang. Beberapa bahasa telah membuat pilihan lain. COBOL mengakhiri pernyataan dengan .karakter tersebut. FORTRAN, BASIC, dan Python umumnya mengakhiri pernyataan dengan baris baru (dengan sintaks khusus untuk pernyataan multi-baris). Dan Lisp mengurung pernyataannya dengan tanda kurung.

Alasan utama ;sangat populer sebagai pemisah pernyataan / terminator adalah bahwa sebagian besar bahasa populer saat ini didasarkan pada ALGOL , yang menggunakan konvensi itu.

bukannya simbol yang berbeda?

Simbol apa lagi yang bisa Anda pilih?

Karakter ASCII # $ @ [] ^ _ `{|} ~ tidak selalu ada dalam pengkodean karakter awal seperti ISO 646 .

Karakter ()*+-/<=>biasanya digunakan sebagai operator matematika dan akan membuat ambiguitas penguraian jika digunakan sebagai terminator pernyataan.

product = a * b *  // If '*' were a statement terminator,
c * d *            // Are there two factors, or four?

Masalah serupa akan berlaku untuk 'dan ", yang biasanya digunakan sebagai pembatas string; ,, yang biasanya digunakan untuk memisahkan argumen fungsi, dan ., yang biasanya digunakan sebagai titik desimal (atau sebagai pembatas dalam konstruksi seperti some_struct.some_field).

Daun itu !%&:;?.

Memilih !atau ?mungkin tidak akan menyebabkan kesulitan teknis, tetapi makna bahasa Inggris mereka akan memberikan suasana yang salah untuk program ini.

print(x)?  # Yes, you should.
           # It's an IMPERATIVE language; stop questioning my commands.
print(x)!  # OK!  You don't have to shout!

Itu &akan menjadi pilihan yang lebih masuk akal sebagai pemisah pernyataan (bukan terminator), karena

do_thing_a() &
do_thing_b()

dapat dibaca sebagai perintah untuk melakukan hal A dan kemudian melakukan hal B. Tetapi sebagian besar bahasa dengan &operator menggunakannya sebagai logika atau bitwise DAN sebagai gantinya.

The %tanda dapat menyebabkan kebingungan dalam pernyataan seperti interest_rate = 2.99%(yang akan mengatur variabel 2.99bukan yang diharapkan 0.0299). Tentu saja, makna matematika yang terkenal dari %tidak menghentikan C dari menggunakannya sebagai operator sisanya.

Sehingga pergi :dan ;.

: adalah pilihan yang masuk akal, dan memang digunakan sebagai pemisah pernyataan intra-line di sebagian besar dialek BASIC.

Tetapi ;memiliki tata bahasa Inggris di sisinya; dapat digunakan untuk memisahkan klausa dalam sebuah kalimat.

dan04
sumber
3

Daripada mencoba menjawab pertanyaan utama Anda, saya pikir lebih baik fokus pada pertanyaan implisit Anda:

Saya ingin mengetahui sejarah di balik keputusan ini, dan berharap jawabannya akan mengarah pada wawasan yang dapat memengaruhi keputusan di masa depan dalam desain dan implementasi bahasa pemrograman.

Jika Anda ingin belajar tentang desain bahasa pemrograman dan sejarah implementasi, dan mendapatkan lebih banyak wawasan tentang prosesnya, maka proses dari Sejarah Konferensi Bahasa Pemrograman adalah tempat yang sangat baik untuk memulai. (Saya pikir Anda akan memerlukan keanggotaan ACM untuk dapat mengakses proses.)

Mengapa pernyataan dalam banyak bahasa pemrograman diakhiri dengan titik koma? Apakah ada alasan bahwa titik koma dipilih sebagai terminator garis alih-alih simbol yang berbeda?

Mengambil pertanyaan utama Anda sebagai contoh pertanyaan yang mungkin ingin Anda coba jawab dengan membaca proses HOPL, saya ingin menawarkan poin berikut: orang yang merancang bahasa pemrograman baru biasanya melakukannya karena mereka menganggap yang mereka tahu adalah entah bagaimana rusak / kurang. Bahasa baru mereka, di satu sisi, dirancang untuk memperbaiki kekurangan ini. Di sisi lain, perancang bahasa juga akan menyalin elemen desain dari bahasa lain yang mereka anggap baik, atau mereka tidak mengubah elemen yang mereka tidak mengalami masalah dengannya.

Terutama bagian terakhir yang penting: alih-alih mencoba mencari tahu bahasa pemrograman mana yang pernah menjadi yang pertama menggunakan titik koma sebagai terminator dan mengapa banyak bahasa pemrograman lain disalin, Anda mungkin akan belajar lebih banyak dengan melihat bahasa yang tidak menyalin. saya t. Misalnya, sementara Smalltalk mengambil banyak inspirasi dari Simula, itu tidaksalin sintaksinya dan khususnya penggunaan titik koma sebagai terminator pernyataan. Itu mengubah terminator (separator benar-benar) menjadi berhenti penuh, dan menggunakan titik koma untuk sesuatu yang lain. Sebaliknya, bahasa pertama yang pernah menggunakan titik koma sebagai terminator pernyataan mungkin memiliki alasan untuk mengubah ini dari apa yang digunakan dalam bahasa yang datang sebelumnya. Mungkin juga bahwa itu adalah bahasa pertama yang memperkenalkan seluruh konsep terminator pernyataan (atau melakukannya secara independen dari bahasa lain) dan bahwa titik koma digunakan untuk beberapa alasan yang sekarang hilang waktu. (Saya menduga yang terakhir adalah kasus di sini, karena tidak ada dari penjawab lain yang mampu menggali kutipan dari orang yang memperkenalkan tanda titik koma daripada menawarkan dugaan retrofit tentang mengapa tanda titik koma merupakan pilihan yang baik.) Tetapi untuk menyatakan kembali saya titik, Saya pikir Anda akan belajar lebih banyak dengan melihat mengapa perancang bahasa mengubah sesuatu daripada mengapa mereka menyalin / menyimpannya. Ketika orang mengubah hal-hal yang biasanya mereka inginkan atau harus menjelaskan perubahan itu, sementara mereka tidak melakukannya ketika menyalin atau menjaga hal-hal yang sama karena “mengapa kita mengubahnya? itu hanya caranya! ”

Rinzwind
sumber
2

Ini tentang visibilitas.

Pemisah pernyataan awal adalah '.' seperti pada COBOL dan jalur baru, carriage return dalam FORTRAN.

CR terbukti membatasi dalam hal itu membuat sulit untuk mengalirkan pernyataan melalui beberapa baris.

Berhenti penuh menyebabkan masalah yang lebih menarik. Ketika Anda membaca teks bahasa Inggris, otak Anda memproses penghentian penuh pada tingkat subliminal, Anda sadar bahwa sebuah kalimat telah berakhir dan Anda dapat berhenti sejenak untuk bernafas tetapi Anda tidak benar-benar memperhatikannya. itu menandakannya. Juga dalam banyak font '.' adalah karakter sekecil mungkin yang terkadang diterjemahkan sebagai satu piksel. Hilang atau periode ekstra menjadi penyebab kesalahan paling umum dalam program COBOL.

Jadi belajar dari kesalahan awal ALGOL memilih terminator tertentu yang akan memungkinkan pernyataan mengalir melalui beberapa baris, dan, memilih satu yang terlihat dan mudah diperhatikan oleh pembaca manusia. Semi-kolon menjadi besar dan tidak biasa dalam bahasa Inggris yang umum untuk tidak diproses secara tidak sadar.

James Anderson
sumber
1

Pemahaman saya bahwa itu dipilih karena ada kebutuhan untuk terminator pernyataan eksplisit selain dari carriage-return / new-line. Kembali pada zaman layar 80-kolom, sebenarnya memiliki satu baris pembungkus kode melintasi beberapa baris sudah cukup umum sehingga menggunakan \ r atau \ n untuk terminator pernyataan tidak akan berfungsi.

Titik koma hanya nyaman karena mereka tidak digunakan dalam pernyataan logika / matematika. Dengan demikian, mereka tidak bertentangan dengan isi pernyataan yang sebenarnya sampai tingkat yang signifikan.


Secara pribadi, saya pikir penggunaan terus-menerus dari titik koma, bersama dengan persyaratan gaya untuk menjaga garis di bawah 80 karakter, terus terang bodoh dan ketinggalan zaman. Bahasa seperti python telah menunjukkan secara luas bahwa Anda dapat menulis mudah dimengerti, kode ringkas lebih mudah tanpa mereka. Juga, jika Anda memiliki masalah dengan garis yang lebih panjang dari 80 karakter, Anda memerlukan monitor yang lebih besar.

Nama palsu
sumber
3
Kembali di Abad Kegelapan, tidak ada "layar 80-kolom". Ada 80 kartu yang dilubangi, dan ada printer dengan jumlah kolom yang berbeda. (Sekitar 130 atau lebih umum.) FORTRAN mengakhiri pernyataan di akhir kartu, tetapi mengizinkan kartu lanjutan untuk melanjutkan pernyataan. Kartu lanjutan ditandai oleh karakter yang ditekan pada kolom 6 kartu. (Karakter apa pun akan berfungsi. Bergantung pada konvensi lokal, Anda biasanya akan melihat tanda + atau satu digit, angka yang dihitung untuk beberapa kartu kelanjutan.)
John R. Strohm
1
Bahasa seperti Python tidak mungkin untuk komputer yang ada pada awal C. Menggunakan karakter terminasi pernyataan membuat parsing lebih sederhana, dan itu sangat penting untuk mengurangi memori dan beban CPU dari kompiler dekade yang lalu. Terutama pada komputer-komputer tempat Anda membayar waktu CPU pada detik.
Gigatron
@Gigatron - Saya hanya merujuk pada penggunaan carriage return untuk mengakhiri pernyataan, bukan pada aspek tingkat tinggi dari python.
Nama Palsu
1
@Gatron, Anda mungkin ingin melihat pada LISP, dan terutama sejarah awal pada IBM 704. Anda mungkin akan terkejut dengan apa yang bisa dilakukan oleh Orang Dahulu, bahkan bekerja dengan pisau batu dan kulit beruang.
John R. Strohm
1
@Gigatron: FORTRAN dijalankan pada komputer yang sama, dan ia menggunakan baris baru untuk memisahkan pernyataan (dengan sintaks khusus untuk pernyataan multi-baris).
dan04
0

Berikut adalah dua pertanyaan: Mengapa ALGOL mendapat titik koma dan mengapa bahasa lain mengejarnya.

Pertanyaan pertama sudah dijawab dengan berbagai cara di sini.

Sebagai yang kedua, ALGOL sangat banyak digunakan sebagai bahasa pseudocode untuk penulisan algoritma. Jadi, titik koma segera menjadi alami bagi pengguna bahasa yang berbeda. Dan tentu saja mereka dibawa ke bahasa yang lebih muda.

Gangnus
sumber
0

Saya mungkin salah, tapi saya pikir ini ada hubungannya dengan fakta bahwa di banyak assembler, titik koma digunakan untuk memulai komentar, biasanya dimasukkan setelah instruksi. Semuanya setelah sebuah ;komentar, dan tidak lagi menjadi bagian dari instruksi itu sendiri.

Lalu ada kebutuhan untuk menghentikan instruksi ketika Anda mengetikkannya dalam bahasa juru bahasa. Instruksi singkat (misalnya ekspresi matematis) dapat diakhiri dengan hanya menekan tombol Enter, memberi tahu penerjemah bahwa ekspresi siap untuk dihitung dan menghasilkan hasil. Tetapi kadang-kadang seseorang ingin memasukkan beberapa baris kode untuk instruksi, jadi salah satu cara untuk mencapai itu adalah dengan menggunakan beberapa karakter khusus sebagai terminator instruksi daripada hanya bergantung pada tombol Enter. Dengan cara ini, pengguna dapat memasukkan lebih banyak baris kode sekaligus, karena Enter belum mengirimkannya ke penerjemah. Hanya ketika penerjemah menemukan karakter terminating dalam baris yang dimasukkan dengan Enter, akhirnya akan menjalankannya dan menghitung hasilnya.

Sekarang gabungkan kedua hal ini bersama-sama, dan tanda titik koma tampaknya menjadi pilihan yang jelas untuk karakter penghentian: ia memberi tahu di mana bagian instruksi berakhir dan bagian komentar dimulai, jadi ketika penerjemah menjumpainya dalam sebuah garis, ia tahu bahwa ia dapat memerah semua baris dari ekspresi yang disangga sejauh ini dan jalankan, karena instruksi baru saja berakhir, sekarang kita berada di komentar (well, setidaknya sampai akhir baris ini, karena baris berikutnya akan dimulai dalam kode mode lagi, memulai ekspresi / instruksi baru).

Tentu saja ini mengasumsikan bahwa itu benar-benar titik koma yang telah digunakan untuk komentar oleh orang yang datang dengan ide ini untuk menggunakannya kembali sebagai terminator instruksi. Kalau itu karakter lain, kita mungkin berakhir dengan terminator instruksi yang berbeda.

Inb4: Tidak, ini bukan akun historis. Saya tidak punya bukti bahwa ini adalah cara sebenarnya titik koma menjadi hidup. Itu hanya bagaimana saya membayangkan itu mungkin terjadi.

BarbaraKwarc
sumber
-1

Sebagian besar bahasa menggunakan semi-kolon karena sudah banyak digunakan untuk tujuan itu dan perubahan tidak masuk akal.

Dan mempertimbangkan bahasa pertama untuk membuat pilihan itu, Anda harus mempertimbangkan apa alternatifnya. Saat mendesain bahasa, Anda ingin karakter yang diperlukan tersedia, dan rangkaian karakter saat ini diberi kode pada 6 bit, seringkali dengan beberapa pola yang disediakan, seringkali dengan beberapa karakter yang tidak ditetapkan dengan jelas (untuk kejadian selanjutnya, pikirkan tentang varian nasional ISO-646 - varian AS dikenal dengan nama ASCII - yang menggunakan kembali kode untuk karakter "umum" seperti [, #atau $, dan melihat efeknya dalam konteks di mana hanya ada setengah posisi kode posisi tersedia dan surat dan digit memesan lebih dari setengahnya).

Mungkin tidak ada karakter lain yang dapat digunakan sebagai pemisah pernyataan secara intuitif ( .mungkin sudah satu-satunya penantang serius untuk kriteria itu) dan tanpa memperkenalkan kesulitan lexing atau parsing pada saat teori parsing dan lexing masih dalam penjabaran ( .sekarang keluar dari pertanyaan karena penggunaannya dalam bilangan real).

Pemrogram
sumber
-1

Alasan lain mengapa menggunakan titik koma adalah karena itu adalah salah satu karakter yang tidak kita butuhkan atau gunakan lebih sering.

Asumsikan kita lebih sering menggunakannya sebagai nama variabel atau sesuatu dan jika titik koma akan digunakan sebagai kata kunci atau sebagai operator, itu akan menjadi konflik simbol untuk kompiler, maka penting untuk menggunakan simbol yang tidak sering digunakan dalam pengkodean.

Saya percaya bahasa pemrograman gaya C membuatnya populer dan kemudian penulis bahasa pemrograman baru tidak ingin menemukan kembali roda dan mereka terus menggunakannya, sampai sekarang.

Basav
sumber