โครงการภาษาวิทยาศาสตร์คอมพิวเตอร์“ Julia” มีความเป็นผู้ใหญ่เพียงใด


55

ฉันกำลังพิจารณาการเรียนรู้ภาษาใหม่เพื่อใช้สำหรับโครงการสร้างแบบจำลองเชิงตัวเลข / จำลองเป็นการแทนที่ (บางส่วน) สำหรับ C ++ และ Python ที่ฉันใช้อยู่ในปัจจุบัน ฉันเจอจูเลียซึ่งฟังดูสมบูรณ์แบบ ถ้ามันทำทุกอย่างที่อ้างฉันสามารถใช้มันเพื่อแทนที่ทั้ง C ++ และ Python ในทุกโปรเจคของฉันเพราะมันสามารถเข้าถึงโค้ดไลบรารี่การคำนวณทางวิทยาศาสตร์ระดับสูง (รวมถึง PyPlot) ได้ ฉันจะได้รับประโยชน์จากสิ่งต่าง ๆ เช่น coroutines ที่เหมาะสมซึ่งไม่มีในภาษาอื่น

อย่างไรก็ตามมันเป็นโครงการที่ค่อนข้างใหม่ในปัจจุบันที่เวอร์ชัน 0.x และฉันพบคำเตือนต่าง ๆ (โพสต์ตามวันที่ต่าง ๆ ในอดีต) ว่ายังไม่พร้อมสำหรับการใช้งานแบบวันต่อวัน ดังนั้นฉันต้องการข้อมูลบางอย่างเกี่ยวกับสถานะของโครงการในขณะนี้ (กุมภาพันธ์ 2014 หรือเมื่อใดก็ตามที่มีการโพสต์คำตอบ) เพื่อช่วยฉันประเมินว่าส่วนตัวฉันควรพิจารณาลงทุนเวลาเพื่อเรียนรู้ภาษาในขั้นตอนนี้หรือไม่

ฉันอยากจะขอบคุณคำตอบที่มุ่งเน้นไปที่ข้อเท็จจริงที่เกี่ยวข้องเฉพาะเกี่ยวกับโครงการจูเลีย ; ฉันไม่ค่อยสนใจความเห็นจากประสบการณ์กับโครงการอื่น

โดยเฉพาะอย่างยิ่งความคิดเห็นโดย Geoff Oxberry แสดงให้เห็นว่า Julia API ยังคงอยู่ในสถานะฟลักซ์ทำให้ต้องมีการอัพเดทโค้ดเมื่อมีการเปลี่ยนแปลง ฉันต้องการทราบถึงขอบเขตของกรณีนี้ว่าพื้นที่ใดของ API ที่มีความเสถียรและมีแนวโน้มที่จะเปลี่ยนแปลงอย่างไร

ฉันเดาว่าโดยทั่วไปฉันจะทำพีชคณิตเชิงเส้นเป็นส่วนใหญ่ (เช่นการแก้ปัญหา eigenproblems) การรวมตัวเลขของ ODEs กับตัวแปรจำนวนมากและการพล็อตโดยใช้ PyPlot และ / หรือ OpenGL เช่นเดียวกับการจำลองตัวเลข C-style ระดับต่ำ ) ระบบห้องสมุดของ Julia พัฒนาขึ้นอย่างสมบูรณ์ในพื้นที่เหล่านี้หรือไม่? โดยเฉพาะอย่างยิ่ง API มีความเสถียรมากขึ้นหรือน้อยลงสำหรับกิจกรรมประเภทนั้นหรือฉันจะพบว่าโค้ดเก่าของฉันมีแนวโน้มที่จะแตกหักหลังจากอัปเกรดเป็นจูเลียรุ่นใหม่หรือไม่

ในที่สุดมีประเด็นอื่น ๆ อีกหรือไม่ที่ควรพิจารณาในการตัดสินใจว่าจะใช้ Julia เพื่อทำงานที่จริงจังในเวลานี้หรือไม่?


