Julia ณ จุดนี้ (พฤษภาคม 2019, Julia v1.1 พร้อม v1.2 กำลังจะออกมา) ค่อนข้างเป็นผู้ใหญ่สำหรับการคำนวณทางวิทยาศาสตร์ ปล่อย v1.0 หมายสิ้นไปความแตกแยกรหัสประจำปี ด้วยวิธีนี้ห้องสมุดทางวิทยาศาสตร์จำนวนมากมีเวลาที่จะเติบโตโดยไม่หยุดชะงัก ภาพรวมกว้างของแพคเกจจูเลียสามารถพบได้ที่pkg.julialang.org
สำหรับการคำนวณทางวิทยาศาสตร์หลักห้องสมุดDifferentialEquations.jlสำหรับสมการเชิงอนุพันธ์ (ODEs, SDEs, DAEs, DDEs, การจำลอง Gillespie, ฯลฯ ), Flux.jlสำหรับเครือข่ายประสาทเทียมและห้องสมุดJuMPสำหรับการเขียนโปรแกรมคณิตศาสตร์ (การเพิ่มประสิทธิภาพ: เชิงเส้น, กำลังสอง, จำนวนเต็มแบบผสมการโปรแกรมอื่น ๆ ) เป็นสามส่วนของระบบนิเวศทางวิทยาศาสตร์คอมพิวเตอร์ ไลบรารีสมการเชิงอนุพันธ์โดยเฉพาะนั้นมีการพัฒนามากกว่าสิ่งที่คุณเห็นในภาษาอื่น ๆ ด้วยทีมพัฒนาขนาดใหญ่ที่ใช้คุณสมบัติเช่นตัวรวม EPIRK , Runge-Kutta-Nystrom , Stiff / Differential-Algebraic สมการเชิงอนุพันธ์ล่าช้าและเวลาปรับตัวสมการสุ่มแข็งค่าติดตั้งพร้อมกับพวงของสารพัดอื่น ๆ เช่นการวิเคราะห์ความไว adjoint , DSLs ปฏิกิริยาทางเคมี , เมทริกซ์ฟรีนิวตัน Krylov และเต็มรูปแบบ (การถ่ายโอนข้อมูลฟรี) GPU เข้ากันได้กับการฝึกอบรมของสมการเชิงอนุพันธ์ประสาททั้งหมดที่มีผลลัพธ์การวัดประสิทธิภาพที่ยอดเยี่ยม (ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้พัฒนาหลัก)
สิ่งที่น่าแปลกใจเล็กน้อยเกี่ยวกับระบบนิเวศของจูเลียที่ครบกำหนดคือการจัดองค์ประกอบของมัน โดยพื้นฐานแล้วเมื่อมีคนสร้างฟังก์ชั่นห้องสมุดทั่วไปเช่นเดียวกับใน DifferentialEquations.jl คุณสามารถใช้ประเภท AbstractArray / หมายเลขใด ๆ เพื่อสร้างรหัสใหม่ได้ทันที ดังนั้นสำหรับตัวอย่างเช่นมีห้องสมุดสำหรับการขยายพันธุ์ข้อผิดพลาด (กMeasurements.jl ) และเมื่อคุณติดไว้ในการแก้ ODE มันจะรวบรวมรุ่นใหม่ของการแก้บทกวีซึ่งจะขยายพันธุ์ได้โดยไม่ต้องมีข้อผิดพลาดการสุ่มตัวอย่างพารามิเตอร์ ด้วยเหตุนี้คุณอาจไม่พบคุณสมบัติบางอย่างที่ทำเป็นเอกสารเพราะรหัสสำหรับคุณสมบัติสร้างขึ้นเองดังนั้นคุณต้องคิดเพิ่มเติมเกี่ยวกับองค์ประกอบของไลบรารี
หนึ่งในวิธีที่องค์ประกอบที่มีประโยชน์มากที่สุดคือพีชคณิตเชิงเส้น ยกตัวอย่างเช่นตัวแก้ ODE อนุญาตให้คุณระบุjac_prototype
ให้คุณกำหนดประเภทของยาโคเบียนที่จะใช้ภายใน แน่นอนมีสิ่งที่อยู่ในห้องสมุดมาตรฐาน LineraAlgebraชอบSymmetric
และTridiagonal
คุณสามารถใช้ที่นี่ แต่ได้รับประโยชน์ของ composibility ในรูปแบบขั้นตอนวิธีการทั่วไปคนได้โดยขณะนี้หายไปและสร้างทั้งไลบรารีชนิดอาร์เรย์ BandedMatrices.jlและBlockBandedMatrices.jlเป็นห้องสมุดที่กำหนดประเภทเมทริกซ์แถบ (Block) ที่มีการlu
โหลดเร็วทำให้เป็นวิธีที่ดีในการเร่งการแก้ปัญหาการแยกส่วนของ MOL แบบแข็งของระบบสมการเชิงอนุพันธ์ย่อยบางส่วน PDMats.jlอนุญาตให้ใช้ข้อกำหนดของเมทริกซ์บวกแน่นอน Elemental.jlอนุญาตให้คุณกำหนดจาโคเบียนแบบกระจาย CuArrays.jlกำหนดอาร์เรย์ของ GPU เป็นต้น
จากนั้นคุณมีประเภทหมายเลขทั้งหมดของคุณ Unitful.jlทำการตรวจสอบหน่วยเวลาในการคอมไพล์ดังนั้นจึงเป็นไลบรารีหน่วยที่ไม่มีค่าใช้จ่าย DoubleFloats.jlเป็นห้องสมุดที่มีความแม่นยำสูงขึ้นอย่างรวดเร็วพร้อมกับQuadmath.jlและArbFloats.jl ForwardDiff.jlเป็นห้องสมุดสำหรับการสร้างความแตกต่างโดยอัตโนมัติในโหมดไปข้างหน้าซึ่งใช้เลขคณิตหมายเลขสอง และฉันจะออกรายการเหล่านี้ต่อไป และใช่คุณสามารถใส่มันลงในไลบรารี่ Julia ทั่วไปอย่าง DifferentialEquations.jl เพื่อคอมไพล์เวอร์ชันที่ได้รับการปรับให้เหมาะสมสำหรับประเภทตัวเลขเหล่านี้โดยเฉพาะ แม้แต่บางอย่างเช่นApproxFun.jlซึ่งทำหน้าที่เป็นวัตถุเชิงพีชคณิต (เช่น Chebfun) ทำงานร่วมกับระบบทั่วไปนี้การอนุญาตให้กำหนด PDEs เป็น ODEs บนสเกลาร์ในพื้นที่ฟังก์ชั่น
เมื่อพิจารณาถึงข้อดีของการจัดองค์ประกอบและวิธีการที่ประเภทสามารถใช้ในการสร้างรหัสใหม่และมีประสิทธิภาพในฟังก์ชั่น Julia ทั่วไปมีงานจำนวนมากที่ได้รับการใช้งานของฟังก์ชั่นการคำนวณทางวิทยาศาสตร์หลักใน Julia บริสุทธิ์ Optim.jlสำหรับการปรับให้เหมาะสมแบบไม่เชิงเส้น, NLsolve.jlสำหรับการแก้ปัญหาระบบไม่เชิงเส้น, IterativeSolvers.jlสำหรับนักแก้ปัญหาซ้ำของระบบเชิงเส้นและระบบ eigensystems, BlackBoxOptim.jlสำหรับการเพิ่มประสิทธิภาพกล่องดำเป็นต้นแม้แต่ห้องสมุดเครือข่ายประสาทFlux.jlเพียงแค่ใช้ CuArrays การรวบรวมรหัส jl อัตโนมัติไปยัง GPU สำหรับความสามารถของ GPU การเรียงความนี้เป็นแกนหลักของสิ่งที่สร้างสิ่งต่าง ๆ เช่นสมการเชิงอนุพันธ์ประสาทใน DiffEqFlux.jl. การเขียนโปรแกรมภาษาน่าจะเป็นเช่นTuring.jlยังค่อนข้างเป็นผู้ใหญ่ในขณะนี้และทำให้การใช้งานของเครื่องมือพื้นฐานเดียวกัน
เนื่องจากห้องสมุดของ Julia นั้นใช้เครื่องมือการสร้างรหัสพื้นฐานดังนั้นจึงไม่น่าแปลกใจที่มีเครื่องมือมากมายในการสร้างรหัส ระบบกระจายเสียงของจูเลียสร้างเมล็ดที่หลอมละลายในขณะบินซึ่งเต็มไปด้วยประเภทอาเรย์เพื่อให้คุณสมบัติมากมายดังกล่าวข้างต้น CUDAnative.jlอนุญาตให้มีการรวบรวมรหัส Julia ไปยังเมล็ด GPU ModelingToolkit.jlจะยกเลิก ASGs โดยอัตโนมัติให้เป็นระบบสัญลักษณ์สำหรับการแปลงรหัสทางคณิตศาสตร์ Cassette.jlช่วยให้คุณ "overdub" ฟังก์ชั่นที่มีอยู่ของคนอื่นโดยใช้กฎเพื่อเปลี่ยนฟังก์ชั่นของพวกเขาก่อนที่จะรวบรวมเวลา (ตัวอย่างเช่น: เปลี่ยนการจัดสรรอาเรย์ทั้งหมดของพวกเขาเป็นการจัดสรรสแตติกแบบสแตติก นี่เป็นเครื่องมือขั้นสูงมากขึ้น (ฉันไม่คิดว่าทุกคนจะทำการคำนวณทางวิทยาศาสตร์เพื่อควบคุมคอมไพเลอร์โดยตรง) แต่นี่เป็นวิธีการสร้างเครื่องมือรุ่นต่อไปจำนวนมาก (หรือมากกว่านั้นคือการเขียนคุณสมบัติเอง)
ในเรื่องของความเท่าเทียมฉันได้พูดถึง GPU และ Julia มีการประมวลผลแบบมัลติเธรดและกระจายในตัว การทำงานหลายเธรดของ Julia ในไม่ช้าจะใช้สถาปัตยกรรมแบบขนานงาน (PARTR) ซึ่งช่วยให้สามารถจัดตารางเวลาแบบมัลติเธรดแบบซ้อนอัตโนมัติ หากคุณต้องการที่จะใช้ MPI คุณก็สามารถใช้MPI.jl และแน่นอนวิธีที่ง่ายที่สุดในการใช้ประโยชน์ทั้งหมดคือเพียงแค่ใช้การตั้งค่าประเภท AbstractArray เพื่อใช้ความขนานในการทำงานของมัน
จูเลียยังมีระบบนิเวศพื้นฐานที่คุณคาดหวังจากภาษาวัตถุประสงค์ทั่วไปที่ใช้สำหรับการใช้งานทางวิทยาศาสตร์ มันมีJuno IDEพร้อมดีบักเกอร์ในตัวพร้อมเบรกพอยต์มีPlots.jlสำหรับการทำแปลงทุกประเภท เครื่องมือเฉพาะจำนวนมากก็ดีเช่นกันRevise.jlจะอัพเดตฟังก์ชั่น / ไลบรารีของคุณโดยอัตโนมัติเมื่อไฟล์ถูกบันทึก คุณมีDataFrames.jl , ไลบรารีสถิติและอื่น ๆ หนึ่งในไลบรารี่ที่ดีที่สุดคือดิสทริบิวชั่น. jlซึ่งช่วยให้คุณเขียนอัลกอริทึมทั่วไปในการแจกจ่าย (ตัวอย่างเช่น:rand(dist)
ใช้จำนวนสุ่มของการกระจายอะไรก็ตามที่ผ่านไป) และมีการแจกแจงแบบ univariate และหลายตัวแปรทั้งหมด (และแน่นอนการกระจายเกิดขึ้นในเวลาคอมไพล์ทำให้ทั้งหมดนี้เร็วเท่ากับ hardcoding ฟังก์ชั่นเฉพาะสำหรับการแจกแจง) มีเครื่องมือการจัดการข้อมูลมากมายเว็บเซิร์ฟเวอร์ฯลฯ คุณตั้งชื่อมัน ณ จุดนี้มันโตพอที่หากมีสิ่งพื้นฐานทางวิทยาศาสตร์และคุณคาดหวังว่ามันจะมีอยู่คุณเพียงแค่ Google ด้วย. jl หรือ Julia และมันจะปรากฏขึ้น
จากนั้นมีบางสิ่งที่ต้องจำไว้บนขอบฟ้า PackageCompilerต้องการสร้างไบนารีจากห้องสมุด Julia และมีความสำเร็จอยู่แล้ว แต่ต้องการการพัฒนามากขึ้น Makie.jlเป็นห้องสมุดทั้งหมดสำหรับการวางแผน GPU เร่งความเร็วด้วยการโต้ตอบและยังคงต้องการงานเพิ่มขึ้น แต่มันต้องการที่จะเป็นห้องสมุดหลักใน Julia Zygote.jlเป็นไลบรารี่ที่สร้างความแตกต่างโดยอัตโนมัติจากแหล่งที่มาซึ่งไม่มีปัญหาด้านประสิทธิภาพของ AD (Flux's Tracker, PyTorch, Jax) และนั่นคือการทำงานกับโค้ดจูเลียล้วนๆ เป็นต้น
โดยสรุปคุณสามารถพบกับการเคลื่อนไหวมากมายในหลาย ๆ ที่ แต่ในพื้นที่ส่วนใหญ่มีห้องสมุดที่ครบกำหนดแล้ว มันไม่ได้อยู่ในสถานที่ที่คุณถามว่า "จะเป็นลูกบุญธรรมอีกต่อไปแล้วหรือยัง?": Julia ได้รับการรับรองจากผู้คนจำนวนมากพอ (มีการดาวน์โหลดนับล้านครั้ง) ว่ามีแรงกระตุ้นให้อยู่รอบ ๆ มันมีชุมชนที่ดีจริงๆดังนั้นหากคุณเคยเพียงแค่ต้องการที่จะยิงสายลมและพูดคุยเกี่ยวกับการประมวลผลแบบขนานหรือสมการเชิงอนุพันธ์เชิงตัวเลขบางส่วนของห้องสนทนาที่ดีที่สุดสำหรับที่อยู่ในหย่อน Julialang ไม่ว่าจะเป็นภาษาที่คุณควรเรียนรู้เป็นคำถามส่วนตัวหรือไม่และเป็นภาษาที่เหมาะสมสำหรับโครงการของคุณหรือไม่เป็นคำถามด้านเทคนิคและเป็นคำถามที่แตกต่างกันหรือไม่ แต่มันเป็นภาษาที่พัฒนาและมีการสนับสนุนจากกลุ่มนักพัฒนาที่มีขนาดใหญ่หรือไม่? ดูเหมือนว่าจะใช่