ทำไม Python จึงใช้กับการคำนวณประสิทธิภาพสูง / วิทยาศาสตร์ (แต่ไม่ใช่ Ruby)


106

มีการอ้างอิงจากการพูดคุย PyCon 2011ที่ไป:

อย่างน้อยในร้านค้าของเรา (Argonne National Laboratory) เรามีสามภาษาที่ได้รับการยอมรับสำหรับการคำนวณทางวิทยาศาสตร์ ตามลำดับนี้พวกเขาคือ C / C ++, Fortran ในทุกภาษาและ Python คุณจะสังเกตเห็นว่าการขาด Ruby, Perl, Java

มันอยู่ในบริบททั่วไปของการคำนวณประสิทธิภาพสูง การได้รับใบเสนอราคานั้นมาจากร้านค้าเพียงแห่งเดียว แต่มีอีกคำถามเกี่ยวกับภาษาสำหรับ HPCและระบุว่า Python เป็นหนึ่งในการเรียนรู้ (และไม่ใช่ Ruby)

ตอนนี้ฉันสามารถเข้าใจ C / C ++ และ Fortran ที่ใช้ในปัญหาพื้นที่ (และ Perl / Java ไม่ได้ใช้) แต่ฉันประหลาดใจที่จะมีความแตกต่างที่สำคัญใน Python และ Ruby ที่ใช้กับ HPC เนื่องจากพวกเขามีความคล้ายคลึงกัน (หมายเหตุ - ฉันเป็นแฟนตัวยงของ Python แต่ไม่ได้ต่อต้าน Ruby)

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


2
ผมขอแนะนำว่าถึงแม้พวกเขาทั้งสองภาษาแบบไดนามิก, Python และ Ruby มีค่อนข้างแตกต่างกัน แตกต่างกว่าที่คล้ายกัน
Adam Crossland

20
ฉันไม่รู้ว่านี่เป็นคำตอบ แต่ - โปรดจำไว้ว่า Python มี 'แรงฉุด' มากกว่าก่อนที่ Ruby จะออกไปข้างนอกชุมชนเล็ก ๆ ที่มี Rails (ประมาณปี 2548-2549) Google ใช้ Python มาระยะหนึ่งแล้วซึ่งเพิ่มโปรไฟล์ (ต้นปี 2000) ไวยากรณ์ของไพ ธ อนนั้นชัดเจนและง่ายต่อการเรียนรู้และอ่าน (และจำได้ว่านี่คือยุคที่ Perl เป็นตัวเลือกที่สำคัญอื่น ๆ เท่านั้น) ดังนั้นฉันคิดว่ามันผลักดันการคำนวณทางวิทยาศาสตร์ไปจริงๆ หลังจากนั้นอาจเป็นการเสริมกำลังด้วยตนเองเนื่องจากผู้ใช้สร้าง NumPy / SciPy, MatPlotLib และแพ็คเกจการคำนวณทางวิทยาศาสตร์อื่น ๆ อีกมากมาย
wkl

4
ผู้ที่สนใจในคำถามนี้ฉันก็มีความสนใจในการตรวจสอบเว็บไซต์แลกเปลี่ยนกองการคำนวณ
Mark Booth

2
"จำนวนที่อ่านได้"
jsbueno

1
เพื่อนำเสนอมุมมองเคมีเชิงคำนวณมันเป็นเรื่องไม่สำคัญที่จะทำการคำนวณแบบขนานกับ Python และราคาถูกด้วย บางทีทั้งสองอย่างนี้อาจเป็นจริงในรูบีเช่นกัน ฉันไม่รู้
Jonathan Landrum

คำตอบ:


108

ฉันจะขยายความคิดเห็นของฉัน

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

สมัยก่อนประวัติศาสตร์

Python และ Ruby อายุเท่ากัน - จากข้อมูลของ Wikipedia Python ได้เปิดตัวครั้งแรกในปี 1991 และ Ruby ในปี 1995