2
คำถามนี้ดูเหมือนว่าอาจไม่เหมาะสมสำหรับรูปแบบ Stack Exchange เนื่องจากเป็นแบบอัตนัย ฉันรู้ว่าบางคนที่พัฒนาอย่างแข็งขันใน Julia รักมันและคิดว่ามันพร้อมสำหรับช่วงไพร์มไทม์ (ตราบใดที่คุณยินดีที่จะอัปเดต codebase ของคุณเพื่อตอบสนองต่อการเปลี่ยนแปลงใน Julia API) มีคนอื่นที่ไม่รู้สึกว่าจำเป็นต้องใช้ Julia ในขณะนี้ (เช่นฉัน)
Geoff Oxberry

1
เป็นอัตนัยไม่ได้ในตัวเองทำให้คำถามพอสำหรับรูปแบบ Stack แลกเปลี่ยน - ดูblog.stackoverflow.com/2010/09/good-subjective-bad-subjective หากคุณมีนโยบายเว็บไซต์กับคำถามส่วนตัวแล้วฉันขอโทษ แต่ผมคิดว่ามันเป็นเพียงบิตอัตนัย: แล้วความคิดเห็นของคุณทำให้ผมมีความคิดที่ดีของสถานการณ์กว่าผมก่อนที่จะถามคำถาม อาจเป็นเรื่องยากมากสำหรับคนนอกที่จะเข้าใจแนวคิดคร่าวๆว่าโครงการนั้นเติบโตเต็มที่เพียงใด
นาธาเนียล

ประเด็นของคุณเกี่ยวกับการเปลี่ยนแปลง API นั้นค่อนข้างสำคัญสำหรับฉันดังนั้นฉันได้เพิ่มย่อหน้าลงในคำถามที่ขอรายละเอียดเกี่ยวกับเรื่องนี้โดยเฉพาะ หากการอัพเดตจูเลียมีแนวโน้มที่จะทำลายรหัสเก่าของฉันนั่นอาจเป็นข้อผิดพลาดเล็กน้อยสำหรับฉันในขั้นตอนนี้
นาธาเนียล

คุณพูดถูกเกี่ยวกับ "ตัวตนที่ดีกับตัวตนที่ไม่ดี" (หนึ่งในโพสต์บล็อกสแต็กการแลกเปลี่ยนที่ฉันโปรดปราน); ฉันโพสต์ความคิดเห็นเพราะฉันรอดูการตอบสนอง ด้วย "คุณคิดอย่างไรเกี่ยวกับ _____" คำถามคำตอบนั้นสามารถ จำกัด ได้เพียงโพสต์ที่มีความคิดดีมากหรือพวกเขาอาจจะแผ่กิ่งก้านสาขาทุกที่ในสถานที่ซ้ำซ้อน "ฉันด้วย!" โพสต์ อดีตนั้นยอดเยี่ยม อย่างหลังไม่ได้ดังนั้นฉันจะให้ความอนุเคราะห์แก่คุณเพื่อพูดว่า: มาดูกันว่าอันนี้เล่นกันได้ยังไง
Geoff Oxberry

3
ขอบคุณสำหรับการโพสต์รางวัล @AntonMenshov ฉันทราบว่าตอนนี้ Julia ผ่านรุ่น 1.0 แล้ว (ซึ่งมันไม่ได้เกิดขึ้นในปี 2014 เมื่อฉันโพสต์ข้อความนี้) ดังนั้นแน่นอนว่ามันจะดีมากถ้าได้รับคำตอบล่าสุด
นาธาเนียล

คำตอบ:


43

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 ไม่ว่าจะเป็นภาษาที่คุณควรเรียนรู้เป็นคำถามส่วนตัวหรือไม่และเป็นภาษาที่เหมาะสมสำหรับโครงการของคุณหรือไม่เป็นคำถามด้านเทคนิคและเป็นคำถามที่แตกต่างกันหรือไม่ แต่มันเป็นภาษาที่พัฒนาและมีการสนับสนุนจากกลุ่มนักพัฒนาที่มีขนาดใหญ่หรือไม่? ดูเหมือนว่าจะใช่


2
คำตอบที่ดี คำถามหนึ่ง: Julia อนุญาตให้วิวัฒนาการที่งดงามจากรหัสการวิจัยเป็นระบบการผลิตหรือไม่? หรือเป็นมากกว่า matlab ที่ไม่มีความหวัง
user14717

