GraalVM மெய்நிகர் இயந்திரத்தின் 19.3.0 ஐ வெளியிடவும் மற்றும் அதன் அடிப்படையில் பைதான், ஜாவாஸ்கிரிப்ட், ரூபி மற்றும் ஆர் செயல்படுத்தல்

ஆரக்கிள் நிறுவனம் வெளியிடப்பட்ட உலகளாவிய மெய்நிகர் இயந்திரத்தின் வெளியீடு GraalVM 19.3.0, இது JavaScript (Node.js), Python, Ruby, R, JVM க்கான எந்த மொழிகளிலும் (Java, Scala, Clojure, Kotlin) இயங்கும் பயன்பாடுகளை ஆதரிக்கிறது மற்றும் LLVM பிட்கோடு உருவாக்கக்கூடிய மொழிகள் (C, C++) , துரு). 19.3 கிளை நீண்ட கால ஆதரவு (LTS) வெளியீடு மற்றும் குறிப்பிடத்தக்கது ஆதரவு ஜே.டி.கே 11, இயங்கக்கூடிய கோப்புகளில் ஜாவா குறியீட்டை தொகுக்கும் திறன் உட்பட (GraalVM நேட்டிவ் இமேஜ்). திட்டக் குறியீடு வழங்கியது GPLv2 இன் கீழ் உரிமம் பெற்றது. அதே நேரத்தில், GraalVM ஐப் பயன்படுத்தி பைதான், ஜாவாஸ்கிரிப்ட், ரூபி மற்றும் ஆர் மொழி செயலாக்கங்களின் புதிய பதிப்புகள் வெளியிடப்பட்டன - GraalPython, GraalJS, ட்ரஃபிள் ரூபி и ஃபாஸ்ட்ஆர்.

GraalVM அது வழங்குகிறது JavaScript, Ruby, Python மற்றும் R உட்பட JVM இல் பறக்கும் எந்த ஸ்கிரிப்டிங் மொழியிலிருந்தும் குறியீட்டை இயக்கக்கூடிய JIT கம்பைலர், மேலும் LLVM பிட்கோடாக மாற்றப்பட்ட JVM இல் நேட்டிவ் குறியீட்டை இயக்குவதையும் சாத்தியமாக்குகிறது. GraalVM வழங்கும் கருவிகளில் மொழி-சுயாதீன பிழைத்திருத்தி, ஒரு விவரக்குறிப்பு அமைப்பு மற்றும் நினைவக ஒதுக்கீடு பகுப்பாய்வி ஆகியவை அடங்கும். GraalVM ஆனது வெவ்வேறு மொழிகளில் உள்ள கூறுகளுடன் ஒருங்கிணைந்த பயன்பாடுகளை உருவாக்குவதை சாத்தியமாக்குகிறது, மற்ற மொழிகளில் உள்ள குறியீட்டிலிருந்து பொருள்கள் மற்றும் அணிவரிசைகளை அணுக உங்களை அனுமதிக்கிறது. ஜேவிஎம் அடிப்படையிலான மொழிகளுக்கு உள்ளது வாய்ப்பு இயந்திரக் குறியீட்டில் தொகுக்கப்பட்ட இயங்கக்கூடிய கோப்புகளை உருவாக்குதல், அவை குறைந்தபட்ச நினைவக நுகர்வுடன் நேரடியாக செயல்படுத்தப்படும் (நினைவகம் மற்றும் நூல் மேலாண்மை கட்டமைப்பை இணைப்பதன் மூலம் செயல்படுத்தப்படுகிறது. அடி மூலக்கூறு VM).