อย่างไรก็ตาม Python ก็มีความโดดเด่นกว่า Ruby ในขณะที่ Google ใช้ Python อยู่แล้วและกำลังมองหาผู้พัฒนา Python ในช่วงเปลี่ยนสหัสวรรษ เนื่องจากมันไม่ใช่ว่าเรามีประวัติของการใช้ภาษาการเขียนโปรแกรมและอิทธิพลของพวกเขาที่มีต่อผู้คนที่ใช้พวกเขาฉันจะคิดว่าการใช้ Python โดย Google ก่อนหน้านี้เป็นแรงกระตุ้นครั้งใหญ่สำหรับผู้ที่ต้องการขยายมากกว่าแค่ใช้ Matlab, C ++ Fortran, Stata, Mathematica ฯลฯ

คือฉันหมายถึงว่า Google ใช้ Python ในระบบที่มีเครื่องจักรหลายพันเครื่อง (คิดว่าการขนานและสเกล) และประมวลผลจุดข้อมูลหลายล้านครั้งอย่างต่อเนื่อง

จุดบรรจบเหตุการณ์

การคำนวณทางวิทยาศาสตร์เคยทำบนเครื่องพิเศษเช่น SGIs และ Crays (จำได้ไหม?) และแน่นอน FORTRAN นั้นถูกใช้กันอย่างแพร่หลายเนื่องจากความเรียบง่ายสัมพัทธ์และเพราะมันสามารถปรับให้เหมาะสมได้ง่ายขึ้น

ในทศวรรษที่ผ่านมาฮาร์ดแวร์สินค้าโภคภัณฑ์ (หมายถึงสิ่งที่คุณหรือฉันสามารถจ่ายได้โดยไม่ต้องเป็นเศรษฐี) ได้เข้าครอบครองในอาณาจักรวิทยาศาสตร์และคอมพิวเตอร์ขนาดใหญ่ ดูการจัดอันดับ 500 อันดับสูงสุดในปัจจุบัน - 'ซูเปอร์คอมพิวเตอร์' อันดับต้นๆ ของโลกสร้างขึ้นด้วยฮาร์ดแวร์ Intel / AMD ปกติ

Python เข้ามาในช่วงเวลาที่ดีตั้งแต่นั้นอีกครั้ง Google กำลังส่งเสริม Python และ Google ใช้ฮาร์ดแวร์สินค้าและพวกเขามีเครื่องนับพัน

ถ้าคุณขุดลงในบทความการคำนวณทางวิทยาศาสตร์เก่า ๆ พวกเขาก็เริ่มดีดตัวขึ้นในยุค 2000

สนับสนุนก่อนหน้านี้

ต่อไปนี้เป็นบทความที่เขียนขึ้นสำหรับซอฟต์แวร์และระบบการวิเคราะห์ข้อมูลทางดาราศาสตร์ซึ่งเขียนในปี 2000 แนะนำว่า Python เป็นภาษาสำหรับการคำนวณทางวิทยาศาสตร์

บทความนี้มีข้อความเกี่ยวกับ Python:

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

ประการที่สอง Python สามารถผนวกรวมกับซอฟต์แวร์ที่เขียนในภาษาอื่นได้อย่างง่ายดาย เป็นผลให้มันสามารถใช้เป็นทั้งภาษาควบคุมสำหรับการขับขี่โปรแกรมที่มีอยู่รวมทั้งภาษากาวสำหรับการรวมระบบที่แตกต่างกันเข้าด้วยกัน ในที่สุด Python ได้รวบรวมคอลเล็กชั่นโมดูลของบุคคลที่สามฐานผู้ใช้ที่จัดตั้งขึ้นและเอกสารที่หลากหลายในรูปแบบของหนังสือและการอ้างอิงออนไลน์ ด้วยเหตุนี้เราจึงอาจมองว่ามันเป็นเวอร์ชั่นที่ขัดเกลาและขยายออกไปของสิ่งที่นักวิทยาศาสตร์มักจะพยายามทำให้สำเร็จเมื่อเขียนล่ามคำสั่งของตนเอง

ดังนั้นคุณจะเห็นได้ว่า Python มีแรงฉุดย้อนหลังไปถึงช่วงปลายยุค 90 เนื่องจากมันมีหน้าที่คล้ายกับระบบที่มีอยู่ในเวลาและเพราะมันง่ายที่จะรวม Python เข้ากับสิ่งต่าง ๆ เช่น C และโปรแกรมที่มีอยู่ จากเนื้อหาของบทความนั้น Python อยู่ในการใช้งานทางวิทยาศาสตร์ย้อนหลังไปถึงกรอบเวลา 2538-2539