6
จำนวนมากของแพคเกจเช่น DifferentialEquations.jl เริ่มต้นเป็นรหัสสำหรับโครงการวิจัย ระบบบรรจุภัณฑ์ของ Julia ทำให้ง่ายต่อการแปลงรหัสการทำงานเป็นแพ็คเกจด้วย CI และการทดสอบหน่วยสำหรับการบำรุงรักษาในอนาคต และความจริงที่ว่าโค้ดส่วนใหญ่นั้นบริสุทธิ์จูเลียทำให้การปรับใช้ง่ายขึ้นมากเพราะคุณไม่จำเป็นต้องบำรุงรักษาระบบ / ไบนารีจำนวนมาก ดังนั้นฉันจะบอกว่าใช่แน่นอน เรามีรหัสกรรมสิทธิ์ที่จะเปิดตัวเร็ว ๆ นี้ สิ่งหนึ่งที่ยังขาดอยู่คือการสร้างไบนารี (PackageCompiler)
Chris Rackauckas

29

ถ้าไม่เป็นไปได้หรือไม่ที่จะประเมินลำดับความสำคัญแบบคร่าวๆว่าฉันควรรอนานเท่าไรก่อนจะพิจารณาอีกครั้ง

การประมาณลำดับความสำคัญแบบหยาบของฉันใช้เวลานานแค่ไหนในการใช้ภาษาวิทยาศาสตร์คอมพิวเตอร์เพื่อการเติบโตเป็นเวลาประมาณหนึ่งทศวรรษ

ตัวอย่างที่ 1: SciPy เริ่มในปี 2544 หรือมากกว่านั้น ในปี 2009 Scipy 0.7.0 เปิดตัวและผู้รวบรวม ODE มีส่วนต่อประสานกับ VODE (ซึ่งเทียบเท่ากับode15sคร่าวๆ; ode15sเป็นฐาน NDF, VODE คือ BDF / Adams-Bashforth ขึ้นอยู่กับ) ด้วย SciPy 0.10.0 อินเทอร์เฟซdopri5ซึ่งเทียบเท่ากับ MATLAB's ode45โดยทั่วไปมักใช้วิธีการเรียงลำดับที่ 4 ของ Runge-Kutta ซึ่งเป็นวิธีแรกในการรวมเชิงตัวเลขเข้ากับปริญญาตรี SciPy 0.10.0 เปิดตัวในเดือนธันวาคม 2554 และพวกเขาใช้เวลาประมาณ 10 ปีในการรวมคุณลักษณะของ MATLAB ที่แนะนำให้รู้จักกับวิศวกรรมทุกระดับปริญญาตรีที่ฉันรู้จัก

ตัวอย่างที่ 2: Mathworks ก่อตั้งขึ้นในปี 1984 ในรุ่นแรกของพวกเขาพวกเขาใช้พอร์ต LAPACK ไปที่ C ชื่อ JACKPAC (หลังจาก Jack Little วิศวกร MathWorks ที่เขียนมัน) พวกเขาไม่ได้แทนที่ด้วย LAPACK จนถึงปี 2000

จูเลียอาจใช้เวลาน้อยลง แต่ฉันคาดว่าประมาณ 10 ปีนับจากการก่อตั้งเป็นกระแสหลัก (มันออกมาปีแล้วหรืออาจจะประมาณ 9-10 ปีแล้ว)

ระบบห้องสมุดของ Julia พัฒนาขึ้นอย่างสมบูรณ์ในพื้นที่เหล่านี้หรือไม่? โดยเฉพาะอย่างยิ่ง API มีความเสถียรมากขึ้นหรือน้อยลงสำหรับกิจกรรมประเภทนั้นหรือฉันจะพบว่าโค้ดเก่าของฉันมีแนวโน้มที่จะแตกหักหลังจากอัปเกรดเป็นจูเลียรุ่นใหม่หรือไม่

