Bahasa Pemrograman

Julia

Jalur komputasi numerik dengan Julia dari REPL hingga proyek ilmiah yang cepat, teruji, dan dapat diinteroperasikan.

Jalur ini mengajarkan Julia sebagai alat komputasi numerik praktis, mulai dari REPL, sistem tipe dan multiple dispatch, hingga stack data dan komputasi ilmiah. Contoh pada jalur ditulis dan diuji pada Julia 1.13, sedangkan penyiapan juga memperkenalkan cabang dukungan jangka panjang 1.10. Setiap klaim kecepatan diukur dengan BenchmarkTools, dan seluruh proyek dikelola dengan lingkungan Pkg sejak awal. Tujuan akhirnya adalah kemampuan menulis pustaka berbasis dispatch yang cepat, teruji, dan dapat berinteroperasi dengan C, Python, dan R.

Mengenal Julia 3 pelajaran

Modul pembuka: posisi Julia di komputasi numerik, penyiapan melalui juliaup, dan penjelajahan REPL.

  1. Apa itu Julia?Bahasa tingkat tinggi yang dikompilasi menjadi instruksi native melalui LLVM, sehingga notasi matematis berjalan mendekati kecepatan C.
  2. PenyiapanMemasang Julia melalui juliaup, yaitu penginstal resmi yang mengelola rilis stabil 1.13 dan cabang dukungan jangka panjang 1.10.
  3. REPL dan mode yang tersediaMenggunakan REPL Julia beserta empat mode bawaannya, yaitu mode julia, mode help, mode shell, dan mode package.
Langkah Pertama 4 pelajaran

Bahan dasar bahasa: variabel, bilangan, fungsi, dan string yang dipraktikkan langsung pada REPL.

  1. Variabel dan TipeVariabel sebagai nama yang terikat pada nilai dengan tipe konkret saat runtime, beserta aturan penamaan dan penggantian nilainya.
  2. BilanganHierarki tipe integer dan float, bilangan rasional Rational, serta bilangan kompleks Complex beserta aritmetikanya.
  3. FungsiMenulis fungsi dengan definisi ringkas, memakai argumen kata kunci, dan memberi anotasi tipe pada argumen fungsi.
  4. String dan KarakterPerbedaan tipe Char dan String, penggabungan serta interpolasi string, dan dukungan pengenal Unicode pada Julia.

Sistem tipe sebagai mesin di balik multiple dispatch, mulai dari hierarki, struct, hingga koersi antartipe.

  1. Hierarki TipeRelasi tipe abstrak dan tipe konkret di bawah Any beserta fungsi pemeriksaan subtype dan supertype.
  2. StructMendefinisikan struct yang tidak dapat diubah dan mutable struct yang dapat diubah, beserta tipe field-nya.
  3. Multiple DispatchMemilih metode berdasarkan tipe seluruh argumen sehingga perilaku fungsi terdefinisi per kombinasi tipe.
  4. Tipe ParametrikMenuliskan parameter tipe pada struct dan signature fungsi agar satu definisi melayani banyak kombinasi tipe.
  5. convert dan promoteAturan koersi convert dan promote yang membuat aritmetika campuran antartipe bilangan bekerja.

Percabangan, perulangan, comprehension, dan broadcasting beserta mekanika alokasinya.

  1. Percabangan dan PerulanganPernyataan if untuk percabangan, serta while dan for pada range dan objek yang dapat diiterasi.
  2. Comprehension dan GeneratorMembentuk array dengan comprehension dan mengiterasi secara malas menggunakan generator.
  3. BroadcastingSintaks titik yang memfusikan perulangan per elemen, meliputi operasi vektorisasi dan pemadatan bentuk array.
  4. Mekanika BroadcastMenyusun gaya broadcast kustom dan memahami perilaku alokasi memori pada broadcasting.
Array dan Koleksi 4 pelajaran

Array multidimensi, aljabar linear dari pustaka standar, iterator, dan wadah harian berbasis hash.

  1. Array secara MendalamTata letak memori column-major, teknik pengindeksan array multidimensi, dan view yang menunjuk data tanpa menyalin.
  2. Aljabar LinearOperasi matriks dan vektor dari pustaka standar LinearAlgebra, meliputi perkalian, dekomposisi, dan penyelesaian sistem linear.
  3. Range dan IteratorProtokol iterasi Julia dan range yang dievaluasi malas, mulai dari iterate hingga iterator kustom.
  4. Dict, Set, dan TupleWadah harian berbasis hash seperti Dict dan Set beserta tuple yang terurut dan tidak dapat diubah.

