ホームページ ウェブフロントエンド jsチュートリアル TCProposal のナビゲート: エラー処理から Iterator.range まで

TCProposal のナビゲート: エラー処理から Iterator.range まで

Jan 09, 2025 am 07:30 AM

SpiderMonkey と JavaScript エンジンの強化を通じたインターンの旅

Iterator.range プロポーザルとその内部のアルゴリズムを初めて見たとき、それをハッキングできるかどうかはわかりませんでした。 Outreachy の寄稿者として、私と他の寄稿者は 1 か月間寄稿し、その後 1 人のインターンが提案/仕様に取り組むために選ばれます。

Navigating TCProposals: From Error Handling to Iterator.range

前文

貢献期間が始まって数日後、私は Outreachy の貢献者に指定されたタスクを割り当てられましたが、最も重要なのは、ErrorIsError TC39 提案が割り当てられたことです。 

SpiderMonkey (Mozilla JavaScript Engine) で TC39 プロポーザルを実装するための最初のステップは、TC39 プロポーザルの設定を追加することです。
 
これにより、実行時に機能を有効または無効にできるようになります。これは重要です。十分にテストして、ユーザーに問題が発生しないと確信できるまでは、機能をデフォルトで有効にしたくないからです。この場合、プリファレンスを作成し、値を false に設定します。

ご覧のとおり、JavaScript で実装すると、この提案は非常に簡単で、最初の実装となりました。しかし、コード レビューが戻ってきて、提案をネイティブ C 関数として実装する方が良いと判断されました。これは、理由と C の操作の両方の点で、私にとって学習プロセスでした。

このプロセス中に、クロスコンパートメント ラッパー (CCW) と JavaScript エンジンの組み込み型チェックに関連するいくつかの興味深い課題に遭遇しました。 


クロスコンパートメントラッパーとErrorObjectチェックの問題

Error オブジェクトを処理する場合、IsErrorObject 関数は、指定された値が ErrorObject 型のインスタンスであるかどうかを判断します。ただし、引数が別のコンパートメントからの ErrorObject のクロスコンパートメント ラッパー (CCW) である場合、重大なエッジ ケースが発生します。 CCW は基になるオブジェクトを不明瞭にするため、IsErrorObject チェックでは CCW を直接考慮しません。

実装コンテキスト: 組み込み型チェックを処理するコードでは、オブジェクトが特定の型であるかどうかをチェックするために intrinsic_IsInstanceOfBuiltin 関数が使用されます。 this 値に適用すると機能します。すでにアンラップされていると仮定します。 CCW によってまだラップされている可能性のある引数は処理されません。

提案されたソリューション: 専用のネイティブ関数

この問題に対処するには、次の解決策が必要です。
1.新しいネイティブ関数の追加: CCW を透過的に処理するための専用のネイティブ関数が次の方法で作成されます:

  • CCW のラップを解除します。
  • ラップされていないオブジェクトのタイプが ErrorObject であるかどうかをテストします。
  • 1 つのまとまった操作でオブジェクト タイプを検証します。

2.自己ホスト型の複雑性の削除:
この新しい関数を JSNative として実装することで、プロセスを合理化し、自己ホスト型ヘルパーに依存せずに単一のネイティブ関数内ですべての操作を実行できます。

なぜこのアプローチなのか?

非オブジェクトのケースの処理: 新しい関数は、値のラップ解除を続行する前に、値がオブジェクトであるかどうかのチェックを統合します。
仕様の調整の簡素化: CCW は実装の詳細であり、TC39 JavaScript 仕様の一部ではないため、これらの変更により、矛盾を回避しながら動作が仕様と一致することが保証されます。