ฉันไม่ได้ใช้ Julia ดังนั้นเอาสิ่งที่ฉันพูดด้วยเกลือเม็ดเพราะฉันเพิ่งเห็น Jeff Bezanson ให้การนำเสนอเกี่ยวกับ Julia พวกมันงอไปข้างหลังเพื่อให้ง่ายต่อการเชื่อมโยงและใช้ไลบรารีจาก C, Python และ Fortran หากคุณไม่พบห้องสมุดจูเลียที่ทำในสิ่งที่คุณต้องการให้เขียน Julia shim สำหรับห้องสมุดในภาษาที่กำหนดมากขึ้น ดังนั้นฉันไม่คิดว่าการขาดห้องสมุดจะเป็นปัญหา ฉันคิดว่าข้อกังวลจะทำให้แน่ใจว่าการเปลี่ยนแปลงคุณสมบัติภาษาหลักจะไม่กัดคุณในเรื่องนี้ หากคุณดูเหตุการณ์สำคัญใน repo Julia Git คุณจะเห็นว่ามีการใช้แท็ก "ทำลาย" ค่อนข้างน้อย (12 ครั้งในรุ่น 0.2, 5 ครั้งในรุ่น 0.3) สำหรับฉันนั่นแสดงให้เห็นว่าภาษาหลักยังคงพัฒนาซึ่งเป็นเหตุผลที่ฉันลังเลที่จะใช้ภาษาในขณะนี้

แก้ไข: Aurelius นำเสนอจุดที่ดี:

อะไรทำให้คุณคิดว่า Julia จะกลายเป็นกระแสหลักและไม่ใช่แค่ความสับสนในภาษาอื่น ๆ อีกมากมาย? SciPy / numpy มี / ได้รับการสนับสนุนจากชุมชนงูใหญ่ที่กำลังเติบโตอย่างไม่หยุดยั้งซึ่งจูเลียไม่มี

ในคำตอบเดิมฉันตัดสินใจที่จะหลีกเลี่ยงคำถามที่ว่า มากที่สุดเท่าที่เป็นไปได้. ความล้มเหลวนั้นง่าย ความสำเร็จนั้นยาก ฉันคิดว่าการเปรียบเทียบที่ดีที่สุดของ Julia คือภาษาคอมพิวเตอร์ทางเทคนิคเช่น MATLAB, R และ Octave ภาษา HPC (Chapel, Fortress, UPC, ฯลฯ ) มีกลุ่มเป้าหมายที่แคบกว่าภาษาคอมพิวเตอร์เชิงเทคนิคและภาษาที่ใช้งานทั่วไป (C, Python, C ++ ฯลฯ ) มีกลุ่มเป้าหมายที่กว้างกว่าภาษาคอมพิวเตอร์เชิงเทคนิค

สิ่งที่ฉันคิดว่าช่วย Julia คือการออกแบบเพื่อการแสดงโดยไม่ลดทอนความรู้สึก จูเลียนั้นแข่งขันกับภาษาที่คอมไพล์เช่น C มากกว่า MATLAB, R หรือ Python เป้าหมายการออกแบบนี้ยังเป็นคุณสมบัติที่สามารถดึงดูดผู้คนจากภาษาที่มีอยู่เช่น:

  • คนที่ดูแลมากเกี่ยวกับผลการปฏิบัติงานและมาจากภาษาเช่น C และ Fortran แต่ยินดีที่จะเสียสละเล็ก ๆน้อยของผลการดำเนินงาน (อาจจะมีปัจจัยมาจาก 2ish) เพื่อไปจากภาษาที่รวบรวมสายน้อยแปลภาษา (พร้อมกับ REPL สำหรับ การพัฒนาและการทดสอบที่รวดเร็วยิ่งขึ้น)
  • ผู้ที่สนใจเกี่ยวกับประสิทธิภาพสูงและมาจากภาษาเช่น Python, R และ MATLAB แต่ต้องการประสิทธิภาพที่มากขึ้น เมื่อพูดถึงการประหารชีวิต Python บริสุทธิ์ MATLAB บริสุทธิ์และ pure R ช้า นักพัฒนาในภาษาเหล่านั้นออกไปเพื่อรวบรวมไลบรารีในภาษาที่คอมไพล์แล้ว แต่คุณไม่สามารถห่อทุกอย่างและในบางจุดภาษาหลักจะทำให้คุณช้าลง Core Julia เร็วขึ้นซึ่งช่วยให้คุณทำวิทยาศาสตร์ได้เร็วขึ้น
  • ผู้ที่สนใจซอฟต์แวร์ฟรี Julia ตีความและฟรี (เช่น Python, Octave เป็นต้น); MATLAB ไม่ได้