ความแตกต่างในการเติบโตของความนิยม

ความนิยมของรูบี้ระเบิดไปพร้อม ๆ กับการเพิ่มขึ้นของ Ruby On Rails ซึ่งออกมาครั้งแรกในปี 2004 ฉันอยู่ในวิทยาลัยเมื่อฉันได้ยินข่าวลือเกี่ยวกับรูบี้เป็นครั้งแรกและนั่นคือประมาณปี 2548-2549 django สำหรับ Python ออกวางตลาดในช่วงเวลาเดียวกัน (กรกฎาคม 2548 จาก Wiki) แต่จุดสนใจของชุมชน Ruby นั้นมีความสำคัญอย่างมากในการส่งเสริมการใช้งานในเว็บแอปพลิเคชัน

Python มีห้องสมุดที่เหมาะกับการคำนวณทางวิทยาศาสตร์อยู่แล้ว:

  • NumPy - NumPy เริ่มต้นอย่างเป็นทางการในปี 2005 แต่ห้องสมุดทั้งสองที่สร้างขึ้นได้รับการเผยแพร่ก่อนหน้านี้: ตัวเลข (1995) และ Numarray (2001)

  • BioPython - คลังประมวลผลทางชีวภาพสำหรับ python ซึ่งย้อนกลับไปในปี 2544 เป็นอย่างน้อย

  • SAGE - ชุดคณิตศาสตร์ที่มีการวางจำหน่ายครั้งแรกในต้นปี 2548

และอื่น ๆ อีกมากมายแม้ว่าฉันจะไม่รู้จักเส้นเวลาของพวกเขา (นอกเหนือจากการเรียกดูไซต์ดาวน์โหลดของพวกเขา) แต่ Python ก็มี SciPy (สร้างขึ้นบน NumPy ซึ่งเปิดตัวในปี 2549) ได้ผูกกับ R (ภาษาสถิติ) ใน ช่วงต้นปี 2000 ได้รับ MatPlotLib และยังมีสภาพแวดล้อมเชลล์ที่ทรงพลังใน ipython

ipythonได้รับการปล่อยตัวครั้งแรกในช่วงต้นยุค 2000 และได้มีคุณสมบัติหลายอย่างเพิ่มลงไปที่ทำให้มันมีความสุขมากสำหรับการคำนวณทางวิทยาศาสตร์เช่นกราฟ matplotlib บูรณาการและความสามารถในการจัดการกลุ่มคอมพิวเตอร์

จากบทความด้านบน:

นอกจากนี้ยังเป็นที่น่าสังเกตอีกหลายโครงการที่เกี่ยวข้องกับการคำนวณทางวิทยาศาสตร์ของงูหลาม ส่วนต่อขยายของ Python เป็นตัวเลขได้เพิ่มอาเรย์อย่างรวดเร็วและการจัดการเมทริกซ์ให้กับ Python (Dubois 1996), MMTK เป็นชุดเครื่องมือที่ใช้ Python สำหรับการสร้างแบบจำลองโมเลกุล (Hinsen 1999) โครงการ Biopython กำลังพัฒนาเครื่องมือที่ใช้ Python สำหรับการวิจัยวิทยาศาสตร์ชีวภาพ และ Visualization Toolkit (VTK) เป็นแพ็คเกจการสร้างภาพขั้นสูงที่มีการผูก Python (VTK, 1999) นอกจากนี้โครงการต่อเนื่องในชุมชน Python กำลังพัฒนาส่วนขยายสำหรับการประมวลผลภาพและการพล็อต ในที่สุดงานที่นำเสนอใน (Greenfield, 2000) จะอธิบายการใช้งาน Python ในโครงการที่ STScI

ดีรายการแพคเกจทางวิทยาศาสตร์และตัวเลขสำหรับงูหลาม


อาจเป็นเพราะสมัยก่อนประวัติศาสตร์และความสับสนของทับทิมจนถึงยุค 2000 ในขณะที่ Python ได้รับแรงฉุดจากการประกาศของ Google

