HeadlinesBriefing HeadlinesBriefing 12 languages

Mold Linker Version 3.0.0 Release – Rewritten in Rust

Hacker News ·

🇬🇧 English

mold 3.0.0 is a new major release of the high-speed linker, rewritten from C++ to Rust. This is the first Rust version, with 2.42.1 being the last C++ release. The goal of mold 3.x is to close compatibility gaps with GNU ld, particularly in linker script support, and to pave the way for adoption as the default linker in Linux distributions.

mold 3.0 is a drop-in replacement for 2.42.1, accepting the same command-line options and supporting the same targets. Linking performance remains on par. The move to Rust makes mold safer with corrupted input files; the C++ version could read memory out of bounds, while mold 3.0 bounds-checks and panics instead.

Build changes include using Cargo instead of CMake, requiring Rust 1.95 or later. Run `cargo build --release` and `./install-mold.sh`. mold no longer depends on TBB and statically links mimalloc 3.5.3. The test suite runs with `cargo test`.

Bug fixes include fixing crashes with version scripts, `--gc-sections` no longer removing functions from `--init` and `--fini`, and fixing nondeterministic output in several areas. Errors for PC-relative relocations against symbols in shared libraries are now handled correctly.

View original article →


🇸🇦 العربية

إصدار Mold Linker 3.0.0 – معاد كتابته بلغة Rust

mold 3.0.0 هو إصدار رئيسي جديد للمُوصِل عالي السرعة، معاد كتابته من C++ إلى Rust. هذا هو أول إصدار بلغة Rust، مع كون 2.42.1 هو آخر إصدار بلغة C++. هدف mold 3.x هو سد فجوات التوافق مع GNU ld، خاصة في دعم نصوص المُوصِل، وتمهيد الطريق لاعتماد mold كالمُوصِل الافتراضي في توزيعات Linux.

mold 3.0 هو بديل مباشر لـ 2.42.1، يقبل نفس خيارات سطر الأوامر ويدعم نفس الأهداف. يبقى أداء الربط متساوياً. الانتقال إلى Rust يجعل mold أكثر أماناً مع ملفات الإدخال التالفة؛ إصدار C++ كان يمكنه قراءة ذاكرة خارج الحدود، بينما mold 3.0 يتحقق من الحدود ويحدث ذعراً بدلاً من ذلك.

تشمل تغييرات البناء استخدام Cargo بدلاً من CMake، مما يتطلب Rust 1.95 أو أحدث. قم بتشغيل `cargo build --release` و `./install-mold.sh`. mold لم يعد يعتمد على TBB ويربط بشكل ثابت mimalloc 3.5.3. تعمل مجموعة الاختبارات مع `cargo test`.

تتضمن إصلاحات الأخطاء إصلاح الأعطال مع نصوص الإصدار، `--gc-sections` لم يعد يزيل الوظائف من `--init` و `--fini`، وإصلاح المخرجات غير الحتمية في عدة مجالات. يتم الآن معالجة الأخطاء المتعلقة بإعادة التوطين النسبي للـ PC ضد الرموز في المكتبات المشتركة بشكل صحيح.

ما الجديد في mold 3.0.0؟

mold 3.0.0 أعيدت كتابته من C++ إلى Rust، مما يحسن السلامة من خلال التحقق من الحدود على الإدخال التالف. يحافظ على التوافق مع 2.42.1 ويضيف إصلاحات للأعطال والمخرجات غير الحتمية ودعم نصوص المُوصِل.

العربية version →


🇧🇩 বাংলা

Mold Linker 3.0.0 প্রকাশিত – Rust-এ পুনর্লিখিত

mold 3.0.0 হাই-স্পিড লিংকারের একটি নতুন প্রধান রিলিজ, C++ থেকে Rust-এ পুনর্লিখিত। এটি প্রথম Rust সংস্করণ, 2.42.1 শেষ C++ রিলিজ। mold 3.x-এর লক্ষ্য GNU ld-এর সাথে সামঞ্জস্যের ফাঁক বন্ধ করা, বিশেষ করে লিংকার স্ক্রিপ্ট সমর্থনে, এবং Linux ডিস্ট্রিবিউশনে ডিফল্ট লিংকার হিসেবে গৃহীত হওয়ার পথ প্রশস্ত করা।