จูเลียก็พยายามที่จะอำนวยความสะดวกในการขนาน; ฉันไม่รู้สึกว่ามีคุณสมบัติเพียงพอที่จะขยายตัวในจุดนั้นและฉันไม่คิดว่ามันเป็นภาษาหลักของภาษา แต่ฉันคิดว่ามันเป็นจุดขายที่พวกเขากำลังทำงานอยู่และฉันหวังว่าคนอื่น ๆ จะสามารถเข้าใจได้

อย่างไรก็ตามถึงแม้จะมีข้อดีทางเทคนิคอยู่ข้างๆก็ตามผู้สร้างภาษาก็ต้องทำสิ่งที่ถูกต้องเพื่อส่งเสริมภาษาและการประกาศข่าวประเสริฐ Jeff Bezanson, Alan Edelman, Stephen Karpinski และ Viral Shah กำลังทำงานอย่างหนักเพื่อให้ภาษาประสบความสำเร็จ Alan Edelman มีความผูกพันอย่างลึกซึ้งกับชุมชนวิทยาศาสตร์การคำนวณและเขาเคยทำงานในโครงการระดับภาษามาก่อน (โดยเฉพาะอย่างยิ่งการขยาย Star-P ไปยัง MATLAB) Jeff Bezanson กำลังทำวงจรการประชุมเพื่อส่งเสริม Julia ให้กับนักวิทยาศาสตร์คอมพิวเตอร์และวิศวกรมาระยะหนึ่งแล้ว ที่ MIT พวกเขาทำงานได้ดีในการสรรหานักเรียนและเจ้าหน้าที่ (โดยเฉพาะอย่างยิ่ง Steven G. Johnson) เพื่อมีส่วนร่วมโดยการเพิ่มห้องสมุดใน Julia พวกเขามีบทความใน Wired และจัดการเพื่อให้ได้บทความ Wikipedia สำหรับตนเองหลังจากนั้นเพียงหนึ่งปี repo Git ของพวกเขามีดาวนับพันส้อมนับร้อย และนาฬิกานับร้อยดังนั้นตามมาตรฐานโอเพ่นซอร์สโครงการของพวกเขาประสบความสำเร็จ ฉันคิดว่าพวกเขาได้ทำสิ่งที่ถูกต้องมาแล้วดังนั้นมันจึงเป็นเรื่องของความพยายามและการสร้างชุมชน พวกเขายังคงล้มเหลว แต่การได้รับสิ่งนี้ชี้ให้ฉันเห็นว่าพวกเขามีโอกาสพอสมควรที่จะประสบความสำเร็จ


อะไรทำให้คุณคิดว่า Julia จะกลายเป็นกระแสหลักและไม่ใช่แค่ความสับสนในภาษาอื่น ๆ อีกมากมาย? SciPy / numpy มี / ได้รับการสนับสนุนจากชุมชนงูใหญ่ที่กำลังเติบโตอย่างไม่หยุดยั้งซึ่งจูเลียไม่มี อย่าเข้าใจฉันผิดฉันชอบที่จะมีเครื่องมือที่ดีกว่าเช่น C ++ / Python / Fortran / Matlab (และฉันไม่รู้อะไรเกี่ยวกับ Julia) แต่มีความพยายามหลายครั้งในภาษา HPC ใหม่ที่ล้มเหลว
Aurelius