ดังนั้นหากคุณกำลังประเมินภาษาสคริปต์ในช่วงปี 1995 - 2000 คุณมองอะไรจริงๆ มี Perl ซึ่งอาจแตกต่างกันพอ syntactically ว่าคนไม่ต้องการใช้แล้วก็มีงูหลามซึ่งมีไวยากรณ์ที่ชัดเจนและอ่านง่ายขึ้น

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

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


8
ฉันลืมเกี่ยวกับการรวมค ในหลายกรณีการคำนวณทางวิทยาศาสตร์นั้นใช้การคำนวณอย่างเข้มข้นและความสามารถในการเขียนรูทีน ac สำหรับบิตนั้นเป็นข้อได้เปรียบที่สำคัญ
Spencer Rathbun

1
@SpencerRathbun บทความที่ฉันเชื่อมโยงการกล่าวถึงโดยใช้ Python กับ SWIG เพื่อสร้าง wrappers และอนุญาตให้ Python ทำงานร่วมกับโค้ด C / C ++ SWIG ไม่ได้รับการสนับสนุนอย่างเป็นทางการของ Ruby จนกระทั่ง Ruby 1.6 ซึ่งวางจำหน่ายในปี 2004 ดังนั้น Python จึงมีจุดเริ่มต้นที่สำคัญในใจที่จะแบ่งปันและสร้างเครื่องมือรอบตัวเพื่อให้ผู้คนสามารถใช้ Python ในระบบที่มีอยู่ได้ ไม่ต้องทิ้งสิ่งที่มีอยู่เดิมรหัส FORTRAN / C ที่ได้รับการปรับให้เหมาะสมที่ใช้อยู่อาจเป็นไดรเวอร์ที่ใหญ่ที่สุด
wkl

3
ในปีพ. ศ. 2534 เราใช้ TCL เพื่อเชื่อมโยงห้องสมุดตัวเลขเข้าด้วยกันเพื่อวิเคราะห์ข้อมูลโดยไม่ต้องเขียนกลุ่ม C / Fortran Python มาในเวลาที่เหมาะสมเพื่อแทนที่ TCL ความง่ายในการเชื่อมต่อกับ 'C' (และโดย F2C กับ Fortran) เป็นเรื่องใหญ่เมื่อเทียบกับ PERL, ส่วนต่อประสานกับ TCL 'C' นั้นง่ายมาก
Martin Beckett

กระบวนการสิ่งที่แนบมาพิเศษจะอธิบายสิ่งที่น่ากลัวมากมายเกี่ยวกับภาษาที่ใช้ มันเป็น Zipfian! ดูZipf Myatery "PAP" ได้อธิบายไว้ที่ 12:50
Radarbob

37

ฉันใช้ Python อย่างกว้างขวางสำหรับแอปพลิเคชันด้านวิศวกรรมและ Ruby สำหรับแอปพลิเคชันบนเว็บ

ปัญหาที่ฉันเห็นกับ Ruby เป็นภาษาวิทยาศาสตร์ก็คือมีตัวเลือกไวยากรณ์มากเกินไปสำหรับการดำเนินการที่กำหนด

Python ได้รับการออกแบบโดยมีสมมติฐานดังต่อไปนี้ "ควรมี - และควรมีเพียงวิธีเดียวเท่านั้น - วิธีที่ชัดเจนที่จะทำ" สิ่งนี้ทำให้ง่ายต่อการอ่านโค้ด someones และกำหนดความตั้งใจ นี่คือกุญแจสำคัญในการตรวจสอบโดยเพื่อนสำหรับงานวิศวกรรม ฯลฯ

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


3
ใช่แน่นอน. Ruby อยู่ในประเพณี TIMTOWTDI และดังนั้นจึงเป็น Perl ที่ดีขึ้นเล็กน้อย ซอฟต์แวร์เขียนขึ้นสำหรับโปรแกรมเมอร์ ผู้แปล / ผู้แปลก็คือผู้ชมสำรอง นักวิทยาศาสตร์มักจะจริงจังกับการทำงานให้สำเร็จโดยปราศจากการรบกวนจากซอฟต์แวร์ที่ไม่จำเป็นเกินความจำเป็นมากเกินไป QED
Dominic Cronin

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

