เปิดตัว 19.3.0 ของเครื่องเสมือน GraalVM และการใช้งาน Python, JavaScript, Ruby และ R ตามนั้น

บริษัทออราเคิล การตีพิมพ์ การเปิดตัวเครื่องเสมือนสากล GraalVM 19.3.0ซึ่งรองรับการรันแอปพลิเคชันใน JavaScript (Node.js), Python, Ruby, R, ภาษาใดๆ สำหรับ JVM (Java, Scala, Clojure, Kotlin) และภาษาที่สามารถสร้างบิตโค้ด LLVM ได้ (C, C++ , สนิม) สาขา 19.3 จัดอยู่ในประเภทการสนับสนุนระยะยาว (LTS) และ น่าทึ่ง สนับสนุน JDK11รวมถึงความสามารถในการคอมไพล์โค้ด Java เป็นไฟล์ปฏิบัติการ (GraalVM Native Image) รหัสโครงการ จัดจำหน่ายโดย ได้รับอนุญาตภายใต้ GPLv2 ในเวลาเดียวกันมีการเปิดตัวเวอร์ชันใหม่ของการใช้งานภาษา Python, JavaScript, Ruby และ R โดยใช้ GraalVM - GraalPython, กราลJS, ทรัฟเฟิลรูบี้ и ฟาสต์อาร์.

GraalVM ให้ คอมไพเลอร์ JIT ที่สามารถรันโค้ดจากภาษาสคริปต์ใดๆ ได้ทันทีใน JVM รวมถึง JavaScript, Ruby, Python และ R และยังทำให้สามารถรันโค้ดเนทิฟใน JVM ที่แปลงเป็นบิตโค้ด LLVM ได้ เครื่องมือที่ GraalVM มอบให้ประกอบด้วยดีบักเกอร์ที่ไม่ขึ้นกับภาษา ระบบการทำโปรไฟล์ และเครื่องวิเคราะห์การจัดสรรหน่วยความจำ GraalVM ทำให้สามารถสร้างแอปพลิเคชันแบบรวมที่มีส่วนประกอบในภาษาต่างๆ ได้ ทำให้คุณสามารถเข้าถึงออบเจ็กต์และอาร์เรย์จากโค้ดในภาษาอื่นได้ สำหรับภาษาที่ใช้ JVM ก็มี โอกาส การสร้างไฟล์ปฏิบัติการที่คอมไพล์เป็นรหัสเครื่องที่สามารถดำเนินการได้โดยตรงโดยใช้หน่วยความจำน้อยที่สุด (การจัดการหน่วยความจำและเธรดจะดำเนินการผ่านการเชื่อมต่อเฟรมเวิร์ก พื้นผิว VM).

การเปลี่ยนแปลงใน GraalJS:

  • รับรองความเข้ากันได้กับ Node.js 12.10.0
  • คุณสมบัติและฟังก์ชันส่วนกลางที่ไม่ได้มาตรฐานจะถูกปิดใช้งานตามค่าเริ่มต้น:
    global (แทนที่ด้วย globalThis การตั้งค่า js.global-property เพื่อส่งคืน) ประสิทธิภาพ (js.Performance) print และ printErr (js.print);

  • ข้อเสนอ Promise.allSettled และข้อเสนอการรวมเป็นโมฆะที่ใช้งาน ซึ่งพร้อมใช้งานในโหมด ECMAScript 2020 (“-js.ecmascript-version=2020”);
  • อัปเดตการอ้างอิง ICU4J เป็น 64.2, ASM เป็น 7.1

การเปลี่ยนแปลง ใน GraalPython:

  • เพิ่ม stubs gc.{enable,disable,isenabled}, ใช้ charmap_build, sys.hexversion และ _lzma;
  • อัปเดตไลบรารีมาตรฐาน Python 3.7.8;
  • เพิ่มการรองรับสำหรับ NumPy 1.16.4 และ Pandas 0.25.0;
  • เพิ่มการสนับสนุน timeit;
  • socket.socket ถูกนำเข้าสู่สถานะที่อนุญาตให้คุณเรียกใช้ "graalpython -m http.server" และโหลดทรัพยากร http ที่ไม่ได้เข้ารหัส (ไม่มี TLS)
  • แก้ไขปัญหาเกี่ยวกับการแสดงวัตถุ pandas.DataFrame
    การประมวลผลสิ่งอันดับไม่ถูกต้องใน bytes.startswith
    การทำลายการกำหนดโครงสร้างของตัววนซ้ำและการใช้ dict.__contains__ สำหรับพจนานุกรม

  • เพิ่มการรองรับ ast.PyCF_ONLY_AST ซึ่ง อนุญาต ตรวจสอบให้แน่ใจว่า pytest ใช้งานได้
  • เพิ่ม สนับสนุน PEP 498 (การแก้ไขสตริงเป็นตัวอักษร);
  • ดำเนินการแล้ว การตั้งค่าสถานะ “--python.EmulateJython” เพื่อนำเข้าคลาส JVM โดยใช้ไวยากรณ์การนำเข้า Python ปกติ และตรวจจับข้อยกเว้น JVM จากโค้ด Python
  • ปรับปรุงประสิทธิภาพการแยกวิเคราะห์ แคชข้อยกเว้น
    การเข้าถึงวัตถุ Python จากรหัส JVM ปรับปรุงผลลัพธ์ในการทดสอบประสิทธิภาพของโค้ด python และส่วนขยายดั้งเดิม (การเรียกใช้ส่วนขยายดั้งเดิมที่ด้านบนของ llvm หมายความว่าบิตโค้ด llvm ถูกส่งไปยัง GraalVM สำหรับการคอมไพล์ JIT)