3
เกี่ยวกับการเปลี่ยนแปลงที่เกิดขึ้นจริง ๆ แล้วมีการเปลี่ยนแปลงภาษาที่แตกหักน้อยมาก(เช่นไวยากรณ์ความหมาย) ตั้งแต่ก่อน 0.1 เมื่อปีที่แล้ว - ที่จริงแล้วฉันไม่สามารถคิดได้เลย - ภาษาหลักค่อนข้างเสถียร ปัญหาที่ติดแท็กเป็น "การแตก" เป็นการเปลี่ยนแปลง API ไลบรารีมาตรฐาน วิธีเหล่านี้ค่อนข้างง่ายต่อการจัดการโดยออกจากวิธีคัดค้านซึ่งทำให้รหัสเดิมของคุณยังคงใช้งานได้ แต่พิมพ์คำเตือน แพคเกจมีการไหลมากขึ้นดังนั้นฉันสงสัยว่า ณ จุดนี้ความเจ็บปวดที่แท้จริงคือการอัปเกรดแพ็คเกจของคุณอาจทำให้รหัสของคุณเสียหายแม้ว่าภาษานั้นจะไม่แตกหัก
StefanKarpinski

ขอบคุณสำหรับการแก้ไข Geoff อินพุตที่ดี ฉันหวังว่าสิ่งที่ประสบความสำเร็จดีกว่า เป็นเรื่องผิดปกติเล็กน้อยที่จะคิดว่าเป็นประจำทุกสัปดาห์ฉันใช้ Matlab สำหรับการสร้างต้นแบบอย่างรวดเร็วของ algos, python สำหรับระบบอัตโนมัติ / สคริปต์และ C ++ และ / หรือ Fortran สำหรับงาน "จริงจัง" แต่นั่นคือโลกที่เราอาศัยอยู่ ฉันหวังว่าในแง่ร้าย แนวโน้มใน 5-10 ปีของ HPC คือการเขียนโปรแกรมที่แตกต่างกันและการขนานขนาดใหญ่ซึ่งเป็นเรื่องยากที่จะประดิษฐ์ภาษาง่าย ๆ การต่อสู้บนเนินเขาของพวกเขานั้นลาดชันมากด้วยเหตุผลหลายประการ
Aurelius

การวิเคราะห์ที่ยอดเยี่ยม ฉันอยากจะพูดว่าทุกอย่างที่คุณทำกับ HPC นั้นแตกหักอยู่เสมอ เป็นพื้นที่แห่งนวัตกรรมที่การผลิต / การทำลายเป็นส่วนหนึ่งของหลักสูตร จูเลียมีหลายสิ่งที่ดีเกิดขึ้น แต่ฉันคิดว่ามีกลอุบายมากมายมาจากการรวม LLVM ซึ่งเป็นเป้าหมายที่เคลื่อนไหวสูงอีกครั้ง ฉันจะเรียนรู้นิดหน่อย แต่ให้สองสามปีจนกว่าคุณจะคาดหวังที่จะใช้มันทุกวัน
meawoppl

21

ฉันเชื่อว่า Julia คุ้มค่าที่จะเรียนรู้ ฉันใช้มันเพื่อผลิตรหัสองค์ประกอบการวิจัย จำกัด และสร้างมันอย่างรวดเร็ว ฉันพอใจมากกับประสบการณ์ของฉัน

Julia เปิดใช้งานเวิร์กโฟลว์สำหรับฉันซึ่งฉันพบว่ายากที่จะบรรลุด้วยภาษาอื่น คุณอาจใช้มันเป็นภาษาต้นแบบเช่น MATLAB แต่ต่างจาก MATLAB เมื่อคุณมีรหัสการทำงานและต้องผ่านการทำโปรไฟล์เพื่อเร่งความเร็วการแทนที่ฮอตสปอตด้วยรหัส C นั้นไม่เจ็บปวด พวกเขาได้ทำการเชื่อมต่อกับ C (และ Python) เป็นลำดับความสำคัญในการออกแบบ

ดังนั้นภาษาทำให้ฉันสามารถเปลี่ยนจากสูตรทางคณิตศาสตร์ของฉันไปเป็นรหัสการทำงานได้อย่างรวดเร็วจากนั้นจากรหัสการทำงานไปเป็นรหัสที่มีประสิทธิภาพสูง ฉันคิดว่าคุณสมบัติของ Julia นี้ยังขายไม่ได้ แต่มันเพิ่มคุณค่ามหาศาล