10
แต่ C สามารถดูเหมือนการระเบิดที่โรงงาน ASCII ได้เช่นกัน จำได้ว่าใน C อาร์เรย์คือสกินที่อยู่รอบ ๆ พอยน์เตอร์ ดังนั้น array [5] สามารถเขียนเป็น * (array + 5) ซึ่งสามารถเขียนเป็น * (5 + array) ซึ่งสามารถเขียนเป็น 5 [array] ซึ่งเป็นคนโง่
Jonathan Landrum

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

@AndrewVit: ไม่จำเป็น TIMTOWTDI ใช้งานได้ดีถ้าคุณมีนักพัฒนาเพียงคนเดียวหรือถ้าคุณมีทีมนักพัฒนาขนาดเล็ก แต่ทันทีที่คุณมีคนที่ไม่เคยได้พบกับการทำงานในรหัสเดียวกันคุณกำลังจะเริ่มถามตัวเองว่า "โอ้ทำไมพวกเขาทำมันที่ทาง?" หรืออีกทางหนึ่งคุณจะเขียนคู่มือแนะนำสไตล์เพื่อบังคับให้ทุกคนทำแบบเดียวกันจากนั้นคุณก็ไม่ได้ทำ TIMTOWTDI อีกต่อไป
Kevin

17

โดยส่วนใหญ่มันจะเป็นที่พึ่งของmatlabจากนักวิจัยจำนวนมาก งูใหญ่มีทางเลือกเช่นสะระแหน่ ในขณะที่ทับทิมไม่ได้หรืออย่างน้อยก็ไม่มีสิ่งใดที่ชัดเจน

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

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


22
ฉันคิดว่าสิ่งที่ OO นั้นเป็นปลาเฮอริ่งแดง นักวิจัยสนใจว่านิพจน์1 + 1ส่งข้อความ+ไปยังวัตถุ1หรือไม่ แต่นั่นไม่ได้เปลี่ยนโครงสร้างของโปรแกรมของคุณเพียงเล็กน้อย
sepp2k

1
@ sepp2k ฉันคิดว่า Spencer แนะนำว่า Ruby ต้องการให้นักวิทยาศาสตร์เขียนโปรแกรมต่างกัน ฉันไม่รู้ว่า Ruby แต่ถ้าคุณต้องสร้างวัตถุเพื่อเขียนโปรแกรมใน Ruby ในขณะที่ Python อนุญาตให้โพรซีเดอร์ - สิ่งนี้จะเพิ่มค่าใช้จ่ายทางจิต ได้รับไม่มาก แต่สำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์งานพิเศษทุกบิตจะเป็นเหตุผลที่ใช้ภาษาอื่น
ไซคลอปส์

7
@ ไซคลอปส์ฉันได้สิ่งที่เขาแนะนำ ฉันกำลังบอกว่ามันผิด จุดรวมของการอ้างอิงเกี่ยวกับการปลอมแปลงทับทิมเป็นภาษาขั้นตอนคือคุณไม่จำเป็นต้องจัดโครงสร้างโปรแกรมของคุณในลักษณะเชิงวัตถุ หากคุณพิมพ์บางอย่างเช่น "2 + 2" คุณจะสร้างวัตถุจำนวนเต็มสองรายการและเรียกใช้วิธีการหนึ่งในหนึ่ง (ผ่านรายการอื่นเป็นอาร์กิวเมนต์) อย่างไรก็ตามการพิมพ์ที่ไม่ทำให้ "2 + 2" เป็นทับทิมใช้ความพยายามมากกว่าการพิมพ์ "2 + 2" ในภาษาอื่น
sepp2k

5
ฉันกับ sepp2k ฉันไม่ได้ซื้อข้อโต้แย้งนั้น บางภาษาเช่น Java บังคับใช้กระบวนทัศน์ OO กับคุณ - ไม่ใช่เช่นนั้นกับ Ruby มีอะไรหยุดคุณจากการเขียนโปรแกรมเชิงปฏิบัติหรือการทำงานใน Ruby อย่างสิ้นเชิง?
Mike Baranczak