การเปลี่ยนแปลง ใน TruffleRuby:

  • เพื่อคอมไพล์ส่วนขยายเนทิฟ ตอนนี้ใช้เครื่องมือ LLVM ในตัว ซึ่งสร้างทั้งโค้ดเนทีฟและบิตโค้ด ซึ่งหมายความว่าควรรวบรวมส่วนขยายเนทิฟจำนวนมากขึ้นทันที เพื่อขจัดปัญหาการเชื่อมโยงส่วนใหญ่
  • แยกการติดตั้ง LLVM สำหรับการติดตั้งส่วนขยายดั้งเดิมใน TruffleRuby
  • การติดตั้งส่วนขยาย C++ บน TruffleRuby ไม่จำเป็นต้องติดตั้ง libc++ และ libc++abi อีกต่อไป
  • อัปเดตใบอนุญาตเป็น EPL 2.0/GPL 2.0/LGPL 2.1 เช่นเดียวกับ JRuby ล่าสุด
  • เพิ่มการรองรับอาร์กิวเมนต์เสริมสำหรับ GC.stat;
  • นำเมธอด Kernel#load ไปใช้ด้วย wrapper และ Kernel#spawn ด้วย :chdir;
  • เพิ่ม rb_str_drop_bytes ซึ่งดีมากเพราะ OpenSSL ใช้มัน
  • รวมส่วนขยายของอัญมณีที่ติดตั้งไว้ล่วงหน้าซึ่งจำเป็นสำหรับรางใหม่ใน Rails 6;
  • ในการรวบรวมส่วนขยายดั้งเดิม จะใช้แฟล็ก เช่นเดียวกับใน MRI
  • มีการปรับปรุงประสิทธิภาพและการใช้หน่วยความจำลดลง

การเปลี่ยนแปลง ใน FastR:

  • รับรองความเข้ากันได้กับ R 3.6.1
  • เพิ่มการสนับสนุนเบื้องต้นสำหรับการเรียกใช้ส่วนขยายเนทิฟตาม LLVM เมื่อสร้างแพ็คเกจ R ดั้งเดิม FastR จะได้รับการกำหนดค่าให้ใช้เครื่องมือ LLVM ในตัวของ GraalVM ไฟล์ไบนารี่ที่ได้จะมีทั้งโค้ดเนทีฟและบิตโค้ด LLVM

    แพ็คเกจที่ติดตั้งไว้ล่วงหน้าก็ถูกสร้างขึ้นในลักษณะนี้เช่นกัน
    FastR จะโหลดและรันโค้ดส่วนขยายเนทิฟตามค่าเริ่มต้น แต่เมื่อเปิดใช้งานด้วยตัวเลือก "--R.BackEnd=llvm" บิตโค้ดจะถูกนำมาใช้ แบ็กเอนด์ LLVM สามารถเลือกใช้สำหรับแพ็คเกจ R บางตัวได้โดยระบุ "--R.BackEndLLVM=pkg1,pkg2" หากคุณประสบปัญหาในการติดตั้งแพ็คเกจ คุณสามารถคืนค่าทุกอย่างกลับคืนมาได้ด้วยการเรียก fastr.setToolchain("native") หรือแก้ไขไฟล์ $FASTR_HOME/etc/Makeconf ด้วยตนเอง

  • ในรุ่นนี้ FastR จัดส่งโดยไม่มีไลบรารีรันไทม์ GCC
  • แก้ไขหน่วยความจำรั่ว;
  • แก้ไขปัญหาเมื่อทำงานกับเวกเตอร์ขนาดใหญ่ (>1GB)
  • ใช้งาน grepRaw แต่สำหรับ fix=T เท่านั้น

ที่มา: opennet.ru

เพิ่มความคิดเห็น