Model kompilasi Julia, stabilitas tipe sebagai fondasi kecepatan, dan perangkat pengukuran performa.

  1. Cara Julia Menjalankan KodePerjalanan kode Julia dari sintaks hingga kode mesin melalui kompilasi JIT LLVM per spesialisasi tipe.
  2. Stabilitas TipeMengenali signature yang stabil dan tidak stabil, serta pengaruhnya terhadap pembangkitan kode mesin yang cepat.
  3. @code_warntype dan SejenisnyaMembaca keluaran @code_warntype, @code_llvm, dan @code_native untuk mendiagnosis tipe yang tidak stabil.
  4. Perangkat PerformaMengukur waktu dengan BenchmarkTools, melakukan profiling, dan melacak alokasi memori.
Lingkungan Proyek 3 pelajaran

Kebersihan kerja dengan Pkg.jl, lingkungan bernama dan registry, serta pengujian dengan pustaka standar Test.

  1. Pkg.jlMengelola proyek dengan Pkg.jl, meliputi Project.toml, Manifest.toml, dan resolusi dependensi.
  2. Lingkungan dan RegistryLingkungan bernama, stack lingkungan, dan registry General sebagai sumber package.
  3. PengujianMenyusun pengujian dengan pustaka standar Test, mulai dari @test hingga pengorganisasian test set.
Data dan Visualisasi 4 pelajaran

Data tabular dengan DataFrames.jl, pipeline transformasi data, plot deklaratif Makie.jl, dan format berkas.

  1. DataFrames.jlMengelola data tabular dengan DataFrames.jl beserta alur kerja split-apply-combine untuk agregasi.
  2. Manipulasi DataMenggabungkan data dengan join, mengelompokkan dengan groupby, dan menyusun pipeline transformasi data.
  3. Makie.jlMembuat plot deklaratif dengan Makie.jl beserta pengenalan rendering GLMakie dan CairoMakie.
  4. Berkas dan FormatMembaca dan menulis data dalam format CSV dan Arrow, beserta putaran serialisasi bolak-balik.
Stack Ilmiah 3 pelajaran

Pemecahan persamaan diferensial dengan DifferentialEquations.jl, pengenalan suite SciML, dan performa kode ilmiah.

  1. DifferentialEquations.jlMenyelesaikan persamaan diferensial biasa dengan DifferentialEquations.jl, termasuk event dan callback.
  2. Lanskap SciMLPengenalan ModelingToolkit dan suite SciML yang lebih luas untuk pemodelan berbasis persamaan.
  3. Performa pada Kode IlmiahMemanfaatkan sparsity, mengendalikan alokasi, dan memilih solver yang tepat pada kode ilmiah.
Komputasi Paralel 3 pelajaran

Task dan Channel, paralelisme thread dengan @threads dan @spawn, serta Distributed dan pengenalan GPU.

  1. Task dan ChannelCoroutine kooperatif berupa Task beserta pertukaran pesan antar Task melalui Channel.
  2. @threads dan @spawnMenjalankan loop paralel dengan @threads dan penjadwalan dinamis dengan @spawn.
  3. Distributed dan GPUKomputasi pada beberapa proses dengan Distributed beserta pengenalan CUDA.jl untuk GPU.
Interoperabilitas 3 pelajaran

Memanggil pustaka C dan Fortran dengan ccall, membungkus binding pustaka C, serta menjembatani Python dan R.

  1. ccallMemanggil fungsi pustaka C dan Fortran secara langsung dari Julia menggunakan ccall.
  2. Membungkus Pustaka CMemuat pustaka C, mengonversi tipe argumen, dan menguji binding yang dihasilkan.
  3. PythonCall dan RCallMenjembatani Julia dengan ekosistem Python dan R melalui PythonCall.jl dan RCall.jl.
Pengerjaan Proyek 3 pelajaran

Proyek penutup: pemilihan proyek, rancangan tipe lebih dahulu, dan pembangunan dengan checkpoint.

  1. Pemilihan ProyekMemilih proyek akhir berupa simulasi, studi data, atau alat numerik sesuai tujuan belajar.
  2. Rancang Tipe Lebih DuluMenyusun arsitektur tipe dan dispatch terlebih dahulu sebelum menulis implementasi.
  3. Membangun dengan CheckpointMembangun proyek dengan checkpoint pengujian, benchmark, dan dokumentasi di setiap tahap.