2
@ ไซคลอปส์อย่างแน่นอน ในขณะที่ทับทิมสามารถทำเป็นขั้นตอนได้ในบริบทที่ไม่สำคัญคุณจะพบกับสถานการณ์ที่กระบวนทัศน์ OO ทำให้งานภาษาเป็นไปในทางที่แน่นอน หากคุณไม่เข้าใจหรือไม่สนใจสิ่งนั้นคุณอาจไม่สามารถทำสิ่งที่คุณต้องการหรือจบลงด้วยการแฮ็คที่ยุ่งเหยิง
Spencer Rathbun

14

เมื่อ BDFL (Guido van Rossum) เขียน Python เป็นครั้งแรกเป้าหมายก็คือมันสามารถเข้าใจได้ง่ายเหมือนกับภาษาอังกฤษธรรมดา (ข้อเสนอการระดมทุน DARPA) ซึ่งจะกำจัดข้อผิดพลาดในการเขียนโค้ดทั่วไป

ปัญหาหนึ่งที่มองเห็นได้ชัดเจนคือการใช้การเยื้องเพื่อกำหนดเขตบล็อก ในภาษาที่มีตัวคั่นคำสั่งที่ซับซ้อนอย่างชัดเจน (เช่นเครื่องหมายปีกกา C, Pascal BEGIN / END) ช่องว่างจะถูกยุบลงในอักขระช่องว่างเดียวก่อนป้อนรหัสไปยัง lexer สิ่งนี้จะช่วยให้เกิดความแตกต่างอย่างมากในการวางโค้ด

สำหรับโปรแกรมเมอร์มืออาชีพนี่ไม่ใช่ปัญหาเพราะพวกเขาฝึกฝนตัวเองเพื่อจัดการกับมันตั้งแต่ 30 ชั่วโมงขึ้นไปต่อสัปดาห์ของการฝึกฝน

สำหรับมืออาชีพอื่น ๆ ที่การเขียนโปรแกรมเป็นเครื่องมือปัญหานี้จะกลายเป็นปัญหาใหญ่ กลุ่มนี้รวมถึงนักคณิตศาสตร์นักฟิสิกส์นักเคมีวิศวกร ฯลฯ

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

นี่เป็นเพียงตัวอย่างเดียวว่าทำไมมันถึงได้รับความนิยมนอกวิชาชีพการเขียนโปรแกรม มีตัวอย่างอื่น ๆ ที่สามารถใช้เพื่ออธิบายจุดเดียวกันเช่นแบตเตอรี่ที่รวมอยู่, The Zen of Python ( import this), การใช้อารมณ์ขัน Monty Python และอื่น ๆ


ฉันไม่พบการอ้างอิงถึงวิทยานิพนธ์หรือหลักสูตรปริญญาเอกในรายการประวัติย่อหรือรายการสิ่งพิมพ์ของ Guido คุณมีหนังเรื่องนี้ไหม? การสัมภาษณ์นี้บอกว่าเขาเป็นนักวิจัยที่ CWI
M. Dudley

ฉันสับสนโดยสิ้นเชิง: ฉันได้อ่านว่าเขาทำวิทยานิพนธ์แล้ว แต่ไม่ได้ทำการวิจัยที่เหมาะสมกับมัน ฉันพบข้อผิดพลาดหลังจากเขียนบทความนี้ แต่ไม่เคยแก้ไขที่นี่ ขอบคุณ
Lance Helsten

5

นี่คือการสนทนาที่ดีที่นี่ฉันคิดว่าโพสต์ที่นี่จริงๆตอบว่าทำไมหลามเป็นที่นิยมในชุมชนวิทยาศาสตร์ อย่างไรก็ตามมีบางแย้งแย้งสำหรับวิทยาศาสตร์ทับทิม:

  • ทับทิมสามารถเข้ารหัสได้ง่ายกว่างูหลาม (DSL และอื่น ๆ ): เมื่อใช้แพ็คเกจที่เหมาะสม:

    ตรวจสอบ bioruby: http://bioruby.org/การสำรองลำดับสามารถทำได้ง่ายๆ: s.reverse เป็นต้นถ้าคุณใช้ฐานข้อมูล: ruby ​​database binding API นั้นดีกว่าไพ ธ อน

  • ruby ช่วยให้ abstractions ในระดับที่สูงขึ้นในเวลาเดียวกันกับการกระชับ

  • ระบบการจัดการแพ็คเกจที่ดีกว่า: พลอยทับทิมนั้นง่ายกว่าเมื่อเปรียบเทียบกับ: setuptools, pip เป็นต้น

