Tahun-tahun awal FORT

gambar

KDPV diambil dari sini

pengantar


FORT adalah bahasa komputer yang sederhana dan alami. Ini telah menerima distribusi yang signifikan di mana efisiensi tinggi diperlukan. Pada tahun 60an ia menempuh jalan pengembangan dari universitas melalui bisnis ke laboratorium. Ini adalah kisah tentang bagaimana penerjemah sederhana memperluas kemampuannya dan mampu menjadi bahasa pemrograman dan sistem operasi yang lengkap.

Karya ini ditulis untuk konferensi tentang sejarah bahasa pemrograman - HOPL II. Dia akhirnya ditolak, mungkin karena gaya presentasinya.

FORT menyebar di tahun enam puluhan di Amerika - di universitas, bisnis dan sains, bersama dengan bahasa maju lainnya. Pada saat itu saya adalah satu-satunya programmer di dalamnya, sampai akhir periode ini tidak memiliki nama. Semua yang dijelaskan di sini dipulihkan dari memori, dokumentasi terpisah, dan daftar program yang bertahan.

FORT secara keseluruhan hampir tidak orisinal, tetapi merupakan kombinasi komponen yang unik. Saya berterima kasih kepada orang-orang dan organisasi yang memungkinkan saya untuk mengembangkannya - seringkali tanpa menyadarinya sendiri. Dan saya berterima kasih atas minat Anda untuk membuat Anda membacanya.

FORT adalah bahasa komputer yang sederhana dan alami. Hari ini [1991 - sekitar. trans.] Ini dianggap sebagai bahasa pemrograman kelas dunia. Fakta bahwa ia mencapai tingkat seperti itu tanpa dukungan industri, universitas, atau pemerintah adalah konsekuensi dari efektivitas, keandalan, dan keserbagunaannya. Fort adalah bahasa yang dipilih ketika efektivitasnya lebih penting daripada popularitas bahasa lain. Ini adalah kasus yang sering terjadi di bidang-bidang praktis seperti sistem kontrol dan komunikasi.

Banyak organisasi FORT dan banyak perusahaan kecil menawarkan sistem, aplikasi, dan dokumentasi. Di Amerika Utara, Eropa dan Asia, konferensi tahunan diadakan. Draf standar ANSI [ANS 1991] akan disajikan segera.