mold 3.0 হল 2.42.1-এর একটি ড্রপ-ইন প্রতিস্থাপন, একই কমান্ড-লাইন অপশন গ্রহণ করে এবং একই টার্গেট সমর্থন করে। লিংকিং পারফরম্যান্স সমান থাকে। Rust-এ স্থানান্তর mold-কে দূষিত ইনপুট ফাইলের সাথে নিরাপদ করে তোলে; C++ সংস্করণ সীমার বাইরে মেমরি পড়তে পারত, যেখানে mold 3.0 সীমা পরীক্ষা করে এবং পরিবর্তে প্যানিক করে।

বিল্ড পরিবর্তনের মধ্যে CMake-এর পরিবর্তে Cargo ব্যবহার করা অন্তর্ভুক্ত, যার জন্য Rust 1.95 বা তার পরবর্তী প্রয়োজন। `cargo build --release` এবং `./install-mold.sh` চালান। mold আর TBB-এর উপর নির্ভর করে না এবং mimalloc 3.5.3-কে স্ট্যাটিকভাবে লিংক করে। টেস্ট স্যুট `cargo test` দিয়ে চলে।

বাগ ফিক্সের মধ্যে রয়েছে ভার্সন স্ক্রিপ্টের সাথে ক্র্যাশ ঠিক করা, `--gc-sections` আর `--init` এবং `--fini` থেকে ফাংশন সরায় না, এবং বেশ কয়েকটি এলাকায় অনির্ধারিত আউটপুট ঠিক করা। শেয়ার্ড লাইব্রেরিতে প্রতীকের বিরুদ্ধে PC-আপেক্ষিক রিলোকেশনের ত্রুটিগুলি এখন সঠিকভাবে পরিচালিত হয়।

mold 3.0.0-এ নতুন কী?

mold 3.0.0 C++ থেকে Rust-এ পুনর্লিখিত হয়েছে, দূষিত ইনপুটে সীমা পরীক্ষার মাধ্যমে নিরাপত্তা উন্নত করে। এটি 2.42.1-এর সাথে সামঞ্জস্য বজায় রাখে এবং ক্র্যাশ, অনির্ধারিত আউটপুট এবং লিংকার স্ক্রিপ্ট সমর্থনের জন্য বাগ ফিক্স যোগ করে।

বাংলা version →


🇩🇪 Deutsch

Mold Linker 3.0.0 Veröffentlicht – Neu geschrieben in Rust

mold 3.0.0 ist eine neue Hauptversion des Hochgeschwindigkeits-Linkers, neu geschrieben von C++ in Rust. Dies ist die erste Rust-Version, wobei 2.42.1 die letzte C++-Version ist. Das Ziel von mold 3.x ist es, Kompatibilitätslücken mit GNU ld zu schließen, insbesondere bei der Unterstützung von Linker-Skripten, und den Weg für die Einführung von mold als Standard-Linker in Linux-Distributionen zu ebnen.

mold 3.0 ist ein direkter Ersatz für 2.42.1, akzeptiert dieselben Befehlszeilenoptionen und unterstützt dieselben Ziele. Die Linkleistung bleibt gleich. Der Wechsel zu Rust macht mold sicherer bei beschädigten Eingabedateien; die C++-Version konnte Speicher außerhalb der Grenzen lesen, während mold 3.0 Grenzen prüft und stattdessen in Panik gerät.

Zu den Build-Änderungen gehört die Verwendung von Cargo anstelle von CMake, wobei Rust 1.95 oder höher erforderlich ist. Führen Sie `cargo build --release` und `./install-mold.sh` aus. mold hängt nicht mehr von TBB ab und verlinkt statisch mimalloc 3.5.3. Die Testsuite wird mit `cargo test` ausgeführt.

