CINXE.COM

Über Ruby

<!DOCTYPE html> <html> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://www.ruby-lang.org/de/about/","20240419002436","https://web.archive.org/","web","/_static/", "1713486276"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta charset="utf-8"> <title>Über Ruby</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta itemprop="image" content="https://web.archive.org/web/20240419002436im_/https://www.ruby-lang.org/images/header-ruby-logo@2x.png"> <meta name="description" content=""> <link rel="stylesheet" type="text/css" href="/web/20240419002436cs_/https://www.ruby-lang.org/stylesheets/normalize.css"> <link rel="stylesheet" type="text/css" href="/web/20240419002436cs_/https://www.ruby-lang.org/stylesheets/main.css"> <link rel="stylesheet" type="text/css" href="/web/20240419002436cs_/https://www.ruby-lang.org/stylesheets/pygments.css"> <link rel="stylesheet" type="text/css" href="/web/20240419002436cs_/https://www.ruby-lang.org/stylesheets/mobile.css"> <link rel="stylesheet" type="text/css" href="/web/20240419002436cs_/https://www.ruby-lang.org/stylesheets/print.css"> <link href="https://web.archive.org/web/20240419002436cs_/https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic,700italic&amp;subset=latin,cyrillic,greek,vietnamese" rel="stylesheet" type="text/css"> <link rel="canonical" href="https://web.archive.org/web/20240419002436/https://www.ruby-lang.org/de/about/"> <link rel="shortcut icon" type="image/x-icon" href="/web/20240419002436im_/https://www.ruby-lang.org/favicon.ico"> <link href="/web/20240419002436/https://www.ruby-lang.org/de/feeds/news.rss" rel="alternate" title="Aktuelle Neuigkeiten (RSS)" type="application/rss+xml"> <script type="text/javascript" src="/web/20240419002436js_/https://www.ruby-lang.org/javascripts/jquery.min.js"></script> <script type="text/javascript" src="/web/20240419002436js_/https://www.ruby-lang.org/javascripts/page.js"></script> </head> <body> <div id="header"> <div id="header_content" class="container"> <a href="/web/20240419002436/https://www.ruby-lang.org/de/"> <h1>Ruby</h1> <h2>Der beste Freund eines Programmierers</h2> </a> <div class="site-links"> <a href="/web/20240419002436/https://www.ruby-lang.org/de/" class="home">Home</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/downloads/">Downloads</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/documentation/">Dokumentation</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/libraries/">Bibliotheken</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/community/">Community</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/news/">Neuigkeiten</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/security/">Sicherheit</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/about/">Über Ruby</a> <a href="#" class="menu selected">Menu</a> </div> <div id="search-box"> <form id="search-form" action="https://web.archive.org/web/20240419002436/https://www.google.com/cse"> <table class="fieldset"> <tr> <td> <input class="field" type="text" name="q" size="31" style="background: white url(//web.archive.org/web/20240419002436im_/https://www.google.com/coop/intl/de/images/google_custom_search_watermark.gif) left no-repeat" onfocus="this.style.background='white'" onblur="if (/^\s*$/.test(this.value)) this.style.background='white url(//www.google.com/coop/intl/de/images/google_custom_search_watermark.gif) left no-repeat'"/> </td> <td> <input type="hidden" name="cx" value="008918821236166936739:xplclbf3sh0"/> <input type="hidden" name="ie" value="UTF-8"/> <input class="button" type="submit" name="sa" value="Suche"/> </td> </tr> </table> </form> </div> </div> </div> <div id="page"> <div id="main-wrapper" class="container"> <div id="main"> <div id="content-wrapper"> <h1>Über Ruby</h1> <div id="content"> <p class="summary">Warum ist Ruby so populär? Fans nennen es schön und künstlerisch, aber gleichzeitig funktional und praktisch. Wie kommt das?</p> <h3>Die Ideale des Ruby-Erfinders</h3> <p>Ruby ist eine Sprache der Balance. Ihr Schöpfer <a href="https://web.archive.org/web/20240419002436/http://www.rubyist.net/~matz/">Yukihiro “Matz” Matsumoto</a> kombinierte Teile seiner Lieblingssprachen (Perl, Smalltalk, Eiffel, Ada und Lisp) und formte daraus eine neue Programmiersprache, in der funktionale und imperative Programmierung ausbalanciert sind.</p> <p>Er hat oft gesagt, er versuche “Ruby natürlich zu machen, nicht einfach”, als Spiegel des echten Lebens.</p> <p>Darauf aufbauend fügt er hinzu:</p> <blockquote> <p>Ruby is simple in appearance, but is very complex inside, just like our human body<sup><a href="#fn1">1</a></sup>.</p> </blockquote> <blockquote> <p>Ruby wirkt simpel, aber ist innen sehr komplex, genau wie der menschliche Körper.</p> </blockquote> <h3>Ruby wächst</h3> <p>Seit seiner Veröffentlichung im Jahr 1995 hat Ruby Programmierer auf der ganzen Welt angezogen und begeistert. Im Jahr 2006 hat Ruby die Massen erreicht: Aktive Usergroups entstehen in den großen Weltstädten und Konferenzen rund um Ruby sind ausverkauft.</p> <p>Ruby-Talk, die wichtigste <a href="/web/20240419002436/https://www.ruby-lang.org/de/community/mailing-lists/">Mailingliste</a> für Diskussionen rund um Ruby, erreichte 2006 einen Spitzenwert von etwa 200 Nachrichten pro Tag. Seither ist die Aktivität wieder zurückgegangen, da mit dem starken Anwachsen der Community zahlreiche kleinere Listen entstanden sind.</p> <p>Die meisten Indizes, die das Wachstum und die Beliebtheit von Programmiersprachen weltweit messen, listen Ruby unter den beliebtesten zehn Sprachen (wie zum Beispiel der <a href="https://web.archive.org/web/20240419002436/http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE-Index</a>). Ein großer Teil dieses Wachstums ist der Beliebtheit von in Ruby geschriebener Software zu verdanken, insbesondere dem Web-Framework <a href="https://web.archive.org/web/20240419002436/http://rubyonrails.org/">Ruby on Rails</a>.</p> <p>Ruby ist außerdem <a href="/web/20240419002436/https://www.ruby-lang.org/en/about/license.txt">absolut frei</a>. Nicht nur kostenlos, sondern auch frei zu benutzen, zu kopieren, zu verändern und zu vertreiben.</p> <h3>Alles ist ein Objekt</h3> <p>Am Anfang hat Matz andere Sprachen studiert, um die ideale Syntax zu finden. An diese Suche erinnert sagt er: “Ich wollte eine Skriptsprache, die mächtiger als Perl und objektorientierter als Python ist<sup><a href="#fn2">2</a></sup>.”</p> <p>In Ruby ist alles ein Objekt. Jedes Stück Information kann eigene Eigenschaften und Aktionen besitzen. In der Welt der objektorientierten Programmierung nennt man diese Eigenschaften <em>Instanzvariablen</em> und die Aktionen <em>Methoden</em>. Rubys rein objektorientierter Ansatz wird üblicherweise mit einem Stück Code demonstriert, in dem die Methode einer Zahl aufgerufen wird:</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="mi">5</span><span class="p">.</span><span class="nf">times</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"Wir *lieben* Ruby -- es ist ungeheuerlich!"</span> <span class="p">}</span></code></pre></figure> <p>In vielen Sprachen sind Zahlen und andere primitive Typen keine Objekte. Ruby folgt dem Einfluss von Smalltalk und gibt all seinen Typen Methoden und Instanzvariablen. Das erleichtert die Verwendung von Ruby, da die Regeln für Objekte überall in der Sprache gültig sind.</p> <h3>Rubys Flexibilität</h3> <p>Ruby wird als flexible Sprache angesehen, da der Programmierer die Bestandteile der Sprache beliebig verändern kann. Zentrale Teile von Ruby können gelöscht oder umdefiniert werden. Vorhandenes kann erweitert werden. Ruby versucht, den Programmierer nicht zu behindern.</p> <p>Ein Beispiel: In Ruby wird mit dem Plus-Operator (<code class="language-plaintext highlighter-rouge">+</code>) addiert. Aber wenn man lieber das Wort <code class="language-plaintext highlighter-rouge">plus</code> benutzen möchte, kann man diese Methode zu Rubys eingebauter Klasse <code class="language-plaintext highlighter-rouge">Numeric</code> hinzufügen.</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">Numeric</span> <span class="k">def</span> <span class="nf">plus</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="nb">self</span><span class="p">.</span><span class="nf">+</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">5</span><span class="p">.</span><span class="nf">plus</span> <span class="mi">6</span> <span class="c1"># y ist jetzt 11</span></code></pre></figure> <p>Rubys Operatoren sind syntaktischer Zucker für Methoden; man kann sie ebenfalls umdefinieren.</p> <h3>Blöcke: Ein mächtiges Ruby-Konstrukt</h3> <p>Auch Rubys Blöcke bieten große Flexibilität. Der Programmierer kann eine echte Closure an eine Methode übergeben, die beschreibt, wie diese Methode arbeiten soll. Diese wird <em>Block</em> genannt und ist zu einer der beliebtesten Eigenschaften von Ruby geworden – insbesondere unter Ruby-Neulingen, die vorher mit imperativen Sprachen wie PHP oder Visual Basic gearbeitet haben.</p> <p>Blöcke sind durch funktionale Programmiersprachen inspiriert. Matz sagt: “Mit Ruby-Closures wollte ich die Kultur von LISP bewahren<sup><a href="#fn3">3</a></sup>.”</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="n">search_engines</span> <span class="o">=</span> <span class="sx">%w[Google Yahoo MSN]</span><span class="p">.</span><span class="nf">map</span> <span class="k">do</span> <span class="o">|</span><span class="n">engine</span><span class="o">|</span> <span class="s2">"http://www."</span> <span class="o">+</span> <span class="n">engine</span><span class="p">.</span><span class="nf">downcase</span> <span class="o">+</span> <span class="s2">".com"</span> <span class="k">end</span></code></pre></figure> <p>Im obigen Quelltext steht der Block zwischen <code class="language-plaintext highlighter-rouge">do</code> und <code class="language-plaintext highlighter-rouge">end</code>. Die Methode <code class="language-plaintext highlighter-rouge">map</code> wendet den Block auf die gegebene Liste von Namen an. Viele andere Ruby-Methoden lassen ähnliche Lücken offen, damit der Programmierer Details der Vorgehensweise einfügen kann.</p> <h3>Ruby und Mixins</h3> <p>Im Gegensatz zu vielen anderen objektorientierten Sprachen unterstützt Ruby nur Einfachvererbung – <strong>mit Absicht</strong>. Dafür kennt Ruby <em>Module</em> (in Objective-C <em>Categories</em> genannt). Module sind Methodensammlungen.</p> <p>Klassen können Module <em>einmixen</em> und bekommen dadurch all ihre Methoden geschenkt. Zum Beispiel kann jede Klasse, die die Methode <code class="language-plaintext highlighter-rouge">each</code> implementiert, das Modul <code class="language-plaintext highlighter-rouge">Enumerable</code> einmixen, und erhält zwei Dutzend neue Methoden, die auf <code class="language-plaintext highlighter-rouge">each</code> aufbauen (wie <code class="language-plaintext highlighter-rouge">map</code>).</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">MyArray</span> <span class="kp">include</span> <span class="no">Enumerable</span> <span class="k">end</span></code></pre></figure> <p>Im Allgemeinen halten Rubyisten Mixins für klarer als Mehrfachvererbung, die komplex und einschränkend sein kann.</p> <h3>Rubys äußeres Design</h3> <p>Obwohl Ruby eine eher begrenzte Zeichensetzung zu Gunsten von englischen Schlüsselworten verwendet, werden einige Zeichen zum Ausschmücken benutzt. Ruby verlangt keine Variablendeklarationen. Ruby nutzt einfache Namenskonventionen, um den Geltungsbereich von Variablen festzulegen:</p> <ul> <li><code class="language-plaintext highlighter-rouge">var</code> kann eine lokale Variable sein.</li> <li><code class="language-plaintext highlighter-rouge">@var</code> ist eine Instanzvariable.</li> <li><code class="language-plaintext highlighter-rouge">$var</code> ist eine globale Variable.</li> </ul> <p>Diese Präfixe verbessern die Lesbarkeit, indem sie dem Programmierer erlauben, die Rollen der einzelnen Variablen zu erkennen. Außerdem wird dadurch das <code class="language-plaintext highlighter-rouge">self.</code> vor jeder Instanzvariablen überflüssig.</p> <h3>Jenseits der Grundlagen</h3> <p>Ruby hat eine Fülle weiterer Features, unter ihnen folgende:</p> <ul> <li> <p>Ruby kennt Exceptions wie Java oder Python, um Fehlerbehandlung zu vereinfachen.</p> </li> <li> <p>Ruby hat einen echten Mark-and-Sweep-Garbage-Collector für alle Ruby-Objekte. Es ist nicht nötig, Referenzen in Erweiterungsbibliotheken zu zählen. Wie Matz sagt: “Das ist besser für die Gesundheit.”</p> </li> <li> <p>C-Erweiterungen für Ruby zu schreiben ist einfacher als in Perl oder Python, da es eine sehr elegante API zum Aufrufen von Ruby aus C besitzt. Das schließt auch Aufrufe ein, um Ruby als Skriptsprache in fremde Software zu integrieren. Ein SWIG-Interface ist ebenfalls verfügbar.</p> </li> <li> <p>Ruby kann Erweiterungen dynamisch laden, wenn es das Betriebssystem erlaubt.</p> </li> <li> <p>Ruby hat plattformunabhängige Threads. Damit steht unter allen Systemen, die Ruby unterstützen, auch Multithreading zur Verfügung, sogar unter MS-DOS!</p> </li> <li> <p>Ruby ist in hohem Maße portabel: Es wird vorrangig auf GNU/Linux entwickelt, arbeitet aber auf vielen UNIX-Varianten wie macOS, auf Windows, DOS, BeOS, OS/2, usw.</p> </li> </ul> <h3>Alternative Ruby-Implementierungen</h3> <p>Ruby als Sprache hat einige verschiedene Implementierungen. Diese Seite diskutiert die Referenzimplementierung, in der Community auch bekannt als <strong>MRI</strong> („Matz’ Ruby-Interpreter“) oder <strong>CRuby</strong> (da sie in C geschrieben ist), es gibt aber noch einige weitere. Oftmals sind diese in bestimmten Situationen nützlich, stellen spezielle Sprach- oder Umgebungsintergration zur Verfügung oder haben einfach spezielle Features, die MRI nicht hat.</p> <p>Hier ist eine Liste:</p> <ul> <li><a href="https://web.archive.org/web/20240419002436/http://jruby.org/">JRuby</a> ist ein Ruby auf der JVM (Java Virtual Machine), das von den optimierenden JIT-Compilern der JVM, ihrem Garbage Collector, nebenläufigen Threads, diversen Tools und einer immensen Menge an Programmbibliotheken profitiert.</li> <li><a href="https://web.archive.org/web/20240419002436/http://rubini.us/">Rubinius</a> ist ein „Ruby geschrieben in Ruby“. Aufgebaut auf der LLVM stellt Rubinius eine gute virtuelle Maschine zur Verfügung, auf der sogar andere Sprachen aufbauen. Ebenso wie JRuby besitzt es echt nebenläufige Threads, ist jedoch im Gegensatz zu diesem kompatibel zur C-API des MRI.</li> <li><a href="https://web.archive.org/web/20240419002436/http://www.mruby.org/">mruby</a> ist eine schlanke Ruby-Implementierung, die gelinkt und in Anwendungen eingebunden werden kann. Die Entwicklung von mruby wird von Yukihiro “Matz” Matsumoto geleitet, dem Schöpfer von Ruby.</li> <li><a href="https://web.archive.org/web/20240419002436/http://www.ironruby.net/">IronRuby</a> integriert sich gut in die .NET-Plattform.</li> <li><a href="https://web.archive.org/web/20240419002436/http://maglev.github.io/">MagLev</a> definiert sich selbst als „eine schnelle, stabile Ruby-Implementierung mit integrierter Objektpersistenz und verteiltem Shared Cache“.</li> <li><a href="https://web.archive.org/web/20240419002436/https://github.com/parrot/cardinal">Cardinal</a> ist ein „Ruby-Compiler für die <a href="https://web.archive.org/web/20240419002436/http://parrot.org/">Parrot</a> Virtual Machine“ (Perl 6).</li> </ul> <h3>Referenzen</h3> <p id="fn1"><sup>1</sup> Matz in der Ruby-Talk-Mailingliste am <a href="https://web.archive.org/web/20240419002436/https://blade.ruby-lang.org/ruby-talk/2773">12. Mai 2000</a>.</p> <p id="fn2"><sup>2</sup> Matz in <a href="https://web.archive.org/web/20240419002436/http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html">An Interview with the Creator of Ruby</a>, 29. November 2001.</p> <p id="fn3"><sup>3</sup> Matz in <a href="https://web.archive.org/web/20240419002436/http://www.artima.com/intv/closures2.html">Blocks and Closures in Ruby</a>, 22. Dezember 2003.</p> </div> </div> <hr class="hidden-modern"/> <div id="sidebar-wrapper"> <div id="sidebar"> <div class="navigation"> <h3><strong>Der Einstieg</strong> ist einfach!</h3> <ul class="menu"> <li><a href="https://web.archive.org/web/20240419002436/https://try.ruby-lang.org/">Teste Ruby! (im Browser)</a></li> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/documentation/quickstart/">Ruby in 20 Minuten</a></li> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/documentation/ruby-from-other-languages/">Ruby für Umsteiger</a></li> </ul> </div> <div class="navigation"> <h3><strong>Entdecke</strong> eine neue Welt…</h3> <ul class="menu"> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/documentation/">Dokumentation</a></li> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/libraries/">Bibliotheken</a></li> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/documentation/success-stories/">Erfolgsgeschichten</a></li> </ul> </div> <div class="navigation"> <h3><strong>Beteilige dich</strong> an einer freundlichen und wachsenden Community.</h3> <ul> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/community/mailing-lists/">Mailing-Listen</a>: Sprich mit Programmierern auf der ganzen Welt über Ruby.</li> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/community/user-groups/">User-Groups</a>: Treffe Rubyisten in deiner Umgebung.</li> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/community/weblogs/">Weblogs</a>: Lies, was gerade jetzt in der Ruby-Community passiert.</li> <li><a href="/web/20240419002436/https://www.ruby-lang.org/de/community/ruby-core/">Ruby-Entwicklung</a>: Hilf mit, die neuesten Ruby-Versionen zu verbessern.</li> <li><a href="https://web.archive.org/web/20240419002436/https://bugs.ruby-lang.org/">Fehler melden</a>: Melde einen Fehler oder hilf mit, offene Fehler zu beseitigen.</li> </ul> </div> <h3>Syndication</h3> <p><a href="/web/20240419002436/https://www.ruby-lang.org/de/feeds/news.rss">Aktuelle Neuigkeiten (RSS)</a></p> </div> </div> <hr class="hidden-modern"/> </div> </div> </div> <div class="container"> <div id="footer"> <div class="site-links"> <a href="/web/20240419002436/https://www.ruby-lang.org/de/" class="home">Home</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/downloads/">Downloads</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/documentation/">Dokumentation</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/libraries/">Bibliotheken</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/community/">Community</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/news/">Neuigkeiten</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/security/">Sicherheit</a> <a href="/web/20240419002436/https://www.ruby-lang.org/de/about/">Über Ruby</a> </div> <p> Diese Website in anderen Sprachen: <a href="/web/20240419002436/https://www.ruby-lang.org/bg/">Български</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/de/">Deutsch</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/en/">English</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/es/">Español</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/fr/">Français</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/id/">Bahasa Indonesia</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/it/">Italiano</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/ja/">日本語</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/ko/">한국어</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/pl/">polski</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/pt/">Português</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/ru/">Русский</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/tr/">Türkçe</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/vi/">Tiếng Việt</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/zh_cn/">简体中文</a>, <a href="/web/20240419002436/https://www.ruby-lang.org/zh_tw/">繁體中文</a>. </p> <p><a href="/web/20240419002436/https://www.ruby-lang.org/de/about/website/">Diese Website</a> wird mit Stolz von Mitgliedern der Ruby-Community gepflegt.</p> </div> </div> </body> </html> <!-- FILE ARCHIVED ON 00:24:36 Apr 19, 2024 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 19:13:40 Nov 30, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.798 exclusion.robots: 0.036 exclusion.robots.policy: 0.023 esindex: 0.014 cdx.remote: 19.786 LoadShardBlock: 173.468 (3) PetaboxLoader3.datanode: 98.077 (4) load_resource: 383.662 PetaboxLoader3.resolve: 307.636 -->

Pages: 1 2 3 4 5 6 7 8 9 10