Tidak ada buku tentang FORT yang sepenuhnya menggambarkan "seleranya". Saya pikir yang terbaik masih yang pertama dari mereka - "Starting Forth" oleh Leo Brodie [tersedia, misalnya, di sini - https://www.forth.com/starting-forth/ - kira-kira. diterjemahkan.] .

FORT klasik yang kita bahas memberikan dukungan minimal yang cukup bagi programmer untuk mengembangkan bahasa terbaik untuk aplikasinya. Ini dimaksudkan untuk lingkungan seperti workstation, termasuk keyboard, display, komputer dan disk drive [pada masa itu disk drive sering kali eksternal, jadi penulis hanya mendaftar komponen dari sistem komputer minimal - kira-kira. diterjemahkan.] .

FORT pada dasarnya adalah bahasa teks bebas konteks. Ini memungkinkan Anda untuk menggabungkan "kata", dipisahkan oleh spasi, untuk membangun "kata" baru. Sekitar 150 dari kata-kata ini membentuk sistem yang menyediakan:

         SAO  1958  
        SLAC  1961   
         RSI  1966    ,   , 
     Mohasco  1968  ,  , ,  ,
                    
        NRAO  1971   *,    

* Kode bordir adalah metode penyusunan program yang merupakan array panggilan subprogram, lihat https://en.wikipedia.org/wiki/Threaded_code - approx. perev.

Sistem seperti itu mengandung 3 hingga 8 kilobyte kode program yang disusun dari 10-20 halaman kode sumber. Ini dapat dengan mudah dikembangkan oleh satu programmer, bahkan pada komputer dengan sumber daya terbatas.

Teks ini tentu menggambarkan karier saya; tapi dia dikandung sebagai "biografi" FORT. Saya akan membahas fitur-fitur FORT yang tercantum di atas dan nama-nama "kata-kata" yang terkait dengannya. Arti dari banyak "kata" jelas. Beberapa membutuhkan deskripsi, dan beberapa melampaui lingkup pekerjaan ini.

Bagian dari kamus bahasa FORT yang akan dipertimbangkan tercantum di bawah ini:


     WORD  NUMBER  INTERPRET  ABORT
     HASH  FIND  '  FORGET
     BASE  OCTAL  DECIMAL  HEX
     LOAD  EXIT  EXECUTE  (
 (  )
     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE  DUMP
 
     DUP  DROP  SWAP  OVER
     +  -  *  /  MOD  NEGATE
     ABS  MAX  MIN
     AND  OR  XOR  NOT
     0<  0=  =
     @  !  +!  C@  C!
     SQRT  SIN.COS  ATAN  EXP  LOG
 
     :  ;  PUSH  POP  I
 (   )
     BLOCK  UPDATE  FLUSH  BUFFER  PREV  OLDEST

     CREATE  ALLOT  ,  SMUDGE
     VARIABLE  CONSTANT
     [  ]  LITERAL  ."  COMPILE
     BEGIN  UNTIL  AGAIN  WHILE  REPEAT
     DO  LOOP  +LOOP  IF  ELSE  THEN


MIT, SAO, 1958


Waktu yang paling menyenangkan adalah Oktober 1957, ketika Sputnik diluncurkan [satelit Sputnik-1 - sekitar. diterjemahkan.] . Saya adalah mahasiswa tahun kedua di MIT dan bekerja paruh waktu di SAO (Smithsonian Astrophysical Observatory, sebanyak 16 suku kata, mimpi buruk) di Harvard. Observatorium bertanggung jawab atas pelacakan optik satelit - pengamatan visual menggunakan bulan [artinya Project Moonwatch - https://en.wikipedia.org/wiki/Operation_Moonwatch - approx. terjemahan.] dan kamera pelacakan satelit [ Kamera Baker-Noon - https://en.wikipedia.org/wiki/Schmidt_camera#Baker-Nunn - approx. perev.]. Terkejut, mereka merekrut siswa untuk mencari lintasan pada kalkulator desktop Friden. John Gaustad memberi tahu saya tentang IBM EDPM 704 di MIT dan meminjamkan saya manual FORTRAN II. Akibatnya, program pertama saya, Ephemeris 4, meninggalkan saya tanpa pekerjaan.

Sekarang, sudah dalam peran seorang programmer, saya bekerja dengan George Veis untuk menerapkan metode kuadrat terkecilnya untuk menentukan parameter orbit, posisi diam, dan akhirnya untuk menentukan bentuk Bumi. Tentu saja, "pekerjaan paruh waktu" ini memakan waktu setidaknya 40 jam, namun, ijazah saya sudah terlindungi.

John McCarthy mengajar kursus LISP yang sangat baik di MIT. Kursus ini adalah pengantar saya untuk rekursi dan ragam bahasa pemrograman yang luar biasa. Wil Baden mencatat bahwa LISP untuk kalkulus lambda sama dengan FORT untuk notasi postfix Lukasewcleicz [notasi Lukashevich, juga dikenal sebagai notasi Polandia terbalik - kira-kira. diterjemahkan.] .

Kapal selam itu juga relevan, dengan analisis aneh dari kanan ke kiri. Meskipun saya mengaguminya dan meniru operatornya, saya tidak yakin mereka membuat set yang optimal.

Pemrograman pada tahun lima puluhan lebih keras daripada hari ini. Kode sumber saya mengambil 2 kartu punch. Untuk mendapatkan mereka melalui mobil, saya harus bermain-main, dan pada dasarnya saya melakukannya sendiri. Pertemuan memakan waktu setengah jam (seperti di C), tetapi waktu komputer yang terbatas berarti hanya satu peluncuran per hari, kecuali, mungkin, untuk shift ketiga.

Jadi saya menulis juru bahasa sederhana yang membaca kartu dengan memasukkan data dan mengontrol program. Dia juga mengendalikan komputasi. Untuk masing-masing dari lima parameter orbit, ada persamaan empiris untuk memperhitungkan pergeseran atmosfer dan penyimpangan bentuk Bumi dari bola. Dengan cara ini, saya dapat membuat berbagai persamaan untuk beberapa satelit tanpa mengkompilasi ulang program.

Faktor-faktor seperti P2 (polinomial tingkat dua) dan S (sinus) berpartisipasi dalam persamaan ini. Sebagian besar waktu, komputasi floating-point 36-bit mengambil, sehingga biaya overhead rendah. Tumpukan data tidak diperlukan, tapi saya mungkin tidak tahu tentang itu.

Maka kisah penerjemah FORT dimulai - dari kata-kata

WORD  NUMBER  INTERPRET  ABORT


Mereka belum direkam dengan kata-kata, karena mereka adalah nomor operator.

INTERPRET menggunakan WORD untuk membaca kata yang dipisahkan oleh spasi, dan NUMBER untuk mengonversi kata [angka dalam catatan teks - kira-kira. terjemahkan.] dalam bentuk biner (dalam hal ini, dengan titik tetap). Input seperti itu dalam format bebas tidak biasa, tetapi lebih efisien (lebih kecil dan lebih cepat), dan lebih dapat diandalkan. Input gaya Fortran diformat ke dalam kolom tertentu, dan kesalahan ketik menyebabkan banyak penundaan.

Penerjemah ini menggunakan konstruksi IF ... ELSE IF yang disandikan dalam FORTRAN untuk mencocokkan setiap karakter. Semua penanganan kesalahan hanya mengganggu pelaksanaan program. Kemudian, seperti sekarang, kata ABORTmenanyakan kepada pengguna apa yang harus dilakukan. Karena kartu input diberi nomor dalam urutan bacaan, Anda dapat mengetahui di mana kesalahannya.

Stanford, SLAC, 1961


Pada 1961, saya datang ke Stanford untuk belajar matematika. Meskipun Stanford menciptakan departemen ilmu komputernya sendiri, saya lebih tertarik pada komputasi. Saya terkesan bahwa mereka bisa (berani?) Menulis kompiler ALGOL mereka sendiri. Namun - nasib membawa saya ke komputer Burroughs B5500. Saya kembali direkrut untuk bekerja paruh waktu di SLAC (Stanford Linear Accelerator, 10 suku kata), menulis kode untuk mengoptimalkan retensi berkas dalam akselerator elektron tiga kilometer mendatang. Ini adalah aplikasi alami dari metode kuadrat terkecil (di mana saya memiliki pengalaman) ke ruang fase. Hal Butler bertanggung jawab atas grup kami, dan program TRANSPORT kami sukses.

Aplikasi lain dari metode kuadrat terkecil adalah program CURVE, yang ditulis pada tahun 1964 di ALGOL. Itu adalah program universal untuk pemilihan data nonlinier dengan koreksi diferensial. Ketelitian statistiknya memberikan analisis terperinci tentang konsistensi model dan data eksperimen.

Format data dan persamaan model ditafsirkan, dan tumpukan digunakan untuk memfasilitasi perhitungan. CURVE adalah cikal bakal FORT yang mengesankan. Untuk memberikan kesempatan untuk bekerja bukan dengan persamaan sederhana, tetapi dengan model yang jauh lebih rumit, ia memperkenalkan kata-kata berikut:

     +  -  *  NEGATE
     IF  ELSE  THEN  <
     DUP  DROP  SWAP
     :  ;  VARIABLE  !  (
     SIN  ATAN  EXP  LOG


Ejaannya sedikit berbeda:

     NEGATE  -    MINUS
       DROP  -    ;
       SWAP  -    .
          !  -    <
   VARIABLE  -    DECLARE
          ;  -    END
     ( ...)  -    COMMENT ...;


Untuk mendefinisikan kata input enam karakter (disebut ATOM dengan analogi dengan LISP), interpreter menggunakan IF ... ELSE IF . DUP , DROP dan SWAP adalah instruksi mesin; Saya terkejut mereka ditulis berbeda. Kata " : " (titik dua) diambil dari format label dalam ALGOL, dan "dibalik" untuk diurai dari kiri ke kanan (untuk mencegah penerjemah mendeteksi kata-kata yang tidak ditentukan):

     ALGOL - LABEL:
     CURVE - : LABEL

Faktanya, titik dua menandai posisi pada baris input, yang akan ditafsirkan kemudian. Penafsiran dihentikan oleh kata “ ; "(titik koma). Salah satu versi usus besar itu disebut DEFINE .

Rekam Operator " ! "(Tanda seru) muncul sehubungan dengan VARIABEL ; tetapi membaca " @ " otomatis. Harap dicatat - kode menjadi cukup rumit untuk memerlukan komentar. Kondisi postfix yang pernah dikritik dimulai dari sini:

     ALGOL - IF expression THEN true ELSE false
     CURVE - stack IF true ELSE false THEN

Jika ada nilai bukan nol di bagian atas tumpukan, itu dianggap sebagai nilai true Boolean (benar). MAKA memberikan akhir yang unik, ketidakhadiran yang selalu membingungkan saya di ALGOL. Ekspresi serupa diinterpretasikan sebagai berikut: JIKA memindai input untuk ELSE atau LALU . Kata < memperkenalkan konvensi bahwa relasi meninggalkan nilai boolean pada stack - 1 jika benar, dan 0 jika salah. Fungsi transendental, tentu saja, panggilan ke rutinitas perpustakaan.

Pada roti gratis


Saya meninggalkan Stanford pada tahun 1965 untuk menjadi programmer komputer freelance di New York. Ini tidak biasa, dan saya menemukan pemrograman kerja di FORTRAN, ALGOL, Jovial, PL / I dan berbagai assembler. Saya benar-benar menyeret sekitar dengan pak kartu punch saya dan memprogramnya kembali sesuai kebutuhan. Komputer mini muncul, dan bersama mereka - terminal. Interpreter sempurna untuk input teletype, dan segera memperoleh kode untuk bekerja dengan output. Jadi kami menemukan kata-kata:

     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE

EXPECT adalah loop yang memanggil KUNCI untuk membaca penekanan tombol. TYPE adalah loop yang memanggil EMIT untuk menampilkan karakter.

Dengan munculnya teletype, sekarang saatnya untuk menekan kaset dan program yang paling tidak nyaman yang dapat Anda bayangkan - membutuhkan banyak jam mengedit, meninju, memuat, merakit, mencetak, mengunduh, menguji, dan kemudian lagi. Saya ingat hari Minggu yang mengerikan di gedung pencakar langit di Manhattan, ketika saya tidak dapat menemukan lakban (tidak ada yang membantu), dan mengutuk bahwa "pasti ada cara yang lebih baik."

Saya melakukan pekerjaan yang layak untuk Bob Davis di Realtime Systems, Inc (RSI). Saya benar-benar mempelajari 5500 MCP - cukup untuk mendukung layanan berbagi waktu (bekerja dengan terminal jarak jauh), dan juga menulis penerjemah dari FORTRAN ke ALGOL dan utilitas pengeditan file. Penerjemah menunjukkan kepada saya nilai spasi di antara kata-kata yang tidak diperlukan FORTRAN.

Penerjemah masih hanya membedakan kata dengan 6 karakter pertama (karena kata data dalam Burroughs B5500 adalah 48-bit). Kata-kata LIST EDIT BEGIN LAGI EXIT muncul .

Kata-kata BEGIN ... LAGI ditulis sebagai MULAI ... ULANGI dan berfungsi sebagai "tanda kurung" untuk perintah pengeditan T TYPE I INSERT D DELETE F FINDkemudian digunakan dalam editor NRAO.

Kata FIELD digunakan dengan gaya Forth DBMS Mohasco. Oleh karena itu salah satu keunggulan FORT. Aturannya adalah bahwa FORT mengkonfirmasi setiap jalur input dengan menambahkan OK ketika interpretasi selesai. Ini bisa merepotkan, karena ketika input berakhir dengan karakter CR, spasi harus ditampilkan, lalu OK, dan CR terakhir. Di RSI, OK, saya menemukan diri saya di baris berikutnya, tetapi tetap menyampaikan konfirmasi ramah melalui jalur komunikasi yang menakutkan [lelucon seorang penulis berdasarkan fakta bahwa pada tahun-tahun itu pekerjaan komputer dengan jalur komunikasi tidak biasa; untuk pembaca modern, lelucon tersebut telah kehilangan relevansinya dan terdengar, setidaknya, aneh - kira-kira. diterjemahkan.] :

     56 INSERT ALGOL IS VERY ADAPTABLE
     OK


Notasi postfix ini menyarankan penggunaan tumpukan data, tetapi kedalamannya hanya satu.

Mohasco, 1968


Pada 1968, saya mulai bekerja sebagai programmer di perusahaan komersial Mohasco Industries, Inc di Amsterdam, New York. Itu adalah perusahaan besar yang memproduksi barang-barang rumah tangga - karpet dan furnitur. Saya bekerja dengan Geoff Leach di RSI, dan dia meyakinkan saya untuk memindahkannya ke bagian utara negara bagian. Saya baru saja menikah, dan di Amsterdam ada suasana indah kota kecil, berbeda dengan New York.

Saya menulis ulang kode saya di COBOL dan menemukan apa sebenarnya perangkat lunak bisnis. Bob Raiko bertanggung jawab atas pemrosesan data perusahaan dan memberi saya dua proyek terkait.

Dia menyewa komputer mini IBM 1130 dengan tampilan grafis 2250. Tujuannya adalah untuk melihat apakah grafik komputer dapat membantu membuat karpet bermotif. Jawabannya adalah "tidak dapat membantu tanpa dukungan warna," dan opsi 1130 tidak lagi tersedia.

Pada saat itu, saya memiliki komputer mini terbaru: prosesor 16-bit, 8K RAM, disk drive (pertama dalam hidup saya), keyboard, printer, pembaca kartu dan punch, kompiler FORTRAN. Pembaca dan punch adalah opsi cadangan jika terjadi kegagalan disk. Saya kembali porting juru bahasa saya (kembali ke FORTRAN) dan menambahkan cross-assembler untuk bekerja dengan 2250.

Sistemnya mengagumkan. Dia bisa menggambar gambar tiga dimensi animasi ketika IBM hampir tidak bisa menggambar gambar datar statis. Karena ini adalah grafik waktu nyata pertama saya, saya menulis kode untuk Spacewar, video game pertama. Saya juga menulis ulang program catur FORT saya, awalnya ditulis dalam ALGOL, dan sangat terkesan dengan betapa mudahnya menjadi.

File yang berisi penerjemah disebut FORTH, yang berarti perangkat lunak generasi keempat (berikutnya), EMPAT. Tetapi namanya harus dipersingkat, karena sistem operasi membatasi nama file hingga 5 karakter.

Lingkungan pemrograman untuk 2250 ini jauh lebih unggul daripada FORTRAN, jadi saya memperluas cross assembler 2250 ke kompiler 1130. Ada banyak kata baru:

     DO  LOOP  UNTIL
     BLOCK  LOAD  UPDATE  FLUSH
     BASE  CONTEXT  STATE  INTERPRET  DUMP
     CREATE  CODE  ;CODE  CONSTANT  SMUDGE
     @  OVER  AND  OR  NOT  0=  0< 


Ejaan mereka masih berbeda [dari standar untuk FORT - kira-kira. diterjemahkan.] :

      LOOP     CONTINUE
     UNTIL -      END
     BLOCK -      GET
      LOAD -      READ
      TYPE -      SEND
 INTERPRET -      QUERY
    CREATE -      ENTER
      CODE -       


Ini adalah satu-satunya aplikasi yang pernah saya temukan untuk simbol cent.

Penghitung dan batas loop disimpan dalam tumpukan data. DO dan CONTINUE muncul berkat FORTRAN.

BLOCK mengontrol jumlah buffer untuk meminimalkan akses disk. LOAD membaca kode sumber dari blok berukuran 1024 byte. Ukuran 1024 byte dipilih berdasarkan ukuran blok pada disk, dan berhasil. Kata UPDATE memungkinkan Anda untuk menandai blok di memori dan kemudian membuangnya ke disk ketika Anda perlu membebaskan buffer (atau dengan kata FLUSH ). Ini mengimplementasikan semacam memori virtual dan secara implisit dipanggil selama operasi penulisan.

Kata DASARDiizinkan untuk bekerja dengan angka oktal, heksadesimal, dan desimal. Kata CONTEXT adalah petunjuk pertama kamus dan berfungsi untuk memisahkan kata-kata editor. Kata STATE mengatur mode kompilasi dan interpretasi. Selama kompilasi, jumlah karakter dan 3 karakter pertama kata dikompilasi [dikompilasi menjadi pengidentifikasi - kira-kira. terjemahan.] untuk interpretasi selanjutnya. Anehnya, kata-kata dapat diinterupsi oleh karakter khusus - tetapi ini segera ditinggalkan. Operator baca ( @ ) memiliki banyak opsi, karena membaca dari variabel, array, dan disk perlu dibedakan. DUMP diizinkan menggali ke dalam memori untuk debugging.

Tapi yang paling penting, sekarang ada kamus. Kode interpreter sekarang mengambil nama dan mencarinya di daftar tertaut. Kata CREATE membuat entri kosakata klasik:

   *       
   *     3  *
   *  ,   
   *  

* Pengidentifikasi FORT dikemas dalam 32 bit dalam bentuk: 1 byte - jumlah karakter dalam kata, 3 byte tersisa - 3 karakter pertama kata (hussars, be silent!) - kira-kira. perev.

Bidang kode merupakan inovasi penting - begitu kata itu ditemukan, hanya satu transisi tidak langsung yang tersisa dari overhead juru bahasa. Saya belajar tentang arti jumlah karakter dalam membedakan kata dari pengembang kompiler di Stanford.

Kata CODE telah menciptakan kelas kata yang penting. Kolom parameternya berisi instruksi mesin. Dengan demikian, sekarang dimungkinkan untuk membuat kata apa pun dalam kemampuan komputer. Kata " ; CODE " mendefinisikan kode yang akan dieksekusi untuk kelas kata baru, dan memperkenalkan apa yang sekarang disebut objek.

KataSMUDGE menghindari rekursi selama interpretasi definisi. Karena melihat kamus dalam urutan dari definisi terbaru ke yang tertua, rekursi yang tidak diinginkan adalah umum.

Akhirnya, tumpukan kembali muncul. Sebelum ini, definisi tidak dapat disarangkan, atau harus menyimpan alamat pengirim dalam tumpukan data. Semua dalam semua, itu adalah waktu inovasi besar dalam pengembangan (sebentar-sebentar) Benteng.

Geoff Leach dan saya menulis artikel pertama tentang FORT (dalam bentuk laporan internal Mohasco) pada tahun 1970. Dia tidak kehilangan relevansi hari ini.

Pada tahun 1970, Bob memesan Univac 1108. Itu adalah proyek ambisius untuk mendukung jaringan jalur khusus untuk sistem entri pesanan. Saya menulis generator laporan di FORT, tetapi saya yakin bisa menulis kode untuk memasukkan pesanan. Untuk meningkatkan kepercayaan pada FORT, saya porting ke 5500 (sebagai program terpisah!). Tetapi perangkat lunak perusahaan adalah COBOL. Anehnya, kompromi dicapai dengan mengatur sistem FORT ke 1108 sehingga berinteraksi dengan modul COBOL untuk pemrosesan transaksi.

Saya ingat betul perjalanan ke Schenectady musim dingin itu untuk mengambil waktu pada shift ketiga di 1107. Tidak ada lantai dan jendela di kamar saya, dan ini adalah latihan malam untuk bertahan hidup. Tetapi sistem tersebut ternyata sangat sukses, dan bahkan terkesan Univac (Les Sharp terlibat dalam integrasi dengan proyek). Kriteria yang menentukan adalah waktu respon, tetapi saya juga bertekad untuk mempertahankan proyek dalam bentuk yang sesuai untuk pemeliharaan (yaitu, tetap kecil dan sederhana). Sayangnya, penurunan ekonomi memaksa manajemen untuk membatalkan 1108. Saya masih berpikir itu adalah keputusan yang buruk. Saya adalah orang pertama yang mengundurkan diri.

Benteng untuk 1108 harus ditulis dalam assembler. Ini buffered input dan output pesan dan mendistribusikan prosesor antara tugas yang memproses setiap baris. Di sini Anda memiliki sistem operasi klasik. Tapi dia juga bisa mengurai baris input dan menjalankan (dengan kata PERFORM ) modul COBOL yang sesuai. Dia memantau buffer drum memori dan terlibat dalam mengemas dan membongkar catatan. Kata-kata

     BUFFER  PREV  OLDEST
     TASK  ACTIVATE  GET  RELEASE


muncul saat itu.

BUFFER tidak membaca disk jika diketahui bahwa blok yang diminta kosong. PREV dan OLDEST adalah variabel sistem yang memungkinkan untuk menerapkan manajemen buffer berdasarkan “paling tidak digunakan”. TUGAS mendefinisikan tugas pada saat boot, dan AKTIFKAN menjalankannya saat diperlukan. GET dan RELEASE mengontrol sumber daya bersama (drum memori, printer). PAUSE adalah kata di mana tugas membebaskan prosesor. Itu termasuk dalam semua operasi I / O dan tidak terlihat oleh kode transaksi. Itu memungkinkan algoritma penjadwalan siklik sederhana yang menghindari pemblokiran.

Setelah pernyataan itu[mungkin tentang pemecatan - sekitar. trans.] Saya menulis puisi yang marah dan sebuah buku yang tidak pernah diterbitkan. Ini menggambarkan bagaimana memprogram dalam FORT dan mendorong kesederhanaan dan inovasi. Ini juga menjelaskan teknik kode dijahit tidak langsung, tetapi untuk pertama kalinya diterapkan di NRAO.

Saya mengerjakan konsep metalanguage - bahasa yang berbicara tentang bahasa. Fort sekarang dapat mengartikan assembler yang dikumpulkan oleh compiler, yang menyusun interpreter. Pada akhirnya, saya memutuskan bahwa terminologi tidak berfungsi, tetapi istilah "metacompilation" untuk mengkompilasi ulang FORT itu sendiri masih digunakan.

NRAO, 1971


George Conant menawari saya posisi di NRAO (Observatorium Astronomi Radio Nasional, 22 suku kata). Saya mengenalnya di CAO, dan dia menyukai Ephemeris 4. Kami pindah ke Charlottesville, Virginia, dan menghabiskan musim panas di Tucson, Arizona, ketika teleskop radio Kitt Peak tersedia untuk pemeliharaan.

Proyek ini melibatkan pemrograman komputer mini Honeywell 316 untuk mengontrol bank filter baru untuk teleskop radio 36-inci milimeter. Dia memiliki pita magnetik sembilan jalur dan terminal tabung Tektronix dengan "memori" [mungkin mengacu pada tabung cahaya atau potensiometer-sekitar - kira-kira. perev.]. George memberi saya kebebasan penuh dalam mengembangkan sistem, tetapi dia tidak senang dengan hasilnya. Di NRAO semua orang menggunakan FORTRAN, dan sekarang saya muncul dengan FORT saya. Dia benar bahwa standar organisasi harus menyediakan satu bahasa pemrograman umum. Pemrogram lain sekarang juga menginginkan bahasa mereka sendiri.

Namun, saya menulis kode FORT di assembler pada mainframe IBM 360/50. Lalu saya kompilasi ulang di bawah 316. Kemudian saya mengkompilasinya ke 316 (walaupun saya memiliki terminal 360, waktu responsnya mengerikan). Setelah sistem tersedia, maka itu mudah. Ada dua mode pengamatan: semua frekuensi dan garis spektral. Garis spektral paling menarik, karena saya bisa menampilkan spektra saat saya mengumpulkan data, dan menghaluskan bentuk garis menggunakan metode kuadrat terkecil.

Di Tucson, tempat Ned Conklin memimpin, sistem itu diterima dengan baik. Ini adalah langkah lain dalam mengurangi jumlah data segera setelah dikumpulkan. Para astronom mulai menggunakannya untuk mendeteksi dan memetakan molekul antarbintang, segera setelah ini menjadi area penelitian yang modis.

Bess Rather disewa untuk mendukung observatorium. Pertama dia harus mempelajari sistem FORT, dan kemudian menjelaskan dan mendokumentasikannya dengan sedikit bantuan dari saya. Tahun berikutnya, saya memprogram ulang DDP-116 untuk mengoptimalkan penunjuk teleskop. Kemudian Bess dan saya mengganti DDP-116 dan Honeywell 316 dengan DEC PDP-11.

Penggantian seperti itu menjadi mungkin karena pengembangan kode dijahit tidak langsung. Ini adalah pengembangan alami dari pekerjaan saya di Mohasco, meskipun saya kemudian mengetahui bahwa DEC menggunakan kode dijahit langsung di salah satu kompilernya. Alih-alih mengkompilasi seluruh definisi setiap kali, kompiler hanya mengambil alamat dari setiap kata yang digunakan dari kamus. Peningkatan kinerja untuk setiap tautan ini hanya membutuhkan dua byte, dan penerjemah dapat mengeksekusi kode lebih cepat. Pada DEC PDP-11, penerjemah ini pada dasarnya adalah makro dua kata:

: NEXT IP )+ W MOV W )+ ) JMP ;


Sekarang FORT telah selesai. Dan saya tahu itu. Saya bisa menulis kode lebih cepat dan lebih efisien dan dapat diandalkan. Apalagi itu portabel. Saya terus memprogram ulang DDP-116, yang berfokus pada penunjuk teleskop Green Bank 300 inci, dan HP mini, yang dimulai dengan astronomi radio pangkalan yang sangat panjang (VLBI). George memberi saya ModComp, dan saya memprogram transformasi Fourier untuk pencarian interferometri dan pulsar (pada set data 64K). Saya bahkan menunjukkan bahwa perkalian kompleks oleh IBM 360 di FORT adalah 20% lebih cepat daripada di assembler.

NRAO menghargai apa yang saya tulis. Mereka memiliki perjanjian dengan perusahaan konsultan untuk mengidentifikasi teknologi agunan. Masalah paten FORT telah dibahas cukup lama. Tetapi karena paten perangkat lunak bertentangan dan dapat diselesaikan dengan keterlibatan Mahkamah Agung, NRAO menolak untuk menangani masalah ini. Akibatnya, hak cipta kembali ke saya. Saya tidak berpikir bahwa ide harus dipatenkan. Melihat ke belakang, orang harus setuju bahwa satu-satunya kesempatan FORT adalah tetap berada di domain publik. Dan di sana dia berkembang.

Kode dijahit mengubah kata-kata struktural (seperti DO LOOP JIKA KEMUDIAN ). Mereka mendapat implementasi yang elegan dengan alamat di tumpukan data pada waktu kompilasi.

Sekarang setiap implementasi benteng memiliki assembler untuk arsitektur komputernya. Dia menggunakan opcodes dalam notasi postfix, dan menghasilkan alamat dalam tumpukan data, dengan kata-kata terstruktur seperti FORT untuk percabangan. Mnemonik Assembler didefinisikan sebagai kelas kata menggunakan CODE . Dimungkinkan untuk menyandikan ini semua dalam satu hari.

Operator aritmatika yang tidak biasa juga telah membuktikan nilainya.

M*  */  /MOD  SQRT  SIN.COS  ATAN  EXP  LOG


M * adalah perkalian perangkat keras yang biasa dari dua angka 16-bit menjadi produk 32-bit (argumen, tentu saja, dalam tumpukan data). Ini diikuti oleh * / dengan divisi untuk menerapkan aritmatika fraksional. / MOD mengembalikan hasil bagi dan sisanya, dan sangat ideal untuk menemukan entri dalam file. SQRT mengembalikan hasil 16-bit dari argumen 32-bit. SIN.COS segera mengembalikan sinus dan kosinus, yang berguna untuk vektor dan aritmatika kompleks (FFT). ATAN adalah operasi terbalik, dan tidak memiliki ambiguitas kuadran. EXP dan LOG dihitung dalam basis 2.

Dalam fungsi ini, aritmatika titik tetap digunakan - 14 atau 30 bit di sebelah kanan titik biner untuk trigonometri, 10 untuk logaritma. Ini telah menjadi ciri khas FORT, karena aritmatika seperti itu lebih sederhana, lebih cepat dan lebih akurat daripada floating point. Tetapi jika perlu, Anda dapat dengan mudah mengimplementasikan perangkat keras dan lunak dengan titik apung.

Saya memuji karya Hart yang tak ternilai, yang menyusun tabel perkiraan fungsi dengan akurasi berbeda. Mereka membebaskan pemrogram aplikasi dari keterbatasan perpustakaan yang ada.

Kata DOES> muncul (ditulis sebagai ; :) . Ini mendefinisikan kelas kata-kata (seperti ; KODE), menetapkan bahwa definisi harus ditafsirkan ketika merujuk pada suatu kata. Itu sulit untuk diimplementasikan, tetapi ternyata sangat berguna untuk mendefinisikan kode operasi.

Namun, saya tidak dapat meyakinkan Charlottesville bahwa FORT cocok untuk mereka. Saya tidak diizinkan memprogram VLA. Dalam setiap kelompok programmer, 25% mencintai Fort dan 25% membencinya. Perselisihan itu sulit, dan kompromi jarang tercapai. Sebagai hasilnya, 25% pertama bergabung dan menciptakan Forth, Inc. Tapi itu cerita lain.

Moralitas


Sejarah FORT memiliki moralitas tertentu: seorang programmer muda yang gigih berjuang melawan ketidakpedulian untuk menemukan Kebenaran dan menyelamatkan rekan-rekannya yang menderita. Semakin membaik: saksikan Forth, Inc. saling berhadapan dengan IBM dalam sistem perbankan Prancis.

Saya tahu FORT masih bahasa pemrograman terbaik. Saya senang dengan kesuksesannya, terutama di bidang kecerdasan buatan yang sangat konservatif [ingat, 1991 - kira-kira. diterjemahkan.] .

Kekhawatiran saya adalah bahwa orang-orang yang seharusnya tidak menghargai bagaimana FORT mewujudkan deskripsi mereka sendiri tentang bahasa pemrograman yang ideal.

Tapi saya masih melakukan riset tanpa lisensi. FORT telah menghasilkan arsitektur yang menjanjikan kombinasi perangkat keras dan perangkat lunak yang menakjubkan. Serta lingkungan pemrograman baru lainnya.

All Articles