ในหลายกรณีฉันได้รับประสิทธิภาพ C (เปรียบเทียบกับรหัส C ของฉันเอง) ในเวลาไม่กี่ชั่วโมงหลังจากผลิตรหัสองค์ประกอบที่ใช้งานได้ จำกัด จนถึงตอนนี้ถ้าฉันใช้ฟีเจอร์ของจูเลียเท่านั้นฉันมักจะไปถึงภายใน ~ 3X ช้ากว่าซีหลังจากนั้นฉันก็เปลี่ยนฮอตสปอตเป็นฟังก์ชัน C (จูเลียมาพร้อมกับสแต็คการสุ่มตัวอย่างเพื่อช่วยระบุสิ่งเหล่านี้) บ่อยครั้งที่สิ่งนี้ต้องการเพียงแทนที่บรรทัดฮอตสปอตที่มีการละเมิดด้วย "ccall" โดย Julia จัดการกับมาร์แชล

ฉันคิดว่าสิ่งสำคัญที่จูเลียหายไปในขณะนี้ แต่นั่นทำให้ฉันลังเลที่จะพิจารณามันสำหรับโครงการขนาดใหญ่คือการขาดการดีบักเกอร์ที่รองรับอย่างเต็มที่และการสนับสนุนที่ไม่ดีสำหรับการวางแผน (ตอนนี้ทางออกที่ดีที่สุดของคุณในการวางแผน ที่ฉันเคยทำลายบ่อยกว่านั้น) ข้อเสนอแนะเกี่ยวกับรหัสทันทีเป็นสิ่งสำคัญมาก ฉันยังไม่รู้วิธีการเอาชีวิตรอดโดยไม่มีการดีบักแบบโต้ตอบและในแง่นี้ฉันก็รู้สึกเสียทีกับ MATLAB และ GDB


ขอบคุณนี่เป็นคำตอบที่มีประโยชน์มาก ฉันมีคำถามติดตาม ประการแรกคุณใช้รุ่นที่วางจำหน่ายหรือตามแหล่งที่มาหรือไม่? ถ้าอย่างหลังคุณประสบปัญหามากมายกับการทำลายรหัสเนื่องจากการอัพเดทหรือไม่? ประการที่สองอินเตอร์เฟสกับ matplotlib "break" เป็นอย่างไร จริง ๆ แล้วฉันรู้สึกตื่นเต้นที่ได้ทราบว่าการวางแผนผ่าน matplotlib เพราะสามารถทำให้ LaTeX ในเลเบลแกน (LaTeX จริงโดยใช้การติดตั้ง TeX) และสำหรับฉันนั่นเป็นคุณสมบัตินักฆ่า แต่ถ้าอินเทอร์เฟซไม่สม่ำเสมอก็ไม่ได้ยอดเยี่ยม ...
นาธาเนียล

ฉันคอยติดตามแหล่งที่มาอยู่เสมอเพราะฉันก็พยายามมีส่วนร่วมในโครงการ จนถึงตอนนี้ฉันยังไม่มีวันหยุดพัก แต่ฉันเพิ่งมีงานเขียนและทฤษฏีมากมายและตอนนี้ฉันกลับมาที่รหัสของฉันแล้วเราจะดูว่ามันจะเป็นอย่างไร อาร์เรย์ที่มีค่าเป็น 0 จัดทำดัชนีและแถวหลักตามค่าเริ่มต้น และจูเลียนั้นมีการสร้างดัชนี 1 และคอลัมน์เป็นหลักโดยปกติแล้วสิ่งนี้จะไม่ทำให้เกิดปัญหา แต่การวางแผนข้อมูลที่ไม่มีโครงสร้างต้องมีการส่งผ่านอาร์เรย์ของดัชนีดังนั้นฉันต้องทำสิ่งแปลก ๆ เช่น pass p'-1 ไปยังตาข่ายสามเหลี่ยมที่ไม่มีโครงสร้าง รูทีนโดยที่ p คือแผนผังดัชนี
Reid.Atcheson

9