อย่างไรก็ตามการยอมรับของ ruby ​​คือ / คือ / จะถูกขัดขวางโดยความซับซ้อนของมัน ฉันคิดว่า LISP เป็นภาษาที่ยอดเยี่ยม / มีประสิทธิภาพ แต่ทำไมมันไม่ใช้ภาษาทั่วไป? สถานการณ์ที่คล้ายกันอยู่ที่นี่พร้อมกับทับทิม - มันสืบทอดพลังมากมายจากเสียงกระเพื่อม, การพูดคุยเล็ก ๆ และ Perl!: แต่มีเพียงคนที่เลือกเท่านั้นที่จะใช้มันเพื่อรับผลประโยชน์ ในท้ายที่สุดมันอาจยังคงแข็งแกร่งในบางช่อง / พื้นที่พิเศษ (เช่นทางรถไฟในเว็บหุ่นกระบอกในการกำหนดค่า) มันเป็นเรื่องยากสำหรับผู้ที่ไม่ใช่นักเขียนโปรแกรมที่จะสนุกกับมันอย่างเต็มที่ แต่อาจเป็นเพื่อนที่ดีของโปรแกรมเมอร์ นักวิทยาศาสตร์เพลิดเพลินกับภาษา: http://www.cleveralgorithms.com/nature-inspired/index.html )

การอัปเดตล่าสุดบางอย่าง: ดูเหมือนว่างูใหญ่กำลังเข้ายึดครองภูมิประเทศอยู่แล้ว หนังสือล่าสุดเช่น: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 และหนังสืออื่น ๆ อีกมากมาย (การวิเคราะห์ข้อมูลการเรียนรู้ของเครื่อง ฯลฯ ) ล้วนเขียนด้วยภาษา Python ตามภาษาที่ใช้ . หากทับทิมต้องการที่จะไล่ตามมันต้องใช้ความพยายามอย่างจริงจัง เมื่อพิจารณาจาก matplotlib ในไพ ธ อนมันอาจเป็นไปได้หลายปีที่มนุษย์จะเข้าไปอยู่ในสภาพที่เป็นอยู่ในปัจจุบัน หากไม่มีความพยายามอย่างจริงจังในทับทิมมันอาจไม่สามารถทันกับการวิเคราะห์ข้อมูลของหลาม / การคำนวณทางวิทยาศาสตร์ในอีก 2-3 ปีข้างหน้า


3

หลังจากใช้ python สำหรับการวิเคราะห์ข้อมูลในขณะที่ (มาจากประสบการณ์การทำงานกับ ruby, lua และ R) แพ็คเกจ numpy (และไลบรารีทางวิทยาศาสตร์ที่เกี่ยวข้องจำนวนมาก) ทำให้สามารถ 'คำนวณ' ได้อย่างรวดเร็ว (ความเร็วคล้ายกับ C เป็น numpy ถูกเขียน / รวมเข้ากับรหัส C) ด้วยความสะดวกในการเขียนโปรแกรมในหลาม

