├── Makefile ├── README.md ├── gambar ├── 01-01 │ └── web-rust-lang-org.png ├── 01-02 │ └── rust-playground.png ├── 01-03 │ ├── 01-download.png │ ├── 02-start-eclipse.png │ └── 03-main-window-eclipse.png └── logo-rust.png ├── hasil └── pemrograman-rust.pdf ├── isi ├── 01-01-mengenal-rust.adoc ├── 01-02-instalasi-rust.adoc ├── 01-03-ide-untuk-rust.adoc ├── 01-04-ekosistem-rust.adoc ├── 01-05-struktur-proyek-rust.adoc ├── 02-01-variabel-komentar.adoc ├── 02-02-tipe-data.adoc ├── 02-03-fungsi.adoc ├── 02-04-pengendali-aliran.adoc ├── 02-05-struktur-data.adoc ├── 02-06-ownership.adoc ├── 02-07-enum.adoc ├── 02-08-pattern-matching.adoc ├── 02-09-reusability.adoc ├── 02-10-mengelola-error.adoc ├── 03-01-mengelola-string.adoc ├── 03-02-pemrograman-konkuren.adoc ├── 03-03-net.adoc ├── 03-04-path.adoc ├── 03-05-sistem-file.adoc ├── 03-06-operasi-io.adoc ├── 03-07-mengelola-proses.adoc ├── 04-01-akses-basis-data.adoc ├── 04-02-antarmuka-grafis.adoc ├── 04-03-antarmuka-teks.adoc ├── 04-04-pemrograman-web.adoc └── 04-05-serialisasi-data.adoc ├── kontribusi.md ├── pemrograman-rust.adoc └── src ├── 01-02 ├── ferris │ ├── .gitignore │ ├── Cargo.lock │ ├── Cargo.toml │ └── src │ │ └── main.rs └── hello-plain │ ├── hello.rs │ └── kompilasi.txt └── 01-05 ├── default ├── bindefault │ ├── Cargo.toml │ └── src │ │ └── main.rs └── libdefault │ ├── Cargo.toml │ └── src │ └── lib.rs └── proses └── binproses ├── .gitignore ├── Cargo.toml └── src └── main.rs /Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | asciidoctor-pdf -D hasil/ pemrograman-rust.adoc 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Buku "Pemrograman Rust" 2 | 3 | Buku ini merupakan buku hasil kerjasama dari komunitas Rust Indonesia. Silahkan membaca [panduan untuk berkontribusi](kontribusi.md) jika anda ingin berkontribusi. Bagian-bagian buku (bab dan sub-bab) ini ditandai dengan tanda-tanda berikut: 4 | 5 | 1. **wip**: *Work In Progress* - bagian ini masih dalam proses pengerjaan. 6 | 2. **wip-nr**: *Work In Progress - Need Review* - bagian ini dianggap sudah selesai (draft) tetapi masih perlu review. 7 | 3. **kosong**: Bab atau subbab yang tidak ditandai apa-apa berarti sudah cukup dianggap stabil dan dianggap selesai. 8 | 9 | ## Typeset 10 | 11 | Buku ini dibuat menggunakan format [AsciiDoc](https://asciidoc.org/), tetapi menggunakan versi Ruby untuk memproses ke bentuk PDF. Jika ingin memproses sendiri atau berkotribusi, maka anda harus menyediakan pemroses [Asciidoctor](https://asciidoctor.org/), khususnya `asciidoctor-pdf`. Untuk mengkompilasi menjadi PDF, gunakan `Makefile` yang sudah tersedia: 12 | 13 | ``` 14 | $ make 15 | ``` 16 | 17 | ## Hasil Buku 18 | 19 | Setelah dikompilasi, hasil buku dalam bentuk PDF ada pada direktori [hasil](hasil/). 20 | 21 | ## Lisensi 22 | 23 | Lisensi untuk buku ini adalah CC-BY-SA 4.0: 24 | 25 | * Penjelasan singkat: [Bahasa Indonesia](https://creativecommons.org/licenses/by/4.0/deed.id) atau [Bahasa Inggris](https://creativecommons.org/licenses/by/4.0/) 26 | * Penjelasan lengkap: [Bahasa Indonesia](https://creativecommons.org/licenses/by-sa/4.0/legalcode.id) atau [Bahasa Inggris](https://creativecommons.org/licenses/by-sa/4.0/legalcode). 27 | 28 | ![Lisensi Creative Commons BY-SA Internasional 4.0](https://i.creativecommons.org/l/by/4.0/88x31.png) 29 | -------------------------------------------------------------------------------- /gambar/01-01/web-rust-lang-org.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustid/buku-pemrograman-rust/9c782cdf313db69a6cae556592987ba2d67afffe/gambar/01-01/web-rust-lang-org.png -------------------------------------------------------------------------------- /gambar/01-02/rust-playground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustid/buku-pemrograman-rust/9c782cdf313db69a6cae556592987ba2d67afffe/gambar/01-02/rust-playground.png -------------------------------------------------------------------------------- /gambar/01-03/01-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustid/buku-pemrograman-rust/9c782cdf313db69a6cae556592987ba2d67afffe/gambar/01-03/01-download.png -------------------------------------------------------------------------------- /gambar/01-03/02-start-eclipse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustid/buku-pemrograman-rust/9c782cdf313db69a6cae556592987ba2d67afffe/gambar/01-03/02-start-eclipse.png -------------------------------------------------------------------------------- /gambar/01-03/03-main-window-eclipse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustid/buku-pemrograman-rust/9c782cdf313db69a6cae556592987ba2d67afffe/gambar/01-03/03-main-window-eclipse.png -------------------------------------------------------------------------------- /gambar/logo-rust.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustid/buku-pemrograman-rust/9c782cdf313db69a6cae556592987ba2d67afffe/gambar/logo-rust.png -------------------------------------------------------------------------------- /hasil/pemrograman-rust.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustid/buku-pemrograman-rust/9c782cdf313db69a6cae556592987ba2d67afffe/hasil/pemrograman-rust.pdf -------------------------------------------------------------------------------- /isi/01-01-mengenal-rust.adoc: -------------------------------------------------------------------------------- 1 | == Mengenal Rust (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Bab ini membahas tentang gambaran umum dari bahasa pemrograman serta peranti pengembangan Rust. 6 | Dengan mempelajari bab ini, pembaca diharapkan bisa memahami gambaran umum dari Rust sehingga bisa 7 | memberikan semacam pemahaman terhadap ruang lingkup masalah-masalah pemrograman yang bisa 8 | diselesaikan menggunakan Rust serta posisi Rust di antara berbagai bahasa pemrograman dan peranti 9 | pengembangan lainnya. 10 | 11 | === Apakah Rust Itu? (wip) 12 | 13 | Secara umum, biasanya para pemrograman akan menyebut *Rust* untuk segala macam peranti pengembangan 14 | yang terkait dengan Rust. Pada dasarnya, saat membicarakan tentang peranti pengembangan, ada 15 | beberapa komponen sebagai berikut: 16 | 17 | 1. Spesifikasi bahasa pemrograman 18 | 2. Implementasi bahasa pemrograman dalam bentuk _compiler_ / _interpreter_ 19 | 3. _Package Manager_ yang digunakan untuk mengelola pustaka / paket yang diperlukan saat dilakukan 20 | proses kompilasi maupun untuk instalasi berbagai peranti pendukung yang dibutuhkan pemrogram saat 21 | membangun aplikasi. 22 | 4. _Build Tool_ yang digunakan untuk mengelola proses kompilasi serta hasil akhirnya. 23 | 24 | Hal tersebut juga berlaku untuk *Rust*. Meskipun seringkali hanya disebut *Rust*, biasanya sudah 25 | mengacu ke setidaknya spesifikasi bahasa pemrograman Rust serta _compiler_ dari Rust. Pada buku ini, 26 | penyebutan *Rust* akan mengacu pada spesifikasi bahasa pemrograman serta peranti standar untuk 27 | *compiler* maupun pustaka standar yang disertakan pada saat instalasi Rust. Informasi tentang Rust 28 | bisa diperoleh di <<#gbr-web-rust>>. 29 | 30 | [#gbr-web-rust] 31 | .Web Peranti Pengembangan Rust 32 | [link=https://www.rust-lang.org] 33 | image::01-01/web-rust-lang-org.png[] 34 | 35 | === Sejarah Singkat Rust (wip) 36 | 37 | 1. Rust pertama kali dibuat oleh salah seorang pegawai dari Mozilla yang bernama _Graydon Hoare_ sekitar tahun 2006. Saat itu, Graydon membuat bahasa pemrograman baru dan _compiler_ dari bahasa pemrograman tersebut menggunakan *OCaml*. 38 | 2. Mozilla mulai men-sponsori dan mendukung Rust untuk keperluan internal pada tahun 2009 (diumumkan tahun 2010). 39 | 3. Tahun 2010, pengembangan Rust menggunakan OCaml dihentikan, digantikan dengan _self-hosting 40 | compiler_ (Rust dibuat dengan menggunakan Rust). Tahun 2011, Rust berhasil digunakan untuk 41 | mengkompilasi dirinya sendiri. Saat itu, Rust menggunakan _LLVM_ sbagai _compiler backend_. 42 | 4. Versi stabil pertama (versi 1.0.0) dari Rust berhasil dirilis pada tanggal 15 Mei 2015. 43 | 5. Setelah itu, Rust menetapkan pola rilis pasti setiap 6 minggu, artinya setiap 6 minggu ada rilis baru untuk versi stabil, beta, dan _nightly_. 44 | 45 | === Paradigma Pemrograman Rust (wip) 46 | 47 | Paradigma pemrograman merupakan cara pandang untuk menyelesaikan permasalahan pemrograman. Rust tidak mempunyai suatu paradigma pemrograman spesifik tertentu, tetapi lebih ke arah _multi-paradigm_ atau mempunyai lebih dari satu paradigma. Secara umum, paradigma pemrograman Rust adalah: 48 | 49 | 1. Konkuren: mendukung pemrograman secara konkuren, artinya lebih dari satu unit komputasi bisa dieksekusi secara "bersamaan" (secara _overlap_, bergantian - tidak harus menunggu satu unit komputasi selesai baru kemudian satu unit komputasi berikutnya dieksekusi. 50 | 2. Fungsional: program dikonstruksi dengan menggunakan melakukan komposisi _function_. 51 | 3. Generik: tipe pada fungsi bisa dispesifikasikan belakangan, bukan pada saat pembuatan fungsi. 52 | 4. Imperatif: program terdiri atas berbagai _statement_ yang mengubah _state_ dari program (misal dengan memanipulasi variabel, dan lain-lain). 53 | 5. Terstruktur: program menekankan pada penggunakan berbagai struktur kendali serta subprogram, terutama digunakan untuk _readibility_. 54 | 6. PBO (Pemrograman Berorientasi Obyek): meski Rust tidak murni bahasa PBO, tetapi Rust mendukung berbagai fitur PBO yang memungkinkan pemrogram untuk mengkonstruksi program dengan pendekatan obyek yang mempunyai karakteristik serta perilaku tertentu dan adanya interaksi antar obyek tersebut dalam menyelesaikan masalah pemrograman. 55 | 56 | === Lisensi Rust (wip-nr) 57 | 58 | Semua artifak dari Rust (_compiler_, logo, situs Web, dan lain-lain) mempunyai lisensi ganda: 59 | 60 | 1. _MIT License_ 61 | 2. _Apache License_ - Versi 2.0 62 | 63 | === Software yang Dibangun Menggunakan Rust (wip) 64 | 65 | Rust digunakan untuk membangun berbagai software, mulai dari _low level_ sampai dengan _high level_. 66 | Istilah _low level_ dan _high level_ ini digunakan untuk menunjukkan kedekatan dengan akses mesin. 67 | _Low level_ dikenal juga dengan istilah _system programming_ (meski istilah ini bukan merupakan 68 | istilah yang kanonikal). Rust merupakan satu di antara sedikit bahasa pemrograman dan peranti 69 | pengembangan yang bisa digunakan utk semua level. Bagian ini menunjukkan beberapa software yang 70 | dibangun dengan menggunakan Rust. 71 | 72 | 1. *Servo* (https://servo.org/[]): _engine_ penjelajah Web (_Web browser_) yang digunakan dalam 73 | browser *Mozilla Firefox* melalui proyek *Quantum*. 74 | 2. *Redox* (https://www.redox-os.org/[]): sistem operasi baru dengan teknologi _microkernel_ dengan 75 | _userland_ mirip Unix. 76 | 3. *Nushell* (https://www.nushell.sh/[]): shell. 77 | 4. *TiKV* (https://tikv.org/[]): basis data _key-value_ transaksional yang terdistribusi. 78 | 5. *Deno* (https://deno.land/[]): _runtime_ untuk JavaScript dan TypeScript. 79 | 6. *Discord* (https://discord.com/[]): salah satu peranti pengembangan yang digunakan untuk 80 | mengembangkan sistem Discord. 81 | 82 | === Kelebihan dan Kekurangan Rust (wip) 83 | 84 | === Domain Masalah dari Rust (wip) 85 | 86 | Rust bisa digunakan untuk menyelesaikan berbagai masalah pada berbagai domain. Secara umum, Rust 87 | bisa digunakan untuk pembuatan software di aras rendah (*system programming*) maupun di berbagai 88 | masalah pemrograman aras atas. Beberapa domain masalah yang bisa diselesaikan oleh Rust antara lain: 89 | 90 | 1. **System Programming** 91 | 2. Akses ke peranti keras (*interfacing*) 92 | 3. CLI (*Command Line Interface*) 93 | 4. Backend 94 | 5. Aplikasi Web 95 | 6. Akses ke berbagai basis data 96 | 7. GUI (*Graphical User Interface*) 97 | 8. Cloud 98 | 99 | -------------------------------------------------------------------------------- /isi/01-02-instalasi-rust.adoc: -------------------------------------------------------------------------------- 1 | == Instalasi Rust (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Untuk menggunakan Rust, tentu saja anda harus melakukan instalasi terhadap Rust dan ekosistem yang 6 | bisa digunakan untuk mendukung proses membangun software menggunakan Rust. Bab ini membahas tentang 7 | berbagai cara yang bisa digunakan untuk mulai menggunakan Rust. Selain itu, di bab ini juga akan 8 | dibahas tentang berbagai peranti pengembangan yang lazim digunakan sebagai hasil dari instalasi 9 | serta pengenalan penggunaannya. 10 | 11 | === Rilis Rust (wip-nr) 12 | 13 | Rust mempunyai 3 kategori rilis: 14 | 15 | 1. _Stable_: rilis stabil, dengan _test_ yang dilakukan secara menyeluruh. 16 | 2. _Beta_: rilis versi ini merupakan rilis yang disiapkan untuk menjadi versi stabil berikutnya.. 17 | 3. _Nightly_: rilis versi ini merupakan rilis yang berisi berbagai eksperimen yang mungkin bisa 18 | masuk ke versi stabil berikutnya (setelah melalui versi _Beta_), maupun tidak akan pernah dimasukkan 19 | ke rilis Rust. 20 | 21 | Saat membangun aplikasi, pemrogram bebas untuk menggunakan kategori rilis manapun. Meskipun 22 | demikian, dianjurkan untuk menggunakan versi _Stable_ karena fitur yang ada di dalamnya adalah 23 | fitur-fitur yang sudah stabil sehingga memudahkan pemrogram untuk me-_maintain_ aplikasi yang 24 | dikembangkan. 25 | 26 | Untuk semua rilis tersebut, Rust menggunakan pedoman yang disebut dengan 27 | https://semver.org/[*Semantic Versioning*]. Dengan menggunakan pedoman ini, setiap rilis Rust 28 | terdiri atas 3 bagian: 29 | 30 | 1. MAJOR: rilis dengan perubahan API (_Application Programming Intergace_) yang tidak kompatibel 31 | dengan versi MAJOR sebelumnya. 32 | 2. MINOR: rilis dengan penambahan fungsionalitas yang kompatibel dengan versi sebelumnya. 33 | 3. PATCH: rilis dengan perbaikan terhadap _bugs_ yang kompatibel dengan versi sebelumnya. 34 | 35 | Sebagai contoh, versi 1.44.0 dari versi Rust berisi Rust dengan semua API yang kompatibel dengan 36 | versi 1.x.x sebelumnya. Angka 44 berarti penambahan fungsionalitas yang bersifat kompatibel dengan 37 | versi penambahan fungsionalitas sebelumnya. Angka 0 berarti sama sekali belum ada perubahan 38 | perbaikan _bug_ untuk versi 1.44 tersebut. 39 | 40 | === Edisi Rust (wip) 41 | 42 | === Rust Playground (wip) 43 | 44 | Jika kebutuhan kita hanya untuk mencoba beberapa bagian kode sumber, maka kita cukup hanya 45 | menggunakan https://play.rust-lang.org/[*Rust Playground*] saja. Setelah mengakses URL tersebut, 46 | kita bisa menuliskan kode sumber dan menjalankan kode sumber tersebut tanpa perlu melakukan 47 | instalasi peranti pengembangan Rust. 48 | 49 | image::01-02/rust-playground.png[] 50 | 51 | === Instalasi Rust (wip) 52 | 53 | [source,rust] 54 | .src/01-02/hello-plain/hello.rs 55 | ---- 56 | include::../{sourcedir}/01-02/hello-plain/hello.rs[] 57 | ---- 58 | <1> Bagian yang dieksekusi saat program hasil kompilasi dipanggil. 59 | <2> Isi dari program. 60 | 61 | [source,bash] 62 | .rustup 63 | ---- 64 | $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 65 | info: downloading installer 66 | 67 | Welcome to Rust! 68 | 69 | This will download and install the official compiler for the Rust 70 | programming language, and its package manager, Cargo. 71 | 72 | It will add the cargo, rustc, rustup and other commands to 73 | Cargo's bin directory, located at: 74 | 75 | /home/zaky/.cargo/bin 76 | 77 | This can be modified with the CARGO_HOME environment variable. 78 | 79 | Rustup metadata and toolchains will be installed into the Rustup 80 | home directory, located at: 81 | 82 | /home/zaky/.rustup 83 | 84 | This can be modified with the RUSTUP_HOME environment variable. 85 | 86 | This path will then be added to your PATH environment variable by 87 | modifying the profile file located at: 88 | 89 | /home/zaky/.profile 90 | 91 | You can uninstall at any time with rustup self uninstall and 92 | these changes will be reverted. 93 | 94 | Current installation options: 95 | 96 | 97 | default host triple: x86_64-unknown-linux-gnu 98 | default toolchain: stable 99 | profile: default 100 | modify PATH variable: yes 101 | 102 | 1) Proceed with installation (default) 103 | 2) Customize installation 104 | 3) Cancel installation 105 | >1 106 | 107 | info: profile set to 'default' 108 | info: default host triple is x86_64-unknown-linux-gnu 109 | info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu' 110 | info: latest update on 2020-06-04, rust version 1.44.0 (49cae5576 2020-06-01) 111 | info: downloading component 'cargo' 112 | 4.9 MiB / 4.9 MiB (100 %) 1.2 MiB/s in 4s ETA: 0s 113 | info: downloading component 'clippy' 114 | 1.9 MiB / 1.9 MiB (100 %) 1.1 MiB/s in 1s ETA: 0s 115 | info: downloading component 'rust-docs' 116 | 12.2 MiB / 12.2 MiB (100 %) 1.1 MiB/s in 11s ETA: 0s 117 | info: downloading component 'rust-std' 118 | 17.6 MiB / 17.6 MiB (100 %) 1.1 MiB/s in 15s ETA: 0s 119 | info: downloading component 'rustc' 120 | 60.2 MiB / 60.2 MiB (100 %) 1.1 MiB/s in 54s ETA: 0s 121 | info: downloading component 'rustfmt' 122 | 3.2 MiB / 3.2 MiB (100 %) 1.4 MiB/s in 2s ETA: 0s 123 | info: installing component 'cargo' 124 | info: installing component 'clippy' 125 | info: installing component 'rust-docs' 126 | 12.2 MiB / 12.2 MiB (100 %) 7.4 MiB/s in 1s ETA: 0s 127 | info: installing component 'rust-std' 128 | info: installing component 'rustc' 129 | 60.2 MiB / 60.2 MiB (100 %) 13.5 MiB/s in 6s ETA: 0s 130 | info: installing component 'rustfmt' 131 | info: default toolchain set to 'stable' 132 | 133 | stable installed - rustc 1.44.0 (49cae5576 2020-06-01) 134 | 135 | 136 | Rust is installed now. Great! 137 | 138 | To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH 139 | environment variable. Next time you log in this will be done 140 | automatically. 141 | 142 | To configure your current shell run source $HOME/.cargo/env 143 | $ 144 | ---- 145 | 146 | Setelah proses instalasi tersebut, ada file berisi variabel lingkungan (_environment variables_) 147 | yang harus diaktifkan, yaitu *$HOME/.cargp/env*. Berikut adalah kondisi sebelum diaktifkan dan 148 | setelah diaktifkan menggunakan perintah *source*: 149 | 150 | [source,bash] 151 | .cargo/env 152 | ---- 153 | $ rustc 154 | -bash: rustc: perintah tidak ditemukan 155 | $ cargo 156 | -bash: cargo: perintah tidak ditemukan 157 | $ source .cargo/env 158 | $ rustc --version 159 | rustc 1.44.0 (49cae5576 2020-06-01) 160 | $ cargo --version 161 | cargo 1.44.0 (05d080faa 2020-05-06) 162 | $ 163 | ---- 164 | 165 | Secara default, isi dari file *.cargo/env* sudah diletakkan pada file *.profile* sehingga akan aktif 166 | setiap login. 167 | 168 | === Memahami Ekosistem Rust (wip) 169 | 170 | === Pengenalan Cargo (wip) 171 | 172 | ==== Inisialisasi Proyek (wip) 173 | 174 | 175 | ==== Membangun Proyek (wip) 176 | 177 | 178 | ==== Membersihkan Hasil Kompilasi (wip) 179 | 180 | 181 | ==== Antara Debug dan Release (wip) 182 | 183 | 184 | ==== Menjalankan Hasil (wip) 185 | 186 | -------------------------------------------------------------------------------- /isi/01-03-ide-untuk-rust.adoc: -------------------------------------------------------------------------------- 1 | == IDE untuk Rust (wip) 2 | 3 | === Tentang Bab Ini (wip-nr) 4 | 5 | IDE (_Integrated Development Environment_) adalah software yang digunakan sebagai peranti 6 | pengembangan terintegrasi. IDE sangat penting dalam membangun aplikasi. Produktivitas pemrogram 7 | biasanya sangat tergantung dari kepiawaiannya menggunakan IDE. Bab ini membahas tentang IDE yang 8 | bisa digunakan untk membangun aplikasi menggunakan Rust. Ada dua software dasar yang akan dijelaskan 9 | dan digunakan dalam bab ini, yaitu: 10 | 11 | 1. Vim 12 | 2. Visual Studio Code / VSCodium 13 | 3. Eclipse 14 | 15 | === Vim (wip) 16 | 17 | 18 | 19 | === Visual Studio Code / VSCodium (wip) 20 | 21 | 22 | === Eclipse (wip) 23 | 24 | https://eclipse.org[Eclipse Foundation] juga mempunyai proyek yang didedikasikan untuk membuat IDE 25 | Rust dengan basis IDE Eclipse untuk membangun aplikasi menggunakan Rust. Untuk memperoleh software 26 | ini, silahkan akses ke https://www.eclipse.org/downloads/packages/ dan pilih 27 | <<#gbr-web-ecipse-rust>>. Untuk menjalankan ini, anda seharusnya sudah mempunyai JDK (Java 28 | Development Kit) terinstall di komputer anda. 29 | 30 | [#gbr-web-eclipse-rust] 31 | .Paket Eclipse for Rust Developers 32 | [link=https://www.eclipse.org/downloads/packages] 33 | image::01-03/01-download.png[] 34 | 35 | Setelah itu, ekstrak hasil download: 36 | 37 | [source,bash] 38 | ---- 39 | $ tar -xvf eclipse-rust-2020-06-R-linux-gtk-x86_64.tar.gz 40 | eclipse/ 41 | eclipse/p2/ 42 | eclipse/p2/org.eclipse.equinox.p2.engine/ 43 | eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/ 44 | eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/epp.package.rust.profile/ 45 | eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/epp.package.rust.profile/1592224392705.profile.gz 46 | eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/epp.package.rust.profile/.lock 47 | eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/epp.package.rust.profile/.data/ 48 | ... 49 | ... 50 | ... 51 | eclipse/dropins/ 52 | eclipse/eclipse.ini 53 | eclipse/configuration/ 54 | eclipse/configuration/org.eclipse.equinox.simpleconfigurator/ 55 | eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info 56 | eclipse/configuration/config.ini 57 | eclipse/configuration/org.eclipse.update/ 58 | eclipse/configuration/org.eclipse.update/platform.xml 59 | $ 60 | ---- 61 | 62 | Hasil ekstrak adalah direktori *eclipse* dengan isi sebagai berikut: 63 | 64 | [source,bash] 65 | ---- 66 | $ ls -la 67 | total 372 68 | drwxr-xr-x 8 bpdp bpdp 4096 Jun 15 19:33 ./ 69 | drwxr-xr-x 3 bpdp bpdp 4096 Jun 18 21:57 ../ 70 | -rw-r--r-- 1 bpdp bpdp 101678 Jun 15 19:33 artifacts.xml 71 | drwxr-xr-x 4 bpdp bpdp 4096 Jun 15 19:33 configuration/ 72 | drwxr-xr-x 2 bpdp bpdp 4096 Jun 15 19:33 dropins/ 73 | -rwxr-xr-x 1 bpdp bpdp 61176 Jun 4 22:24 eclipse* 74 | -rw-r--r-- 1 bpdp bpdp 630 Jun 15 19:33 eclipse.ini 75 | -rw-r--r-- 1 bpdp bpdp 61 Jun 4 20:56 .eclipseproduct 76 | drwxr-xr-x 49 bpdp bpdp 4096 Jun 15 19:33 features/ 77 | -rwxr-xr-x 1 bpdp bpdp 140566 Jun 4 22:24 icon.xpm* 78 | drwxr-xr-x 4 bpdp bpdp 4096 Jun 15 19:33 p2/ 79 | drwxr-xr-x 9 bpdp bpdp 36864 Jun 15 19:33 plugins/ 80 | drwxr-xr-x 2 bpdp bpdp 4096 Jun 15 19:33 readme/ 81 | $ 82 | ---- 83 | 84 | Untuk menjalankan *Eclipse for Rust Developers*, masuk ke direktori hasil ekstrak kemudian eksekusi 85 | file *eclipse* sebagai berikut: 86 | 87 | [source,bash] 88 | ---- 89 | $ cd eclipse 90 | $ ./eclipse 91 | ---- 92 | 93 | Setelah *splash screen*, Eclipse akan menanyakan *workspace* tempat menyimpan berbagai proyek Rust 94 | seperti pada gambar <<#gbr-eclipse-start>>. Isikan seperti yang anda kehendaki (bebas), setelah itu, 95 | klik pada *Launch*, maka akan dimunculkan <<#gbr-main-window-eclipse>>. 96 | 97 | [#gbr-eclipse-start] 98 | .Meneteapkan *workspace* untuk Eclipse for Rust Developers 99 | image::01-03/02-start-eclipse.png[] 100 | 101 | [#gbr-main-window-eclipse] 102 | .Tampilan pembuka Eclipse for Rust Developers 103 | image::01-03/03-main-window-eclipse.png[] 104 | 105 | -------------------------------------------------------------------------------- /isi/01-04-ekosistem-rust.adoc: -------------------------------------------------------------------------------- 1 | == Ekosistem Rust (wip) 2 | 3 | === Tentang Bab Ini (wip-nr) 4 | 5 | Mempelajari suatu bahasa pemrograman, khususnya dalam rangka untuk membangun aplikasi, tidak hanya 6 | selesai dengan mempelajari unsur bahasanya saja. Di luar itu, biasanya masih banyak unsur pendukung 7 | yang membentuk suatu ekosistem. Dengan memahami ekosistem Rust, seorang pemrogram yang menggunakan 8 | Rust akan relatif lebih mudah untuk menggunakan berbagai macam sumber daya untuk menyelesaikan 9 | masalah pemrograman yang dihadapi. 10 | 11 | === Paket (_Crates_) (wip) 12 | 13 | 14 | === _Crates_ yang Bermanfaat Bagi Pemrogram Rust (wip) 15 | 16 | ==== Evcxr (https://github.com/google/evcxr/tree/master/evcxr_repl[]) (wip) 17 | 18 | _Crate_ ini digunakan sebagai REPL (_Read-Eval-Print-Loop_) untuk Rust. Untuk instalasi: 19 | 20 | .Evcxr 21 | [source,bash] 22 | ---- 23 | cargo install evcxr_repl 24 | ---- 25 | 26 | ==== IRust (https://github.com/sigmaSd/IRust[]) (wip) 27 | 28 | _Crate_ ini juga digunakan sebagai REPL untuk Rust. Untuk instalasi: 29 | 30 | .IRust 31 | [source,bash] 32 | ---- 33 | cargo install irust 34 | ---- 35 | 36 | === Berbagai Web untuk Melacak Status dalam Domain Tertentu (wip) 37 | 38 | Komunitas membangun berbagai situs Web untuk melacak kesiapan Rust dalam domain tertentu. Situs Web 39 | tersebut biasanya dikenal dengan nama **Are we X yet?** dengan **X** adalah domain tertentu 40 | tersebut. Daftar dari **Are we X yet?** bisa dilihat di https://wiki.mozilla.org/Areweyet[] 41 | 42 | === Mengikuti Perkembangan Rust (wip) 43 | 44 | Ada berbagai sumber daya di Internet yang bisa digunakan untuk mengikuti perkembangan dari Rust 45 | serta ekosistemnya. 46 | 47 | 1. *This Week in Rust*, bisa diakses di https://this-week-in-rust.org/[] 48 | 2. *Twitter*, berbagai _account_ yang bisa diikuti: 49 | * https://twitter.com/rustlang[]: Twitter resmi dari Rust 50 | * _Hashtag_ #rustlang di Twitter 51 | 52 | -------------------------------------------------------------------------------- /isi/01-05-struktur-proyek-rust.adoc: -------------------------------------------------------------------------------- 1 | == Struktur Proyek Rust (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Bab ini membahas tentang strukutur direktori dan file yang ada pada suatu proyek Rust. Direktori 6 | serta beberapa file default yang ada di dalamnya merupakan direktori serta file yang dibuat dengan 7 | menggunakan *cargo*. Bab ini menjelaskan tentang struktur proyek yang dibuat dengan menggunakan 8 | *cargo*. 9 | 10 | === Cargo dan Pembuatan Direktori serta File-File Proyek (wip) 11 | 12 | Secara umum, *cargo* bisa digunakan untuk membuat 2 tipe proyek Rust: 13 | 14 | 1. *Binary executable*: jika hasil dari proyek digunakan dengan cara dieksekusi / dijalankan secara 15 | langsung. 16 | 2. *Library*: jikha hasil dari proyek dimaksudkan sebagai pustaka yang bisa digunakan oleh 17 | pemrogram Rust. 18 | 19 | Untuk memulai membuat proyek menggunakan Rust, kita bisa menggunakan cargo dengan perintah-perintah 20 | berikut ini: 21 | 22 | [source,bash] 23 | .... 24 | $ cargo new bindefault 25 | Created binary (application) `bindefault` package 26 | $ cargo new --lib libdefault 27 | Created library `libdefault` package 28 | $ 29 | .... 30 | 31 | Hasil dari perintah-perintah di atas adalah 2 direktori: 32 | 33 | 1. **bindefault**: untuk proyek yang menghasilkan *binary executable*. 34 | 2. **libdefault**: untuk proyek yang menghasilkan pustaka yang bisa digunakan para proyek 35 | pengembangan software aplikasi berbasis Rust lainnya. 36 | 37 | Perbedaan dari kedua tipe proyek tersebut bisa kita lihat dari struktur serta file-file yang ada 38 | pada direktori tersebut: 39 | 40 | [source,bash] 41 | .... 42 | $ 43 | . 44 | ├── bindefault 45 | │   ├── Cargo.toml 46 | │   └── src 47 | │   └── main.rs 48 | └── libdefault 49 | ├── Cargo.toml 50 | └── src 51 | └── lib.rs 52 | 53 | 4 directories, 4 files 54 | 55 | $ 56 | .... 57 | 58 | Berikut adalah penjelasan tentang struktur direktori beserta berbagai file yang ada pada proyek 59 | tersebut: 60 | 61 | 1. **Cargo.toml**: File ini berisi metadata, yaitu data tentang proyek Rust yang aktif. 62 | 2. **src**: Direktori ini digunakan untuk menyimpan berbagai *source code* Rust. Pemrogram Rust 63 | akan membuat *source code* di direktori ini. 64 | 65 | === Proses Build (wip) 66 | 67 | Setelah memperoleh struktur direktori default seperti di atas, pemrograman akan meneruskan proses 68 | coding dengan menambahkan *source code*, pustaka, dan lain-lain. Setelah itu, akan dilakukan proses 69 | *build* untuk mengkompilasi *source code*. Proses build ini akan menghasilkan banyak direktori dan 70 | file sesuai dengan versi *build*. Ada 2 versi *build* yang bisa dihasilkan: 71 | 72 | 1. Versi *debug*: merupakan versi default, dilakukan jika kita tidak menggunakan parameter apapun 73 | saat melakukan proses *build*. Hasil dari proses ini merupakan hasil yang masih menyertakan komponen 74 | untuk *debugging* pada hasil proses *build*. 75 | 2. Versi *release*: merupakan versi *build* yang dilakukan jika menyertakan *--release* sebagai 76 | parameter *cargo build*. Hasil dari proses ini merupakan hasil yang siap untuk dirilis dengan 77 | optimasi siap untuk dijalankan *end user*. Versi ini tidak menyertakan komponen untuk *debugging*. 78 | 79 | .... 80 | $ cargo build 81 | Updating crates.io index 82 | Compiling libc v0.2.71 83 | Compiling bitflags v1.2.1 84 | Compiling gimli v0.21.0 85 | Compiling cfg-if v0.1.10 86 | Compiling unicode-width v0.1.7 87 | Compiling rustc-demangle v0.1.16 88 | Compiling object v0.19.0 89 | Compiling ansi_term v0.11.0 90 | Compiling strsim v0.8.0 91 | Compiling vec_map v0.8.2 92 | Compiling smallvec v0.4.5 93 | Compiling textwrap v0.11.0 94 | Compiling atty v0.2.14 95 | Compiling addr2line v0.12.1 96 | Compiling clap v2.33.1 97 | Compiling backtrace v0.3.48 98 | Compiling error-chain v0.10.0 99 | Compiling ferris-says v0.1.2 100 | Compiling binproses v0.1.0 (/home/bpdp/kerjaan/git-repos/oldstager/current/github/rustid/buku-pemrograman-rust/src/01-05/proses/binproses) 101 | Finished dev [unoptimized + debuginfo] target(s) in 18.56s 102 | $ 103 | .... 104 | 105 | Versi rilis: 106 | 107 | .... 108 | $ cargo build --release 109 | Compiling libc v0.2.71 110 | Compiling gimli v0.21.0 111 | Compiling bitflags v1.2.1 112 | Compiling object v0.19.0 113 | Compiling rustc-demangle v0.1.16 114 | Compiling unicode-width v0.1.7 115 | Compiling cfg-if v0.1.10 116 | Compiling strsim v0.8.0 117 | Compiling ansi_term v0.11.0 118 | Compiling vec_map v0.8.2 119 | Compiling smallvec v0.4.5 120 | Compiling textwrap v0.11.0 121 | Compiling atty v0.2.14 122 | Compiling clap v2.33.1 123 | Compiling addr2line v0.12.1 124 | Compiling backtrace v0.3.48 125 | Compiling error-chain v0.10.0 126 | Compiling ferris-says v0.1.2 127 | Compiling binproses v0.1.0 (/home/bpdp/kerjaan/git-repos/oldstager/current/github/rustid/buku-pemrograman-rust/src/01-05/proses/binproses) 128 | Finished release [optimized] target(s) in 12.21s 129 | $ 130 | .... 131 | 132 | Setelah proses ini, isi dari direktori proyek akan berubah. Jumlah file akan berbeda-beda untuk tiap 133 | proyek karena masalah dependensi, tetapi pada umumnya, struktur sama: 134 | 135 | .... 136 | target/ 137 | ├── debug 138 | │   ├── binproses 139 | │   ├── binproses.d 140 | │   ├── build 141 | │   ├── deps 142 | │   ├── examples 143 | │   └── incremental 144 | └── release 145 | ├── binproses 146 | ├── binproses.d 147 | ├── build 148 | ├── deps 149 | ├── examples 150 | └── incremental 151 | 152 | 10 directories, 4 files 153 | .... 154 | 155 | 156 | -------------------------------------------------------------------------------- /isi/02-01-variabel-komentar.adoc: -------------------------------------------------------------------------------- 1 | == Variabel dan Komentar (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /isi/02-02-tipe-data.adoc: -------------------------------------------------------------------------------- 1 | == Tipe Data (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Tipe data 6 | 7 | -------------------------------------------------------------------------------- /isi/02-03-fungsi.adoc: -------------------------------------------------------------------------------- 1 | == Fungsi (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Fungsi 6 | 7 | -------------------------------------------------------------------------------- /isi/02-04-pengendali-aliran.adoc: -------------------------------------------------------------------------------- 1 | == Pengandali Aliran Program (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Pengendali aliran program 6 | 7 | -------------------------------------------------------------------------------- /isi/02-05-struktur-data.adoc: -------------------------------------------------------------------------------- 1 | == Struktur Data (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Struktur data 6 | 7 | -------------------------------------------------------------------------------- /isi/02-06-ownership.adoc: -------------------------------------------------------------------------------- 1 | == Ownership (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Ownership 6 | 7 | -------------------------------------------------------------------------------- /isi/02-07-enum.adoc: -------------------------------------------------------------------------------- 1 | == Enum (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | Enum 6 | -------------------------------------------------------------------------------- /isi/02-08-pattern-matching.adoc: -------------------------------------------------------------------------------- 1 | == Pattern Matching (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /isi/02-09-reusability.adoc: -------------------------------------------------------------------------------- 1 | == _Reusability_ (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /isi/02-10-mengelola-error.adoc: -------------------------------------------------------------------------------- 1 | == Mengelola _Error_ (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /isi/03-01-mengelola-string.adoc: -------------------------------------------------------------------------------- 1 | == Mengelola String (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | 6 | -------------------------------------------------------------------------------- /isi/03-02-pemrograman-konkuren.adoc: -------------------------------------------------------------------------------- 1 | == Pemrograman Konkuren (wip) 2 | 3 | === Tentang Bab Ini 4 | 5 | 6 | -------------------------------------------------------------------------------- /isi/03-03-net.adoc: -------------------------------------------------------------------------------- 1 | == Net (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | 6 | -------------------------------------------------------------------------------- /isi/03-04-path.adoc: -------------------------------------------------------------------------------- 1 | == Path (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | 6 | -------------------------------------------------------------------------------- /isi/03-05-sistem-file.adoc: -------------------------------------------------------------------------------- 1 | == Sistem File (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | 6 | -------------------------------------------------------------------------------- /isi/03-06-operasi-io.adoc: -------------------------------------------------------------------------------- 1 | == Operasi I/O (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /isi/03-07-mengelola-proses.adoc: -------------------------------------------------------------------------------- 1 | == Mengelola Proses (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | 6 | -------------------------------------------------------------------------------- /isi/04-01-akses-basis-data.adoc: -------------------------------------------------------------------------------- 1 | == Akses Basis Data (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /isi/04-02-antarmuka-grafis.adoc: -------------------------------------------------------------------------------- 1 | == Antarmuka Grafis (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /isi/04-03-antarmuka-teks.adoc: -------------------------------------------------------------------------------- 1 | == Antarmuka Teks (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | 6 | -------------------------------------------------------------------------------- /isi/04-04-pemrograman-web.adoc: -------------------------------------------------------------------------------- 1 | == Pemrograman Web (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /isi/04-05-serialisasi-data.adoc: -------------------------------------------------------------------------------- 1 | == Serialisasi Data (wip) 2 | 3 | === Tentang Bab Ini (wip) 4 | 5 | -------------------------------------------------------------------------------- /kontribusi.md: -------------------------------------------------------------------------------- 1 | # Kontribusi Penulisan Buku 2 | 3 | Buku ini akan bisa terwujud jika komunitas berpartisipasi dan bergotong royong untuk menyelesaikan 4 | pembuatan buku ini. Oleh karena itu, kami mendorong anda untuk berkontribusi. Dokumen ini 5 | menjelaskan berbagai hal yang terkait dengan kontribusi tersebut. 6 | 7 | ## Lisensi 8 | 9 | Anda harus paham bahwa jika anda berkontribusi, berarti kontribusi anda akan masuk dalam buku dengan 10 | lisensi CC-BY-SA Internasional 4.0. Implikasinya bisa dilihat pada bagian [README.md](README.md). 11 | 12 | ## Persiapan 13 | 14 | Untuk berkontribusi, setidaknya anda harus paham: 15 | 1. Rust (tentu saja) 16 | 2. Git. Semua kontribusi dilakukan dengan mengirimkan *Pull Request* 17 | 3. AsciiDoc - khususnya dengan menggunakan [Asciidoctor](https://asciidoctor.org). 18 | 19 | ## Kontribusi 20 | 21 | Semua isi teks Asciidoc ada di direktori [isi](isi/). Sesuaikan dengan nama file yang di *include* pada file [pemrograman-rust.adoc](pemrograman-rust.adoc). Selain itu, ada beberapa hal yang perlu dipahami. 22 | 23 | ### Jika kontribusi anda mengandung gambar 24 | 25 | * Letakkan gambar di direktori [gambar](gambar/) sesuai dengan bab yang anda buat. Jika belum ada direktori untuk bab, silahkan dibuat dengan ketentuan penamaan `xx-yy` dengan `xx` adalah angka bagian dan `yy` adalah angka bab (misal `01-01` jika untuk `Bagian 1 - Bab 1`). 26 | * Pada dokumen Asciidoc, gunakan potongan `asciidoctor` berikut ini untuk menampilkan gambar. 27 | 28 | ```asciidoc 29 | [#gbr-web-rust] 30 | .Web Peranti Pengembangan Rust 31 | [link=https://www.rust-lang.org] 32 | image::bab-01/web-rust-lang-org.png[] 33 | ``` 34 | 35 | * Jika akan membuat link *cross reference* yang mengacu ke gambar tersebut: 36 | 37 | ```asciidoc 38 | ... Informasi tentang Rust bisa diperoleh di <<#gbr-web-rust>> ... 39 | ``` 40 | 41 | ### Jika kontribusi anda mengandung *source code* 42 | 43 | * letakkan *source code* tersebut di direktori [src](src/) sesuai dengan bab yang anda buat. JIka belum ada direktori untuk bab, silahkan dibuat dengan ketentuan penamaan `xx-yy` dengan `xx` adalah angka bagian dan `nn` adalah angka bab ke nn pada bagian tersebut (lihat pola penamaan file asciidoc dari [isi](isi/) - misal `01-01` jika untuk `Bagian 1 - Bab ke 1 pada bagian tersebut`. Nama proyek sebaiknya sesuai dengan tujuan proyek. 44 | * Pada dokumen Asciidoc, gunakan *source code* berikut: 45 | 46 | ``` 47 | [source,rust] 48 | ---- 49 | include::../{sourcedir}/01-01/ferris/src/main.rs[] 50 | ---- 51 | <1> Penjelasan 1 52 | <2> Penjelasan 2 53 | ``` 54 | 55 | **Catatan**: 56 | 57 | 1. Bagian yang penting di atas adalah `/01-01/ferris/src/main.rs` yang menunjukkan letak dari *source code* yang anda acu. 58 | 2. Asciidoc memungkinkan adanya *callout*, gunakan jika anda ingin menjelaskan baris tertentu. 59 | 3. Usahakan setiap satu *source code* yang cukup kompleks, dibuat lengkap menggunakan `cargo`. Pada saat mengirimkan *pull request*, `cargo clean` lebih dulu setelah anda pastikan bisa berjalan dengan baik atau sertakan [.gitignore](https://github.com/github/gitignore/blob/master/Rust.gitignore). Direktori yang anda kirimkan tersebut bukan direktori yang ada di GitHub - konsekuensinya, tidak ada direktori `.git`. 60 | 61 | 62 | -------------------------------------------------------------------------------- /pemrograman-rust.adoc: -------------------------------------------------------------------------------- 1 | = Pemrograman Rust 2 | Bambang Purnomosidi D. P. 3 | v0.0.1-rev-{localdatetime} 4 | :doctype: book 5 | :toc: 6 | :toc-title: Daftar Isi 7 | :table-caption: Tabel 8 | :source-highlighter: rouge 9 | :sectnums: 10 | :description: Dokumen ini merupakan buku hasil kerjasama komunitas Rust Indonesia \ 11 | yang membahas tentang dasar-dasar pemrograman Rust, eksosistem Rust \ 12 | serta penggunaan Rust untuk berbagai keperluan pengembangan software. 13 | :sourcedir: src 14 | :includedir: isi 15 | :imagesdir: gambar 16 | :chapter-label: Bab 17 | :figure-caption: Gambar 18 | //// 19 | Jika satu gambar penuh - cover 20 | :front-cover-image: image::./images/title_page.png[] 21 | //// 22 | :title-logo-image: gambar/logo-rust.png 23 | 24 | 25 | [preface] 26 | = Pengantar 27 | 28 | Sebuah buku tentang https://www.rust-lang.org[Bahasa Pemrograman Rust]. 29 | 30 | === Penghargaan 31 | 32 | Kami mengucapkan terima kasih atas partisipasi dari rekan-rekan semua. 33 | 34 | = Bagian I: Pengenalan dan Ekosistem 35 | 36 | [partintro] 37 | -- 38 | Bagian ini menjelaskan tentang gambaran umum dari Rust serta persiapan untuk membangun aplikasi 39 | menggunakan Rust 40 | -- 41 | 42 | include::{includedir}/01-01-mengenal-rust.adoc[] 43 | 44 | include::{includedir}/01-02-instalasi-rust.adoc[] 45 | 46 | include::{includedir}/01-03-ide-untuk-rust.adoc[] 47 | 48 | include::{includedir}/01-04-ekosistem-rust.adoc[] 49 | 50 | include::{includedir}/01-05-struktur-proyek-rust.adoc[] 51 | 52 | = Bagian II: Sintaksis dan Semantik dari Rust 53 | 54 | [partintro] 55 | -- 56 | Bagian ini menjelaskan tentang sintaksis dari bahasa pemrograman Rust. Beberapa bagian sudah 57 | membahas tentang pustaka standar sesuai pada materi pembahasan. Jika merupakan pustaka standar, 58 | bagian tersebut akan diberi catatan. 59 | -- 60 | 61 | include::{includedir}/02-01-variabel-komentar.adoc[] 62 | 63 | include::{includedir}/02-02-tipe-data.adoc[] 64 | 65 | include::{includedir}/02-03-fungsi.adoc[] 66 | 67 | include::{includedir}/02-04-pengendali-aliran.adoc[] 68 | 69 | include::{includedir}/02-05-struktur-data.adoc[] 70 | 71 | include::{includedir}/02-06-ownership.adoc[] 72 | 73 | include::{includedir}/02-07-enum.adoc[] 74 | 75 | include::{includedir}/02-08-pattern-matching.adoc[] 76 | 77 | include::{includedir}/02-09-reusability.adoc[] 78 | 79 | include::{includedir}/02-10-mengelola-error.adoc[] 80 | 81 | = Bagian III: Pustaka Standar Rust 82 | 83 | [partintro] 84 | -- 85 | Bagian ini menjelaskan berbagai pustaka standar dari Rust. Pustaka standar merupakan API yang 86 | menjadi bagian dari Rust dan bisa diakses setelah kita melakukan instalasi Rust tanpa perlu 87 | melakukan instalasi tambahan lain. Bagian ini tidak menjelaskan secara rinci semua pustaka standar, 88 | tetapi hanya beberapa saja. Setelah itu, pembaca bisa melihat pada dokumentasi lengkap dari pustaka 89 | standar dari Rust untuk mengetahui lebih lanjut. 90 | -- 91 | 92 | include::{includedir}/03-01-mengelola-string.adoc[] 93 | 94 | include::{includedir}/03-02-pemrograman-konkuren.adoc[] 95 | 96 | include::{includedir}/03-03-net.adoc[] 97 | 98 | include::{includedir}/03-04-path.adoc[] 99 | 100 | include::{includedir}/03-05-sistem-file.adoc[] 101 | 102 | include::{includedir}/03-06-operasi-io.adoc[] 103 | 104 | include::{includedir}/03-07-mengelola-proses.adoc[] 105 | 106 | = Bagian IV: Topik Khusus 107 | 108 | [partintro] 109 | -- 110 | Bagian ini menjelaskan berbagai topik pemrograman khusus yang bisa dilakukan dengan menggunakan 111 | Rust. 112 | -- 113 | 114 | include::{includedir}/04-01-akses-basis-data.adoc[] 115 | 116 | include::{includedir}/04-03-antarmuka-teks.adoc[] 117 | 118 | include::{includedir}/04-02-antarmuka-grafis.adoc[] 119 | 120 | include::{includedir}/04-04-pemrograman-web.adoc[] 121 | 122 | include::{includedir}/04-05-serialisasi-data.adoc[] 123 | 124 | -------------------------------------------------------------------------------- /src/01-02/ferris/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /src/01-02/ferris/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "addr2line" 5 | version = "0.12.1" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | checksum = "a49806b9dadc843c61e7c97e72490ad7f7220ae249012fbda9ad0609457c0543" 8 | dependencies = [ 9 | "gimli", 10 | ] 11 | 12 | [[package]] 13 | name = "ansi_term" 14 | version = "0.11.0" 15 | source = "registry+https://github.com/rust-lang/crates.io-index" 16 | checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 17 | dependencies = [ 18 | "winapi", 19 | ] 20 | 21 | [[package]] 22 | name = "atty" 23 | version = "0.2.14" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 26 | dependencies = [ 27 | "hermit-abi", 28 | "libc", 29 | "winapi", 30 | ] 31 | 32 | [[package]] 33 | name = "backtrace" 34 | version = "0.3.48" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "0df2f85c8a2abbe3b7d7e748052fdd9b76a0458fdeb16ad4223f5eca78c7c130" 37 | dependencies = [ 38 | "addr2line", 39 | "cfg-if", 40 | "libc", 41 | "object", 42 | "rustc-demangle", 43 | ] 44 | 45 | [[package]] 46 | name = "bitflags" 47 | version = "1.2.1" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 50 | 51 | [[package]] 52 | name = "cfg-if" 53 | version = "0.1.10" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 56 | 57 | [[package]] 58 | name = "clap" 59 | version = "2.33.1" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" 62 | dependencies = [ 63 | "ansi_term", 64 | "atty", 65 | "bitflags", 66 | "strsim", 67 | "textwrap", 68 | "unicode-width", 69 | "vec_map", 70 | ] 71 | 72 | [[package]] 73 | name = "error-chain" 74 | version = "0.10.0" 75 | source = "registry+https://github.com/rust-lang/crates.io-index" 76 | checksum = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8" 77 | dependencies = [ 78 | "backtrace", 79 | ] 80 | 81 | [[package]] 82 | name = "ferris" 83 | version = "0.1.0" 84 | dependencies = [ 85 | "ferris-says", 86 | ] 87 | 88 | [[package]] 89 | name = "ferris-says" 90 | version = "0.1.2" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "16799a62a45bd9146f7eb8d2191893ce66f249901171c67a10b6e5e45942619d" 93 | dependencies = [ 94 | "clap", 95 | "error-chain", 96 | "smallvec", 97 | ] 98 | 99 | [[package]] 100 | name = "gimli" 101 | version = "0.21.0" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c" 104 | 105 | [[package]] 106 | name = "hermit-abi" 107 | version = "0.1.13" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "91780f809e750b0a89f5544be56617ff6b1227ee485bcb06ebe10cdf89bd3b71" 110 | dependencies = [ 111 | "libc", 112 | ] 113 | 114 | [[package]] 115 | name = "libc" 116 | version = "0.2.71" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49" 119 | 120 | [[package]] 121 | name = "object" 122 | version = "0.19.0" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | checksum = "9cbca9424c482ee628fa549d9c812e2cd22f1180b9222c9200fdfa6eb31aecb2" 125 | 126 | [[package]] 127 | name = "rustc-demangle" 128 | version = "0.1.16" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 131 | 132 | [[package]] 133 | name = "smallvec" 134 | version = "0.4.5" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10" 137 | 138 | [[package]] 139 | name = "strsim" 140 | version = "0.8.0" 141 | source = "registry+https://github.com/rust-lang/crates.io-index" 142 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 143 | 144 | [[package]] 145 | name = "textwrap" 146 | version = "0.11.0" 147 | source = "registry+https://github.com/rust-lang/crates.io-index" 148 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 149 | dependencies = [ 150 | "unicode-width", 151 | ] 152 | 153 | [[package]] 154 | name = "unicode-width" 155 | version = "0.1.7" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" 158 | 159 | [[package]] 160 | name = "vec_map" 161 | version = "0.8.2" 162 | source = "registry+https://github.com/rust-lang/crates.io-index" 163 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 164 | 165 | [[package]] 166 | name = "winapi" 167 | version = "0.3.8" 168 | source = "registry+https://github.com/rust-lang/crates.io-index" 169 | checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 170 | dependencies = [ 171 | "winapi-i686-pc-windows-gnu", 172 | "winapi-x86_64-pc-windows-gnu", 173 | ] 174 | 175 | [[package]] 176 | name = "winapi-i686-pc-windows-gnu" 177 | version = "0.4.0" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 180 | 181 | [[package]] 182 | name = "winapi-x86_64-pc-windows-gnu" 183 | version = "0.4.0" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 186 | -------------------------------------------------------------------------------- /src/01-02/ferris/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "ferris" 3 | version = "0.1.0" 4 | authors = ["Bambang Purnomosidi D. P. "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | ferris-says = "0.1" 11 | -------------------------------------------------------------------------------- /src/01-02/ferris/src/main.rs: -------------------------------------------------------------------------------- 1 | use ferris_says::say; // <1> 2 | use std::io::{stdout, BufWriter}; 3 | 4 | fn main() { 5 | let stdout = stdout(); 6 | let message = String::from("Hello fellow Rustaceans!"); 7 | let width = message.chars().count(); 8 | 9 | let mut writer = BufWriter::new(stdout.lock()); 10 | say(message.as_bytes(), width, &mut writer).unwrap(); // <2> 11 | } 12 | -------------------------------------------------------------------------------- /src/01-02/hello-plain/hello.rs: -------------------------------------------------------------------------------- 1 | fn main() { // <1> 2 | 3 | println!("Hello World!"); // <2> 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/01-02/hello-plain/kompilasi.txt: -------------------------------------------------------------------------------- 1 | rustc hello.rs 2 | -------------------------------------------------------------------------------- /src/01-05/default/bindefault/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "bindefault" 3 | version = "0.1.0" 4 | authors = ["Bambang Purnomosidi D. P. "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | -------------------------------------------------------------------------------- /src/01-05/default/bindefault/src/main.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | println!("Hello, world!"); 3 | } 4 | -------------------------------------------------------------------------------- /src/01-05/default/libdefault/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "libdefault" 3 | version = "0.1.0" 4 | authors = ["Bambang Purnomosidi D. P. "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | -------------------------------------------------------------------------------- /src/01-05/default/libdefault/src/lib.rs: -------------------------------------------------------------------------------- 1 | #[cfg(test)] 2 | mod tests { 3 | #[test] 4 | fn it_works() { 5 | assert_eq!(2 + 2, 4); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/01-05/proses/binproses/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 6 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html 7 | Cargo.lock 8 | 9 | # These are backup files generated by rustfmt 10 | **/*.rs.bk 11 | -------------------------------------------------------------------------------- /src/01-05/proses/binproses/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "binproses" 3 | version = "0.1.0" 4 | authors = ["Bambang Purnomosidi D. P. "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | ferris-says = "0.1" 11 | -------------------------------------------------------------------------------- /src/01-05/proses/binproses/src/main.rs: -------------------------------------------------------------------------------- 1 | use ferris_says::say; // from the previous step 2 | use std::io::{stdout, BufWriter}; 3 | 4 | fn main() { 5 | let stdout = stdout(); 6 | let message = String::from("Hello fellow Rustaceans!"); 7 | let width = message.chars().count(); 8 | 9 | let mut writer = BufWriter::new(stdout.lock()); 10 | say(message.as_bytes(), width, &mut writer).unwrap(); 11 | } 12 | --------------------------------------------------------------------------------