Peristiwa cerita diceritakan dalam urutan kronologis, jika menurut Anda ada peristiwa yang tidak relevan, maka kemungkinan besar tidak, hanya saat di mana akan menjadi jelas mengapa saya menyebutkan peristiwa ini nanti. Bahasa yang saya buat telah berubah dari waktu ke waktu, jika Anda membaca dan memahami bahwa bahasa tersebut tidak terlalu baik dan Anda tidak dapat membaca lebih lanjut, saya masih merekomendasikan membaca sampai akhir, mungkin pendapat Anda akan berubah. Gambar untuk artikel tidak mencerminkan fitur utama bahasa, tetapi sebenarnya tidak ada tautan dalam bahasa tersebut.Halo pembaca! Nama saya Alexander, saya lahir di kota kecil (kurang dari 10.000 orang) di Belarus. Keluarga saya miskin, ada sangat sedikit mainan, tentang komputer dan konsol sama sekali, Anda tidak dapat gagap. Terlepas dari kenyataan bahwa keluarganya miskin, sang ibu tidak memiliki saudara yang miskin, yang terkadang memberi kami beberapa hal yang tidak murah. Dan kemudian suatu hari (di suatu tempat pada tahun 2001) kerabat yang sama memberi kita komputer Byte (analog Soviet dari ZX Spectrum 48k). Sukacita saya tidak mengenal batas! Segera saya mulai meluncurkan game di atasnya. Game di komputer ini diunduh dari kaset biasa. Mengunduh satu permainan berlangsung sekitar 5 menit dan tanpa kemungkinan kecil bisa berhenti karena sinyal berkualitas buruk. Untuk meningkatkan kemungkinan pengunduhan yang berhasil, saya harus menghapusnya dengan alkohol dan menyesuaikan posisi kepala pembaca tape recorder. Semua perdukunan selama pemuatan ini, durasi pemuatan dan ketidakmampuan untuk bertahan dalam permainan, mengarah pada fakta bahwa secara bertahap saya mulai kehilangan minat dalam permainan. Tetapi bersama Byte saya juga diberi buku tentang bekerja dengan komputer ini. Saya memutuskan untuk membaca buku ini untuk mempelajari lebih lanjut tentang fitur Byte. Buku itu ternyata menjadi buku teks tentang bahasa pemrograman BASIC yang dibangun ke dalam Byte.
Saya hanya mengambil dan menyalin program pertama yang saya dapatkan dari sebuah buku ke komputer, dan kemudian memulainya. Ketika saya melihat lingkaran di layar, saya benar-benar terpana - itu adalah perasaan yang tak terlukiskan. Ketika saya sadar, saya mulai mengubah berbagai angka dalam program dan setelah mulai angka itu berubah bentuk, saya mengubah angka dan memulai program lagi dan lagi, rasanya seperti berada di alam semesta lain dan mulai mempelajarinya. Setelah membaca semua yang ada di buku ini tentang dasar, saya mulai membuat program saya sendiri. Awalnya saya menulisnya di selembar kertas, mengumpulkan dan meluncurkannya di kepala saya, dan kemudian memindahkannya ke komputer dan mencari apa yang akan terjadi. Setelah saya sendiri menulis program pertama saya tanpa buku teks, saya menyadari - ini adalah milik saya, inilah yang ingin saya lakukan dalam hidup. Saya mulai menulis sepanjang hari di selembar kertas berbagai program (termasuk permainan).
Sekitar setahun kemudian, setelah peristiwa yang dijelaskan di atas, ilmu komputer muncul di sekolah saya. Seiring waktu, dalam pelajaran kita mulai belajar pemrograman dalam program IntAl. Dalam pelajaran, kami memprogram sedikit, karena ada banyak materi lain yang tidak terkait dengan pemrograman, dan kami juga bekerja pada komputer pada gilirannya (ada lebih sedikit komputer daripada siswa). Tetapi ada pilihan dalam ilmu komputer di sekolah kami, dan saya memutuskan untuk mendaftar di sana, dengan harapan bahwa mereka akan memberi saya lebih banyak kesempatan pemrograman. Di fakultas, kami mulai mempelajari Turbo Pascal, sejak saat pertama saya sangat menyukai bahasa ini. Ada catatan (mereka adalah struktur), unit (mereka juga modul dan perpustakaan), prosedur dan fungsi. Itu semacam dunia baru yang indah, lebih indah dari semua yang saya tahu sebelumnya. Setelah mulai belajar pascal, saya akhirnya memutuskan bahwa saya ingin menjadi seorang programmer.
Setelah lulus dari kelas 9 sekolah, saya punya pilihan untuk melanjutkan ke perguruan tinggi atau ke kelas 10. Saya memutuskan untuk kuliah, yang mengkhususkan diri pada operator komputer dengan studi mendalam tentang fisika, matematika, astronomi, dan ilmu komputer. Banyak orang mengatakan bahwa jika saya lulus dari spesialisasi ini, akan lebih mudah bagi saya untuk masuk universitas sebagai programmer. Tiga jam diberikan untuk menyelesaikan ujian masuk, saya hanya menggunakan 30 menit, 10 di antaranya saya periksa apakah semuanya benar. Diterima! Di Lyceum, saya terus mempelajari Pascal, tetapi juga mulai mempelajari Photoshop, Corel Draw, Excel, baris perintah Windows dan file .bat.
Setelah mengetahui apa yang saya lakukan, kerabat yang sama yang memberi saya "Byte" memberi saya komputer baru dengan karakteristik berikut: Intel Celeron 800 Mhz single-core, RAM 64 Mb, hard drive 14 Gb, video built-in dengan resolusi 640 x 480 dan 16 warna. Orang tua lepas landas dan ditingkatkan dengan membeli 64 Mb RAM dan kartu video Matrox Milenium g400 16 Mb, dengan dukungan untuk 16 juta warna, resolusinya adalah 800 x 600 (batasan monitor). Pada saat itu, hampir tidak ada yang memiliki akses ke Internet, semua informasi terutama diambil dari disk yang dijual di toko-toko.
Salah satu teman saya membeli beberapa CD pemrograman Delphi, CD-nya termasuk Borland Delphi 7, banyak tutorial, banyak komponen dan program dengan banyak pertanyaan pada Delphi dan jawaban untuk pertanyaan-pertanyaan ini (semacam offline StackOverflow minimum).
Semuanya begitu sederhana dan nyaman sehingga program ditulis satu per satu. Juga di perpustakaan lyceum ada buku teks tentang pemrograman dalam C. Setelah membacanya, saya menyadari bahwa saya tidak suka C sama sekali, saya suka Pascal dan terutama Delphi berkali-kali lebih banyak. C lebih rumit dan tidak terlalu nyaman, satu-satunya hal yang saya sukai adalah bahwa kurung kurawal digunakan sebagai ganti dari awal. Tetapi saya tidak perlu berpikir bahwa Pascal adalah bahasa yang ideal bagi saya, seiring waktu, banyak hal dalam bahasa itu mulai mengganggu saya (selain mulai akhir). Sebagai contoh, saya ingin string dan array menjadi struktur dengan bidang-bidang berikut: pointer ke area memori dengan data, jumlah elemen, jumlah maksimum elemen yang dapat ditahan oleh pointer di area memori, sehingga beberapa array atau garis dapat menunjuk ke area memori yang sama dan Anda bisa membuat array dari sepotong array lain tanpa menyalin elemen. Ternyata kemudian, array seperti yang saya inginkan disebut irisan. Kemudian saya ingin menulis seorang penerjemah yang menerjemahkan dari pascal yang dimodifikasi menjadi yang biasa, tetapi saya meninggalkan ide ini.
Teman yang sama yang memperkenalkan saya ke Delphi mengatakan bahwa perusahaan tertentu mengirim disk gratis dengan beberapa Ubuntu dan Kubuntu. Saya bahkan tidak tahu apa itu, tetapi dia memberi saya 2 disc gratis. Ubuntu tidak memulai dengan saya, tetapi Kubuntu mulai dan bekerja dengan sangat baik. Saya kagum - ternyata ada sesuatu yang lain selain Windows dan dos. Saya benar-benar ingin meletakkan Kubuntu di komputer dan mempelajarinya, tetapi drive 14 Gb sangat menentangnya. Selain itu, saat ini saya sudah memiliki akses Internet (5 Kb / s), dan modem di Kubuntu tidak berfungsi. Karena itu, disk dengan Kubuntu dilemparkan ke rak. Tiba-tiba, teman yang sama mulai mengoceh dengan semacam assembler, semuanya menunjukkan kepada saya beberapa program di atasnya, tetapi mereka hanya membuat saya tersenyum, karena 50 baris assembler digantikan oleh satu baris Delphi, tetapi seorang teman membujuk saya untuk mencoba dan memberikan disk dengan FASM dan buku-buku perakitan. Saya tidak suka assembler, meskipun macro di FASM adalah hal yang keren.
Jadi saya lulus SMA, saatnya kuliah. Tetapi tak lama sebelum akhir bacaan, saya mulai mendapatkan uang di Internet. Ada banyak scammer di Internet yang berpura-pura menjadi pengusaha sukses dan menawarkan kepada pengguna yang tidak menaruh curiga kesepakatan berikut - "Beri kami setidaknya satu dolar, dan setelah 2 minggu kami akan mengembalikan Anda $ 2". Jika Anda memberi scammers satu dolar, maka anehnya, setelah 2 minggu mereka benar-benar mengembalikan $ 2, tetapi jika Anda memberi 10 maka setelah 2 minggu, itu akan diindikasikan bahwa saya memiliki $ 20 di akun saya, tetapi tidak mungkin untuk menariknya. Saya membuat banyak kotak surat dan menggunakan berbagai kotak surat dan mengubah alamat ip (saya punya ip dinamis), saya mendaftarkan banyak akun di situs scam, menempatkan $ 1 di atasnya setiap waktu. Menimbang bahwa saya sudah menghasilkan sedikit uang dengan cara ini, saya mulai dikunjungi oleh pikiran - βMungkin saya seharusnya tidak pergi ke universitas? Saya dapat memprogram sesuka saya tanpa universitas. β Saya juga cenderung pada pemikiran ini oleh fakta bahwa Internet sering menulis bahwa programmer tidak memerlukan menara. Sementara saya berpikir - "untuk bertindak atau tidak untuk bertindak?", Kehidupan itu sendiri memutuskan untuk saya. Ayah saya mendaftar di situs kencan, menemukan cinta baru untuk dirinya sendiri dan melemparkan saya dengan ibunya. Menyadari bahwa ibu saya sendiri tidak akan dapat mendukung saya ketika saya belajar, saya tidak mulai masuk universitas. Setelah bacaan, saya harus bekerja setahun di suatu perusahaan. Saya mendapat pekerjaan di sebuah toko grosir, terlibat dalam mengekstraksi TTN dan memasukkan barang-barang yang datang ke toko di komputer. Setelah bekerja sedikit di toko, saya menulis sebuah program yang menganalisis basis data produk di toko dan mencari masalah potensial. Setelah itu, perusahaan yang memiliki toko menawarkan untuk mentransfer kepada mereka sebagai programmer, tetapi ketika mereka mengetahui bahwa saya tidak memiliki pendidikan yang lebih tinggi, mereka berubah pikiran. Dan saya tetap bekerja di toko. Gaji saya tidak buruk, tetapi pendapatan dari scammers sangat rendah. Penghasilannya rendah karena pendaftaran akun membutuhkan banyak waktu, dan di Belarus sangat sulit untuk bekerja dengan uang Internet. Liberty Reserve - Uang internet, karya yang disediakan oleh bank di Kosta Rika, yang tidak memberikan informasi tentang pelanggannya kepada pemerintah, itulah sebabnya sebagian besar penipu menggunakan Liberty Reserve.
Sangat sulit untuk membeli uang ini di Belarus, karena di penukar otomatis Anda harus membayar tujuh kali lebih banyak (jika ingatanku), dan membeli dari orang-orang adalah bisnis yang berisiko. Saya berhenti menipu scammers dan menerima penghasilan, hanya dari pekerjaan. Setelah bekerja setahun, saya memutuskan untuk mencari sesuatu yang lebih baik. Saya memiliki banyak uang dan saya memutuskan untuk memutakhirkan komputer saya. Karakteristik PC baru: AMD Athlon 64 x2 2600 (dengan dukungan untuk instruksi SSE2 yang tidak ada pada prosesor sebelumnya. Ini penting!), 1 Gb RAM, hard drive 80 Gb. Mengingat bahwa saya ingin belajar Kubuntu tetapi saya memiliki hard drive yang terlalu kecil, saya memutuskan untuk menginstal Linux dan Windows secara bersamaan, karena saya tidak memiliki masalah dengan drive tersebut. Ketika saya pergi ke toko drive komputer, saya membeli drive openSUSE 10.2. Pekerjaan baru saya adalah memperbaiki komputer di salah satu perusahaan di kota saya, dengan masa percobaan satu bulan. Kepala perusahaan ini, serta istrinya, sedang mengembangkan beberapa jenis perangkat lunak akuntansi, mengetahui bahwa saya suka pemrograman, mereka menawarkan untuk bergabung dengan persentase penjualan di masa depan, tetapi karena mereka mengembangkan Visual FoxPro dan SQL, saya perlu belajar bahasa-bahasa ini. Saya setuju. Sebulan kemudian, ternyata mereka tidak akan membawa saya ke tempat kerja, tetapi mereka membutuhkan saya untuk menggantikan karyawan yang pergi berlibur ketika dia kembali, mereka mengatakan bahwa mereka tidak lagi membutuhkan saya, tetapi masih ingin saya membantu mereka Dengan perkembangan itu, tentu saja saya menolak dan mulai mencari pekerjaan baru. Beberapa bulan pencarian yang gagal menghasilkan fakta bahwa saya pergi ke lokasi konstruksi sebagai pekerja pembantu.
Gaji pekerja pembantu adalah 3,5 kali lebih rendah daripada operator komputer di toko, tetapi saya harus mengatakan bahwa pekerjaan itu jauh lebih mudah (saya adalah orang yang kuat). Selama akhir pekan, menggunakan FASM, saya mulai mempelajari instruksi SSE2 baru ini untuk saya. Setelah bereksperimen, saya menyadari bahwa dalam beberapa tugas, instruksi ini dapat secara signifikan meningkatkan produktivitas. Saya bertanya-tanya bagaimana pengembang perangkat lunak menanamkan instruksi dalam aplikasi SSE2 mereka, karena jika semua tugas yang masuk akal untuk menggunakan SSE2 diselesaikan menggunakan mereka, maka program tidak akan berjalan pada komputer tanpa dukungan SSE2, tetapi jika Anda tidak menggunakannya, maka program akan bekerja lebih lambat. Tentu saja, Anda dapat mengetahui di awal program apakah prosesor memiliki dukungan SSE2, dan tergantung pada hasilnya, jalankan kode yang berbeda, tetapi dalam hal ini kompleksitas pengembangan dan pengujian meningkat, serta peningkatan konsumsi RAM dan cache prosesor. Setelah menganalisis beberapa program, saya melihat bahwa sebagian besar program tidak menggunakan SSE2. Dan kemudian saya bertanya pada diri sendiri, "Mengapa kompiler tidak mengkompilasi makro menjadi assembler, dan di komputer pengguna akhir beberapa utilitas tidak akan mengisi konstanta yang diperlukan untuk makro dan hanya setelah itu biner dibuat?". Dan saya, mengingat pascal modifikasi yang saya temukan di Lyceum, memutuskan untuk menulis kompiler seperti itu. Saya juga membuat keputusan untuk menambahkan obat generik ke dalam bahasa tersebut dan bahasanya mulai terlihat seperti ini:
type Point(a){
x, y: a;
}
type Line(a){
a, b: Point(a);
}
function createLine(a, b: Point(a)) Line(a){
result.a = a;
result.b = b;
}
Windows Linux( Windows, Linux ). Ubuntu 8.10, . , Gentoo. Gentoo use- , . , , , , . , - LLVM, LLVM IR. , , FASM, LLVM IR, , , , LLVM , , . . LLVM IR , , , , , . , , LLVM IR, , , . :
function inc(a: ^Integer) Integer{
result = a^ + 1;
}
procedure foo(){
var
a: ^Integer;
b: Integer;
...
//
...
b = inc(ro nocp a) // inc ,
}
, (800 $/), . , Haskell, : Β« Β», Β« Β», , - , . . Haskell . , β , , , β , , , ( , ) β , , , β , . Β« Haskell Β». , . , . , , Haskell, - , . Haskell , Haskell( Python), .
, . Haskell . - Junior Haskell Developer , . . , , IDE, firefox + google , . . Haskell .
, Haskell , , , Haskell , , Haskell β ! Haskell , , ( Haskell). :
function lineLength(line: Line) Real
result = sqrt(sqr(line.a.x - line.b.x) + sqr(line.a.y - line.b.y))
- 800$ 400$, 120$ + + 250$. 250$, ? . , β , , . 35$ . , , , . , , , , , - . 2 . , - . , , , , , Β« , . Β» β . , , , (14 ). , , , , , , . , ( ), , , , 1-2 . . , , , 3 , . , 3 . , . ( ).
: , , , . ( ), , , , . , , , , , ( ). , . , - (, , , ), , - , . ( , , ), 60% . , , , . , , :
- , ( ).
- , LLVM IR . , A m, , LLVM IR , B A, m LLVM IR .
- .
- .
, . , :
- Haskell?
, , . :
abstract class Printable
require method (Printable) print()
method (Printable) printLn()
this.print()
String.eol().print()
- ?
, , , . :
class Some(SomeParent)
a, b String
class Some(Some, Printable)
override method (Some) print()
this.a.print()
this.b.print()
- ?
( 2 , β ). - , ?
, . . :
method (Some) foo(a :String, b String) // a - , b -
c := 10 // c
d .= 12 // d
:someMethod() // someMethod, c
c.someMethod() // someMethod, c
//2 , , ,
- ?
, . :
class Point
x,y Number
method (Some) foo(a Point<x UInt64, y UInt64>) // a , Point, x y. , .
- , Point x y .
class Point
x, y !Number // x , y x
- ?
, , . :
class Point
numberClass #Number
private x, y .numberClass
method (Point) createPoint(x, y .numberClass) This //This -
result:x = x
result:y = y
- , LLVM IR ?
( ) , . :
method (Some) foo(a .z, b Point<numberClass .f>, c UInt64)
//a z
//b Point numberClass, f
//c UInt64,
- ?
, , , - , , . 0 β .
, . . , , , , , , . , , , β , . - 5 . , . : . β 170 $/. , , , , . , , .
, , , . , O0 O2, O1 O3. , LLVM IR, . LLVM IR, , clang C. - , C LLVM IR , LLVM IR. LLVM IR? .
C LLVM IR? LLVM IR C: , , , C . LLVM IR C. , . , , , . , this 2 ( ) 4. , , 20 β 40 ( ). , , . , 2 , , , , , , . , , β . , . , .
, :
β Β« , ?Β». , , , , . , this ( ). :
method (#Some) foo(a String, b `String, c ~String, d :String)
//this
//a
// b ,
//c ,
//d ,
. , , , ( ) , , , ( ) : , , , , this ( , ), , , , . , :
method (~Some) veryBadMethod(value This)
this = value
method (#Some) foo()
a := Some
b .= Some#randomValue() //, b
a~veryBadMethod(b)
a:someMethod() // ,
, . , , . , , , . β 2 , , , , , β .
, , . , Β«! ! .Β». , . β . , , 150-180. 11 . , , , - , . (? , ). , . , , 30- , , , 200$ ( ), , , .
, . (Disciples 3) β , , β Β« !Β». , , , ? , ! , , . , Β« ? Haskell.Β». 10 , , , , , . -, , ( , ) , , .
, . , , . , , , , , .
, , , , , , . . . , , . :
type Point(a)
x,y a
type SimplePoint
x,y Double
//-
a := Point(UInt64)
Haskell, , , , . , - . . :
group Equal
//equal(a, a) -> Bool
, Equal, equal, 2 , Bool.
(rules) β , . . :
rules
1 = type == [_] //
2 = type[0] > Equal // Equal
3 = 1 & 2
join 3 Equal // Equal
. , , , , β . , 1 9 ( 5), , , , . :
func notEqual(a, b)
rules
final = a > Equal & a == b
result = Bool
result = !(a == b) //! == , result = (neg(equal(a, b)) a.equal(b).neg()
, , , , . , , , , , . , bash , . ( ) .
, : cine, , fei. github:
cine fei...( ).XML Kate.Linux x86_64( ) clang.
,
, cine.
:
- cine fei n-kine enfei.
- cine C.
- cine ( ).
- 4ernika, , .
- , , . size count , size count, . , , , .
- , ( ).
- , , ( , ). , , . .
- cine , cine β UInt8, , .
- LLVM IR C, clang GCC. , , , clang.
- SIMD , 0.1 SIMD ( ), , SIMD .