上記は 2 つのテスト ファイルを除く 45 行のコードで構成されています。1 つは JIT (ジャストインタイム) コンパイルされたテスト用、もう 1 つは Test262 テスト/ファイル用です。ただし、この 45 行のコードを通じて、次のことができました。

  • Mozilla コードベース内の事前定義されたエラー メッセージの場所とその使用方法を学びます。これは、Iterator.range.
  • のエラー メッセージを定義する必要がある場合に便利であることがわかりました。
  • 夜間ビルドと夜間ビルドを理解します。
  • コードの一貫性: TC39 仕様を満たすようにコードを調整し、Mozilla 標準に従って新しく追加されたコードの略記を避けます。

私が現在取り組んでいること: Iterator.range

Outreachy への貢献期間中に、クロスコンパートメント ラッパーの複雑さを掘り下げ、ErrorObject 処理を強化した後、私は同様に刺激的なものに注目しました。それは、Mozilla Outreachy インターンシップでの Iterator.range 提案です。

馴染みのない人のために説明すると、Iterator.range は JavaScript の TC39 提案への追加であり、イテレーターの汎用性を高めることを目的としています。このメソッドは、値の範囲を生成する効率的な方法を導入します。これは、一連の数値の反復処理やステップベースのループの作成など、日常のプログラミングで特に役立ちます。
概念自体は単純に見えるかもしれません。開始点から終了点まで一連の値を生成することは、SpiderMonkey での実装が非常に困難であることが判明しています。

抽象操作やネイティブ C 関数の処理を必要とした以前の ErrorObject の作業とは異なり、Iterator.range では、JavaScript イテレータが内部でどのように動作するか、また SpiderMonkey がこれらの機能をエンジン レベルでどのように統合するかについて深く調べる必要があります。

私が Iterator.range の作業を開始したとき、ErrorIsError 提案に対して行ったことと同様の初期実装が行われていました。プロポーザルの設定を追加し、JavaScript シェルで組み込みにアクセスできるようにします。

Iterator.range は単純に false を返しました。これは、Iterator.range の実​​際の実装が開発中であるか完全に実装されていないことを示すスタブであり、ここで私が登場しました。

まず、Iterator.range 関数に委任する CreateNumericRangeIterator 関数を作成しました。続いて、最初の 3 つのステップを Iterator.range 関数内に実装しました。
次に、CreateNumericRangeIterator 関数で NUMBER-RANGE データ型の変数とパラメーターを初期化しました。

Iterator.range(0, 10) など、1 ずつ増加するシーケンスの実装に重点を置きました。また、仕様のステップ 19 に合わせて、適切な引数を使用して IteratorRangeGenerator (範囲提案仕様のステップ 18 を処理する) を呼び出すように CreateNumericRangeIterator 関数を更新し、その機能を検証するテストを追加しました。
今週は、Iterator.range によって返されるジェネレーターのプロトタイプを適切に設定する方法を検討します。 

今後数週間/数か月の私の仕事には以下が含まれますが、これらに限定されません。

  • Iterator.range によって返されるジェネレーターの適切なプロトタイプを設定します。
  • Iterator.range で BigInt をサポートします。
  • 今のところ 1 増加するシーケンスのみを取り上げているため、他のシーケンスもサポートします。
  • 上記の適切なテストを追加します。

こちらもお勧めです:

オープンソースの解読: アウトリーチの旅で学んだ語彙

フリーソフトウェアで働くリモートインターンシップをご希望ですか?

以上がTCProposal のナビゲート: エラー処理から Iterator.range までの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScriptの進化:現在の傾向と将来の見通し JavaScriptの進化:現在の傾向と将来の見通し Apr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptエンジン:実装の比較 JavaScriptエンジン:実装の比較 Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

JavaScript:Web言語の汎用性の調査 JavaScript:Web言語の汎用性の調査 Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合) next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合) Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合) next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合) Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

C/CからJavaScriptへ:すべてがどのように機能するか C/CからJavaScriptへ:すべてがどのように機能するか Apr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptとWeb:コア機能とユースケース JavaScriptとWeb:コア機能とユースケース Apr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

See all articles