Fehlerbehebungen umfassen die Behebung von Abstürzen mit Versionsskripten, `--gc-sections` entfernt keine Funktionen mehr von `--init` und `--fini`, und die Behebung von nichtdeterministischer Ausgabe in mehreren Bereichen. Fehler für PC-relativierte Verschiebungen gegen Symbole in gemeinsam genutzten Bibliotheken werden jetzt korrekt behandelt.

Was ist neu in mold 3.0.0?

mold 3.0.0 wurde von C++ in Rust neu geschrieben und verbessert die Sicherheit durch Grenzprüfung bei beschädigter Eingabe. Es behält die Kompatibilität mit 2.42.1 bei und fügt Fehlerbehebungen für Abstürze, nichtdeterministische Ausgabe und Linker-Skript-Unterstützung hinzu.

Deutsch version →


🇪🇸 Español

Mold Linker 3.0.0 Lanzado – Reescrito en Rust

mold 3.0.0 es un nuevo lanzamiento importante del enlazador de alta velocidad, reescrito de C++ a Rust. Esta es la primera versión en Rust, siendo 2.42.1 la última versión en C++. El objetivo de mold 3.x es cerrar las brechas de compatibilidad con GNU ld, particularmente en el soporte de scripts de enlazador, y allanar el camino para que mold sea adoptado como el enlazador predeterminado en las distribuciones de Linux.

mold 3.0 es un reemplazo directo de 2.42.1, aceptando las mismas opciones de línea de comandos y soportando los mismos objetivos. El rendimiento de enlace se mantiene a la par. El cambio a Rust hace que mold sea más seguro con archivos de entrada corruptos; la versión en C++ podía leer memoria fuera de los límites, mientras que mold 3.0 verifica los límites y entra en pánico en su lugar.

Los cambios de construcción incluyen el uso de Cargo en lugar de CMake, requiriendo Rust 1.95 o posterior. Ejecute `cargo build --release` y `./install-mold.sh`. mold ya no depende de TBB y enlaza estáticamente mimalloc 3.5.3. El conjunto de pruebas se ejecuta con `cargo test`.

Las correcciones de errores incluyen la corrección de fallos con scripts de versión, `--gc-sections` ya no elimina funciones de `--init` y `--fini`, y la corrección de salida no determinista en varias áreas. Los errores para reubicaciones relativas a PC contra símbolos en bibliotecas compartidas ahora se manejan correctamente.

¿Qué hay de nuevo en mold 3.0.0?

mold 3.0.0 está reescrito de C++ a Rust, mejorando la seguridad con verificación de límites en entrada corrupta. Mantiene la compatibilidad con 2.42.1 y añade correcciones de errores para fallos, salida no determinista y soporte de scripts de enlazador.

Español version →


🇫🇷 Français

Mold Linker 3.0.0 Publié – Réécrit en Rust

mold 3.0.0 est une nouvelle version majeure du lieur haute vitesse, réécrit de C++ vers Rust. C'est la première version Rust, 2.42.1 étant la dernière version C++. L'objectif de mold 3.x est de combler les lacunes de compatibilité avec GNU ld, notamment dans le support des scripts de lieur, et de préparer le terrain pour que mold soit adopté comme lieur par défaut dans les distributions Linux.

mold 3.0 est un remplacement direct de 2.42.1, acceptant les mêmes options de ligne de commande et supportant les mêmes cibles. Les performances de liaison restent comparables. Le passage à Rust rend mold plus sûr avec les fichiers d'entrée corrompus ; la version C++ pouvait lire la mémoire hors limites, tandis que mold 3.0 vérifie les limites et panique à la place.

Les changements de construction incluent l'utilisation de Cargo au lieu de CMake, nécessitant Rust 1.95 ou ultérieur. Exécutez `cargo build --release` et `./install-mold.sh`. mold ne dépend plus de TBB et lie statiquement mimalloc 3.5.3. La suite de tests s'exécute avec `cargo test`.

Les corrections de bogues incluent la correction des plantages avec les scripts de version, `--gc-sections` ne supprime plus les fonctions de `--init` et `--fini`, et la correction des sorties non déterministes dans plusieurs domaines. Les erreurs pour les relocations relatives au PC contre les symboles dans les bibliothèques partagées sont maintenant traitées correctement.