GraalJS இல் மாற்றங்கள்:

  • Node.js 12.10.0 உடன் இணக்கம் உறுதி செய்யப்படுகிறது;
  • தரமற்ற உலகளாவிய பண்புகள் மற்றும் செயல்பாடுகள் இயல்பாகவே முடக்கப்பட்டுள்ளன:
    உலகளாவிய (குளோபல்திஸ் மூலம் மாற்றப்பட்டது, js.global-property to return), செயல்திறன் (js.performance), பிரிண்ட் மற்றும் printErr (js.print);

  • ECMAScript 2020 பயன்முறையில் (“-js.ecmascript-version=2020”) கிடைக்கும் Promise.allSettled மற்றும் nullish coalescing திட்டம் செயல்படுத்தப்பட்டது;
  • சார்புநிலைகள் ICU4J 64.2 ஆகவும், ASM 7.1 ஆகவும் புதுப்பிக்கப்பட்டது.

மாற்றங்கள் GraalPython இல்:

  • stubs gc சேர்க்கப்பட்டது.{இயக்க, முடக்க, ஐசெனபிள்}, செயல்படுத்தப்பட்ட charmap_build, sys.hexversion மற்றும் _lzma;
  • புதுப்பிக்கப்பட்ட பைதான் 3.7.8 நிலையான நூலகம்;
  • NumPy 1.16.4 மற்றும் Pandas 0.25.0 க்கான ஆதரவு சேர்க்கப்பட்டது;
  • நேரம் ஆதரவு சேர்க்கப்பட்டது;
  • socket.socket ஆனது "graalpython -m http.server" ஐ இயக்கவும் மற்றும் மறைகுறியாக்கப்படாத (TLS இல்லாமல்) http ஆதாரங்களை ஏற்றவும் அனுமதிக்கும் நிலைக்கு கொண்டு வரப்பட்டது;
  • Pandas.DataFrame ஆப்ஜெக்ட்களைக் காண்பிப்பதில் உள்ள நிலையான சிக்கல்கள்.
    பைட்டுகளில் டூப்பிள்களின் தவறான செயலாக்கம்.தொடக்கத்துடன்,
    மறுதொடக்கம் மற்றும் அகராதிகளுக்கான டிக்ட்.__contains__ஐப் பயன்படுத்துதல்;

  • ast.PyCF_ONLY_ASTக்கான ஆதரவு சேர்க்கப்பட்டது அனுமதிக்கப்பட்டது பைடெஸ்ட் வேலை செய்கிறது என்பதை உறுதிப்படுத்தவும்;
  • சேர்க்கப்பட்டது ஆதரவு PEP 498 (சொற்களில் சரம் இடைச்செருகல்);
  • செயல்படுத்தப்பட்டது "--python.EmulateJython" கொடியானது சாதாரண பைதான் இறக்குமதி தொடரியல் பயன்படுத்தி JVM வகுப்புகளை இறக்குமதி செய்யவும் மற்றும் பைதான் குறியீட்டிலிருந்து JVM விதிவிலக்குகளைப் பிடிக்கவும்;
  • மேம்படுத்தப்பட்ட பாகுபடுத்தி செயல்திறன், விதிவிலக்கு கேச்சிங்,
    JVM குறியீட்டிலிருந்து பைதான் பொருட்களை அணுகுதல். பைதான் குறியீடு மற்றும் நேட்டிவ் எக்ஸ்டென்ஷன்களுக்கான செயல்திறன் சோதனைகளில் மேம்படுத்தப்பட்ட முடிவுகள் (எல்.எல்.வி.எம்.க்கு மேல் நேட்டிவ் எக்ஸ்டென்ஷன்களை இயக்குவது, பிட்கோட் எல்.எல்.வி.எம் ஜிஐடி தொகுப்பிற்காக கிரேல்விஎம்மிற்கு அனுப்பப்பட்டதைக் குறிக்கிறது).