Numpy มีอยู่พักหนึ่งแล้วความพร้อมของมันช่วยสร้างแพ็คเกจทางวิทยาศาสตร์ที่เกี่ยวข้องอื่น ๆ อีกมากมายเช่น scipy, pandas ... เป็นต้นมีเครื่องมือมากมายที่ทำให้ python เป็นระบบนิเวศที่ยอดเยี่ยมสำหรับการคำนวณทางวิทยาศาสตร์ ไลบรารีการคำนวณกำลังถูกพัฒนา (NMtrix: https://github.com/SciRuby/nmatrix ) ความแตกต่างของจังหวะเวลาขนาดใหญ่นี้ทำให้งูใหญ่เป็นตัวเลือกที่ชัดเจนสำหรับการคำนวณทางวิทยาศาสตร์


5
"ในที่สุดหลามก็เหมือนภาษาของทุกคน" คุณจะต้องให้ข้อมูลเพื่อสำรองข้อมูลนี้
วอลเตอร์

2

ฉันสงสัยในสิ่งเดียวกันนี้ ฉันคิดว่าเป็นอย่างที่ Spencer Rathbun พูดเพราะขั้นตอนของ Python การเป็น "ไม่ใช่โปรแกรมเมอร์" ตัวเองฉันคิดว่ามันสวยงามในแบบที่คุณสามารถเขียนโค้ดใน Ruby และเฟรมเวิร์ค Rails ได้อย่างยอดเยี่ยมเพื่อความสะดวกในการใช้งาน อย่างไรก็ตามเมื่อการเขียนโปรแกรมเพื่อจุดประสงค์ทางวิทยาศาสตร์ (คณิตศาสตร์ชีววิทยา ฯลฯ ) โดยปกติคุณคิดว่าในภาษา "คณิตศาสตร์" นั่นคือคุณไม่สนใจคำพูดเช่น

Person.find_by_name 'Juanito'

แต่คุณสนใจมากขึ้น

A = B*C + D

ดังนั้นฉันคิดว่า Ruby มีประสิทธิภาพซึ่งฟีเจอร์มากมายของมันจะไม่ได้ใช้ในโปรแกรมวิทยาศาสตร์ มันง่ายกว่าที่จะคิดในขั้นตอน


0

Python ให้การสนับสนุนอาร์เรย์ N-มิติที่ดีขึ้นด้วยแพ็คเกจ Numpy ฉันไม่เห็นอะไรที่คล้ายกับทับทิมเลย

Python ดูเหมือนจะเร็วขึ้นในการคำนวณเชิงตัวเลข / การคำนวณทางวิทยาศาสตร์ที่ฉันได้ทำ ฉันไม่มีข้อพิสูจน์ใดนอกจากเมื่อฉันเขียนอัลกอริธึมที่คล้ายกันใน Python และ Ruby อัลกอริธึม Python จะทำงานได้เร็วขึ้น (YMMV)


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

@Brian เห็นด้วย
Josh Petitt

@Brian ผลงานเฉพาะของฉันคือความคิดเห็นในอาร์เรย์ N-Dim นี่คือแกนหลักของสิ่งที่ Numpy ถูกสร้างขึ้นใช่ แต่ฉันไม่เห็นการพูดถึงอาร์เรย์ ND นี่คือแกนหลักของพีชคณิตเชิงเส้นและสิ่งที่ Matlab และ Numpy ทำได้ดี Ruby ใช้อาร์เรย์เช่นโปรแกรมเมอร์ใช้อาร์เรย์ไม่ใช่วิศวกรและนักวิทยาศาสตร์ใช้อาร์เรย์ (เช่นเมทริกซ์) หากคุณคิดว่าจะช่วยได้ฉันจะเพิ่มความคิดเห็นเกี่ยวกับ ND arrays ลงในคำตอบที่ยอมรับได้
Josh Petitt

@Brian และฉันยังคงแสดงความคิดเห็นของฉันว่าฉันไม่ได้เห็นการสนับสนุนอาร์เรย์ ND ที่ดีสำหรับ Ruby สำหรับการคำนวณทางวิทยาศาสตร์
Josh Petitt

0

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


0

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

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

เวลาอาจเป็นอีกปัจจัยที่สำคัญในการสร้างภาษาข้อมูลวิทยาศาสตร์ 15 ปีที่แล้วเราพบว่ามีแพ็คเกจพื้นฐานอยู่แล้วเช่นตัวเลขและสลิปเปอร์สำหรับการคำนวณเชิงตัวเลขใน Python แต่เราไม่รู้ด้วยซ้ำว่า Ruby เป็นภาษาโปรแกรม ช่วงปลายปี 2561 ฉันสามารถค้นหาหลายโครงการที่ใช้ Ruby สำหรับวิทยาศาสตร์ข้อมูล บางที 10 ปีต่อมาอาจมีคนถามว่าทำไมทับทิมถึงได้รับความนิยมสำหรับ AI

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