Quoi de neuf dans mold 3.0.0 ?

mold 3.0.0 est réécrit de C++ vers Rust, améliorant la sécurité avec la vérification des limites sur les entrées corrompues. Il maintient la compatibilité avec 2.42.1 et ajoute des corrections de bogues pour les plantages, les sorties non déterministes et le support des scripts de lieur.

Français version →


🇮🇳 हिन्दी

Mold Linker 3.0.0 जारी – Rust में पुनर्लिखित

mold 3.0.0 हाई-स्पीड लिंकर का एक नया प्रमुख रिलीज़ है, जिसे C++ से Rust में पुनर्लिखित किया गया है। यह पहला Rust संस्करण है, जिसमें 2.42.1 अंतिम C++ रिलीज़ है। mold 3.x का लक्ष्य GNU ld के साथ संगतता अंतराल को बंद करना है, विशेष रूप से लिंकर स्क्रिप्ट समर्थन में, और Linux वितरणों में डिफ़ॉल्ट लिंकर के रूप में अपनाए जाने का मार्ग प्रशस्त करना है।

mold 3.0 2.42.1 के लिए एक ड्रॉप-इन प्रतिस्थापन है, जो समान कमांड-लाइन विकल्पों को स्वीकार करता है और समान लक्ष्यों का समर्थन करता है। लिंकिंग प्रदर्शन समान रहता है। Rust में स्थानांतरण mold को दूषित इनपुट फ़ाइलों के साथ सुरक्षित बनाता है; C++ संस्करण सीमा से बाहर मेमोरी पढ़ सकता था, जबकि mold 3.0 सीमाओं की जाँच करता है और इसके बजाय पैनिक करता है।

बिल्ड परिवर्तनों में CMake के बजाय Cargo का उपयोग शामिल है, जिसके लिए Rust 1.95 या बाद के संस्करण की आवश्यकता है। `cargo build --release` और `./install-mold.sh` चलाएँ। mold अब TBB पर निर्भर नहीं है और mimalloc 3.5.3 को स्थिर रूप से लिंक करता है। परीक्षण सूट `cargo test` के साथ चलता है।

बग फिक्स में संस्करण स्क्रिप्ट के साथ क्रैश को ठीक करना, `--gc-sections` अब `--init` और `--fini` से फ़ंक्शन नहीं हटाता है, और कई क्षेत्रों में गैर-नियतात्मक आउटपुट को ठीक करना शामिल है। साझा लाइब्रेरी में प्रतीकों के खिलाफ PC-सापेक्ष स्थानांतरण के लिए त्रुटियाँ अब सही ढंग से संभाली जाती हैं।

mold 3.0.0 में नया क्या है?

mold 3.0.0 को C++ से Rust में पुनर्लिखित किया गया है, जो दूषित इनपुट पर सीमा जाँच के साथ सुरक्षा में सुधार करता है। यह 2.42.1 के साथ संगतता बनाए रखता है और क्रैश, गैर-नियतात्मक आउटपुट और लिंकर स्क्रिप्ट समर्थन के लिए बग फिक्स जोड़ता है।

हिन्दी version →


🇮🇩 Bahasa Indonesia

Mold Linker 3.0.0 Dirilis – Ditulis Ulang dalam Rust

mold 3.0.0 adalah rilis utama baru dari linker berkecepatan tinggi, ditulis ulang dari C++ ke Rust. Ini adalah versi Rust pertama, dengan 2.42.1 menjadi rilis C++ terakhir. Tujuan mold 3.x adalah untuk menutup kesenjangan kompatibilitas dengan GNU ld, khususnya dalam dukungan skrip linker, dan membuka jalan bagi mold untuk diadopsi sebagai linker default di distribusi Linux.

mold 3.0 adalah pengganti langsung untuk 2.42.1, menerima opsi baris perintah yang sama dan mendukung target yang sama. Kinerja penautan tetap setara. Perpindahan ke Rust membuat mold lebih aman dengan file input yang rusak; versi C++ dapat membaca memori di luar batas, sementara mold 3.0 memeriksa batas dan panik sebagai gantinya.