மாற்றங்கள் TruffleRuby இல்:

  • சொந்த நீட்டிப்புகளைத் தொகுக்க, உள்ளமைக்கப்பட்ட LLVM கருவித்தொகுப்பு இப்போது பயன்படுத்தப்படுகிறது, இது நேட்டிவ் குறியீடு மற்றும் பிட்கோடு இரண்டையும் உருவாக்குகிறது. இதன் பொருள், அதிகமான சொந்த நீட்டிப்புகள் பெட்டிக்கு வெளியே தொகுக்கப்பட வேண்டும், பெரும்பாலான இணைக்கும் சிக்கல்களை நீக்குகிறது;
  • TruffleRuby இல் சொந்த நீட்டிப்புகளை நிறுவ தனி LLVM நிறுவல்;
  • TruffleRuby இல் C++ நீட்டிப்புகளை நிறுவுவதற்கு இனி libc++ மற்றும் libc++abiஐ நிறுவ வேண்டியதில்லை;
  • சமீபத்திய JRuby போலவே EPL 2.0/GPL 2.0/LGPL 2.1 க்கு உரிமம் புதுப்பிக்கப்பட்டது;
  • GC.statக்கு விருப்ப வாதங்களுக்கான ஆதரவு சேர்க்கப்பட்டது;
  • கர்னல்#லோட் முறையை ஒரு ரேப்பர் மற்றும் கர்னல்#ஸ்பான் உடன் :chdir;
  • rb_str_drop_bytes சேர்க்கப்பட்டது, இது OpenSSL பயன்படுத்துவதால் சிறப்பாக உள்ளது;
  • தண்டவாளங்கள் 6 இல் புதிய தண்டவாளங்களுக்குத் தேவையான முன் நிறுவப்பட்ட ரத்தினங்களின் நீட்டிப்புகள் சேர்க்கப்பட்டுள்ளன;
  • சொந்த நீட்டிப்புகளைத் தொகுக்க, எம்ஆர்ஐயைப் போலவே கொடிகள் பயன்படுத்தப்படுகின்றன;
  • செயல்திறன் மேம்படுத்தல்கள் செய்யப்பட்டுள்ளன மற்றும் நினைவக நுகர்வு குறைக்கப்பட்டுள்ளது.

மாற்றங்கள் FastR இல்:

  • R 3.6.1 உடன் இணக்கம் உறுதி செய்யப்படுகிறது;
  • LLVM அடிப்படையிலான சொந்த நீட்டிப்புகளை இயக்குவதற்கான ஆரம்ப ஆதரவு சேர்க்கப்பட்டது. சொந்த R தொகுப்புகளை உருவாக்கும்போது, ​​GraalVM இன் உள்ளமைக்கப்பட்ட LLVM கருவியைப் பயன்படுத்த FastR கட்டமைக்கப்படுகிறது. இதன் விளைவாக வரும் பைனரி கோப்புகள் நேட்டிவ் குறியீடு மற்றும் LLVM பிட்கோடு இரண்டையும் கொண்டிருக்கும்.

    முன் நிறுவப்பட்ட தொகுப்புகளும் இந்த வழியில் கட்டமைக்கப்பட்டுள்ளன.
    FastR இயல்புநிலை நீட்டிப்புக் குறியீட்டை ஏற்றுகிறது மற்றும் இயக்குகிறது, ஆனால் "--R.BackEnd=llvm" விருப்பத்துடன் தொடங்கப்படும் போது, ​​பிட்கோடு பயன்படுத்தப்படும். "--R.BackEndLLVM=pkg1,pkg2" என்பதைக் குறிப்பிடுவதன் மூலம் LLVM பின்தளத்தை சில R தொகுப்புகளுக்குத் தேர்ந்தெடுத்துப் பயன்படுத்தலாம். தொகுப்புகளை நிறுவுவதில் சிக்கல்கள் இருந்தால், fastr.setToolchain("நேட்டிவ்") அல்லது $FASTR_HOME/etc/Makeconf கோப்பை கைமுறையாகத் திருத்துவதன் மூலம் அனைத்தையும் திரும்பப் பெறலாம்;

  • இந்த வெளியீட்டில், GCC இயக்க நேர நூலகங்கள் இல்லாமல் FastR அனுப்பப்படுகிறது;
  • நிலையான நினைவக கசிவுகள்;
  • பெரிய திசையன்களுடன் (> 1 ஜிபி) பணிபுரியும் போது நிலையான சிக்கல்கள்;
  • grepRaw செயல்படுத்தப்பட்டது, ஆனால் fixed=Tக்கு மட்டுமே.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்