จากประสบการณ์ของฉัน Julia ยังไม่พร้อมสำหรับการใช้งานทุกวัน (ฉันกำลังพูดถึงเวอร์ชั่นเสถียร 0.4 ของเดือนมีนาคม 2016) ภาษาเป็นสิ่งที่ดีมีคุณลักษณะที่หลากหลายและสอดคล้องกัน ขั้นตอนการรีเฟรชไปข้างหน้าจากทั้ง matlab และ python มีหลายกรณีที่ Julia เป็นตัวเลือกที่ดีแม้ในช่วงแรก ๆ แต่ถ้าคุณต้องการห้องสมุดทางวิทยาศาสตร์ที่น่าเชื่อถือและเป็นผู้ใหญ่ฉันไม่สามารถแนะนำให้ทำการย้ายได้ในขณะนี้ ปัญหาหลักที่ฉันพบคือ:

  • แพ็คเกจที่อยู่นอกคอร์ของจูเลียไม่น่าเชื่อถือ พวกเขาแบ่งกับการปรับปรุงเปลี่ยนแปลงรับแทนที่บางครั้งไม่สมบูรณ์หรือเสียง่าย
  • คุณสมบัติความเท่าเทียมของจูเลีย (คุณสมบัติที่มีศักยภาพมากที่สุดของ matlab killer) นั้นยังไม่สมบูรณ์ คุณจะพบข้อผิดพลาดการแบ่งส่วนการรั่วไหลของหน่วยความจำล่มและประสิทธิภาพที่น่าผิดหวัง บางครั้งพวกเขาเล่นได้ไม่ดีกับส่วนอื่น ๆ ของ julia ตัวอย่างเช่นนักแก้ปัญหาบางคนสำหรับระบบเชิงเส้นหรือแพ็คเกจนอกแกน ในขณะที่คุณสมบัติเหล่านี้ฟังดูมีแนวโน้ม แต่พวกเขาก็ล้มเหลวมากพอสำหรับฉัน แทบจะไม่เคยพอที่จะเขียน@parallelหน้า for for loop ซึ่งในทางทฤษฎีแล้วมันควรจะเป็น
  • สิ่งเล็ก ๆ น้อย ๆ ข้อบกพร่องเล็ก ๆ น้อย ๆ และปัญหาหนึ่งอาจมีชีวิตอยู่กับ: ไม่ค่อยดีนักและบางครั้งก็มีร่องรอยการโทรสแต็คที่ไม่ถูกต้องประวัติล่ามบั๊กกี้เล็ก ๆ น้อย ๆ การโหลดแพคเกจช้า ส่วนใหญ่เป็นแพ็คเกจ PyPlot ซึ่งเป็น wrapper สำหรับ matplotlib ปัจจุบันไม่มีทางเลือกอื่น มันยอดเยี่ยมจริง ๆ ว่ามันอยู่ที่นั่นและส่วนใหญ่ใช้งานได้ แต่ถ้าคุณต้องการพล็อตข้อมูลให้เตรียมพร้อมสำหรับประสิทธิภาพและปัญหาที่ช้ามาก

ทั้งหมดนี้จะดีขึ้น ฉันมั่นใจว่าสักวันจูเลียจะดีกว่า matlab และ python ในเกือบทุกด้าน โอกาสที่ยอดเยี่ยมที่แพ็คเกจนวัตกรรมจะได้รับการพัฒนา ดูเหมือนว่ามีชุมชนขนาดใหญ่อยู่แล้ว แม้ตอนนี้มีแพคเกจมากมายพร้อมกรณีการใช้งานตั้งแต่ opencl ไปจนถึงเว็บเซิร์ฟเวอร์ การใช้ python หรือ c libraries นั้นง่ายมากดังนั้นคุณอาจจะไม่ชนกำแพงในแง่ของความพร้อมใช้งานของไลบรารี จุดแข็งที่ยิ่งใหญ่ของจูเลียคือความไร้ซึ่งความสามารถที่จะยึดติดกับฟังก์ชั่นการทำงานที่มีประสิทธิภาพสูงจากแหล่งต่าง ๆ ในภาษาระดับสูงที่ทันสมัยและสอดคล้องกัน (ดูคำตอบด้านบน) แต่โดยรวมแล้วฉันพบว่ามันไม่สมบูรณ์และไม่เสถียรพอที่จะใช้อย่างมีประสิทธิภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.