Perubahan build termasuk menggunakan Cargo alih-alih CMake, membutuhkan Rust 1.95 atau lebih baru. Jalankan `cargo build --release` dan `./install-mold.sh`. mold tidak lagi bergantung pada TBB dan menautkan secara statis mimalloc 3.5.3. Rangkaian pengujian berjalan dengan `cargo test`.

Perbaikan bug termasuk memperbaiki crash dengan skrip versi, `--gc-sections` tidak lagi menghapus fungsi dari `--init` dan `--fini`, dan memperbaiki output non-deterministik di beberapa area. Kesalahan untuk relokasi relatif-PC terhadap simbol di pustaka bersama sekarang ditangani dengan benar.

Apa yang baru di mold 3.0.0?

mold 3.0.0 ditulis ulang dari C++ ke Rust, meningkatkan keamanan dengan pemeriksaan batas pada input yang rusak. Ini mempertahankan kompatibilitas dengan 2.42.1 dan menambahkan perbaikan bug untuk crash, output non-deterministik, dan dukungan skrip linker.

Bahasa Indonesia version →


🇯🇵 日本語

Mold Linker 3.0.0 リリース – Rust で書き直し

mold 3.0.0 は高速リンカーの新しいメジャーリリースで、C++ から Rust に書き直されました。これは最初の Rust バージョンであり、2.42.1 が最後の C++ リリースです。mold 3.x の目標は、特にリンカースクリプトのサポートにおいて GNU ld との互換性のギャップを埋め、Linux ディストリビューションでデフォルトのリンカーとして採用される道を開くことです。

mold 3.0 は 2.42.1 のドロップイン代替品であり、同じコマンドラインオプションを受け入れ、同じターゲットをサポートします。リンクパフォーマンスは同等です。Rust への移行により、mold は破損した入力ファイルに対してより安全になります。C++ バージョンはメモリの範囲外を読み取る可能性がありましたが、mold 3.0 は範囲チェックを行い、代わりにパニックします。

ビルドの変更には、CMake の代わりに Cargo を使用することが含まれ、Rust 1.95 以降が必要です。`cargo build --release` と `./install-mold.sh` を実行します。mold は TBB に依存しなくなり、mimalloc 3.5.3 を静的にリンクします。テストスイートは `cargo test` で実行されます。

バグ修正には、バージョンスクリプトでのクラッシュの修正、`--gc-sections` が `--init` と `--fini` の関数を削除しなくなること、およびいくつかの領域での非決定論的な出力の修正が含まれます。共有ライブラリ内のシンボルに対する PC 相対再配置のエラーが正しく処理されるようになりました。

mold 3.0.0 の新機能は?

mold 3.0.0 は C++ から Rust に書き直され、破損した入力に対する範囲チェックにより安全性が向上しました。2.42.1 との互換性を維持し、クラッシュ、非決定論的な出力、リンカースクリプトサポートのバグ修正を追加しています。

日本語 version →


🇧🇷 Português

Mold Linker 3.0.0 Lançado – Reescrito em Rust

mold 3.0.0 é um novo lançamento principal do linker de alta velocidade, reescrito de C++ para Rust. Esta é a primeira versão Rust, sendo 2.42.1 o último lançamento em C++. O objetivo do mold 3.x é fechar as lacunas de compatibilidade com o GNU ld, particularmente no suporte a scripts de linker, e pavimentar o caminho para que o mold seja adotado como o linker padrão nas distribuições Linux.

mold 3.0 é um substituto direto para 2.42.1, aceitando as mesmas opções de linha de comando e suportando os mesmos alvos. O desempenho de vinculação permanece equivalente. A mudança para Rust torna o mold mais seguro com arquivos de entrada corrompidos; a versão em C++ podia ler memória fora dos limites, enquanto o mold 3.0 verifica os limites e entra em pânico.

As mudanças de construção incluem o uso de Cargo em vez de CMake, exigindo Rust 1.95 ou posterior. Execute `cargo build --release` e `./install-mold.sh`. O mold não depende mais de TBB e vincula estaticamente mimalloc 3.5.3. O conjunto de testes é executado com `cargo test`.

As correções de bugs incluem corrigir falhas com scripts de versão, `--gc-sections` não remove mais funções de `--init` e `--fini`, e corrigir saída não determinística em várias áreas. Erros para realocações relativas a PC contra símbolos em bibliotecas compartilhadas agora são tratados corretamente.

O que há de novo no mold 3.0.0?

mold 3.0.0 foi reescrito de C++ para Rust, melhorando a segurança com verificação de limites em entrada corrompida. Mantém compatibilidade com 2.42.1 e adiciona correções de bugs para falhas, saída não determinística e suporte a scripts de linker.

Português version →


🇷🇺 Русский

Mold Linker 3.0.0 Выпущен – Переписан на Rust

mold 3.0.0 — это новый крупный выпуск высокоскоростного компоновщика, переписанный с C++ на Rust. Это первая версия на Rust, при этом 2.42.1 является последним выпуском на C++. Цель mold 3.x — устранить пробелы в совместимости с GNU ld, особенно в поддержке скриптов компоновщика, и проложить путь для принятия mold в качестве компоновщика по умолчанию в дистрибутивах Linux.

mold 3.0 является прямой заменой 2.42.1, принимает те же параметры командной строки и поддерживает те же цели. Производительность компоновки остается на том же уровне. Переход на Rust делает mold более безопасным с поврежденными входными файлами; версия на C++ могла читать память за пределами границ, в то время как mold 3.0 проверяет границы и вместо этого вызывает панику.

Изменения сборки включают использование Cargo вместо CMake, требуется Rust 1.95 или новее. Запустите `cargo build --release` и `./install-mold.sh`. mold больше не зависит от TBB и статически связывает mimalloc 3.5.3. Набор тестов запускается с помощью `cargo test`.

Исправления ошибок включают исправление сбоев со скриптами версий, `--gc-sections` больше не удаляет функции из `--init` и `--fini`, а также исправление недетерминированного вывода в нескольких областях. Ошибки для PC-относительных перемещений относительно символов в общих библиотеках теперь обрабатываются правильно.

Что нового в mold 3.0.0?

mold 3.0.0 переписан с C++ на Rust, что повышает безопасность за счет проверки границ при поврежденном вводе. Он сохраняет совместимость с 2.42.1 и добавляет исправления ошибок для сбоев, недетерминированного вывода и поддержки скриптов компоновщика.

Русский version →


🇨🇳 简体中文

Mold Linker 3.0.0 发布——用 Rust 重写

mold 3.0.0 是高速链接器的新主要版本,从 C++ 重写为 Rust。这是首个 Rust 版本,2.42.1 是最后的 C++ 版本。mold 3.x 的目标是缩小与 GNU ld 的兼容性差距,特别是在链接脚本支持方面,并为 mold 被采用为 Linux 发行版的默认链接器铺平道路。

mold 3.0 是 2.42.1 的即插即用替代品,接受相同的命令行选项并支持相同的目标。链接性能保持不变。迁移到 Rust 使 mold 在处理损坏的输入文件时更安全;C++ 版本可能读取越界内存,而 mold 3.0 会进行边界检查并直接崩溃。

构建变更包括使用 Cargo 代替 CMake,需要 Rust 1.95 或更高版本。运行 `cargo build --release` 和 `./install-mold.sh`。mold 不再依赖 TBB,并静态链接 mimalloc 3.5.3。测试套件通过 `cargo test` 运行。

错误修复包括修复版本脚本导致的崩溃,`--gc-sections` 不再移除 `--init` 和 `--fini` 指定的函数,以及修复多个区域的不确定性输出。针对共享库中符号的 PC 相对重定位错误现在被正确处理。

mold 3.0.0 有什么新功能?

mold 3.0.0 从 C++ 重写为 Rust,通过边界检查损坏输入提高了安全性。它保持与 2.42.1 的兼容性,并增加了对崩溃、不确定性输出和链接脚本支持的错误修复。

简体中文 version →