過去を振り返り、新しいことを学ぶと幸せになれます
まず最初に、この V8 オンライン マニュアル (http://izs.me/v8-docs/main.html) を思い出してください。
前回のbuilding.gypファイルをまだ覚えていますか?
{
"ターゲット": [
{
"target_name": "アドオン",
"ソース": [ "addon.cc" ]
}
]
}
これと同じように、*.cc ファイルがさらにいくつかある場合は、次のようになります:
"ソース": [ "addon.cc", "myexample.cc" ]
前回は 2 つのステップに分けましたが、実際には、構成とコンパイルは次のようにまとめることができます。
$node-gypconfigurebuild
はい、続けましょう。
目次
関数パラメータ
いよいよパラメータについて話さなければなりません。
a と b を加算して結果を返す関数 add(a, b) があると仮定して、最初に関数の概要を記述します。
名前空間 v8 を使用;
ハンドル Add(const Arguments& args)
{
HandleScope スコープ;
}
これは関数のパラメータです。まずはv8の公式マニュアルリファレンスを見てみましょう。
•int Length() const
•ローカル 演算子[](int i) const
残りは気にしない、この 2 つが重要です。 1 つは関数に渡されるパラメーターの数を表し、もう 1 つの括弧は添字インデックスを介して n 番目のパラメーターにアクセスするために使用されます。
角括弧内のインデックス演算子は、Node.js のすべての型の基本クラスである Local
•IsArray()
•IsBoolean()
•IsDate()
•IsFunction()
•IsInt32()
•IsNativeError()
•IsNull()
•IsNumber()
•IsRegExp()
•IsString()
•...
それらを 1 つずつリストするつもりはありません。残りについてはドキュメントを読んでください。 。:.゚ヽ(*´∀`)ノ゚.:。
これは後で使用する関数です。詳細については、v8 のドキュメントを参照してください。
名前が示すように、エラーをスローします。このステートメントの実行後は、Node.js ローカル ファイルで throw() ステートメントを実行するのと同じになります。例:
ThrowException(Exception::TypeError(String::New("引数の数が間違っています")));
throw new TypeError("引数の数が間違っています");
この関数はドキュメントにも記載されています。
具体的には、一部の関数は特定の値を返す必要がないか、現時点では戻り値がないため、これは null 値です。
やってみよう、サオニアン!
上記の点を理解すれば、すぐに a b のロジックを書けるようになると思います。Node.js 公式マニュアルからコードをコピーして、実行してみましょう。
#include
名前空間 v8 を使用;
ハンドル Add(const Arguments& args)
{
HandleScope スコープ;
// 3 つ以上のパラメータを渡すことができることを意味しますが、実際には最初の 2 つだけを使用します
If(args.Length()
{
// エラーをスローします
ThrowException(Exception::TypeError(String::New("引数の数が間違っています")));
// null 値を返す
returnscope.Close(Unknown());
}
If(!args[0]->IsNumber() || !args[1]->IsNumber())
{
// エラーをスローし、null 値を返します
ThrowException(Exception::TypeError(String::New("Wrong argument")));
returnscope.Close(Unknown());
}
//
http://izs.me/v8-docs/classv8_1_1Value.html#a6eac2b07dced58f1761bbfd53bf0e366)
// `NumberValue` 関数
ローカル num = Number::New(args[0]->NumberValue() args[1]->NumberValue());
}
最後にexport関数を記述すればOKです。
{
エクスポート->Set(String::NewSymbol("add"),
FunctionTemplate::New(Add)->GetFunction());
}
NODE_MODULE(アドオン、初期化)
コールバック関数
前の章では、Hello world についてのみ説明しました。この章では、おばあちゃんが意識的な発見をし、別のコールバック関数を作成しました。
いつものように、最初にフレームワークを作成します。
名前空間 v8 を使用;
ハンドルRunCallback(const Arguments& args)
{
HandleScope スコープ;
returnscope.Close(Unknown());
}
func(関数(msg) {
console.log(msg);
});
つまり、パラメータをコールバック関数に渡し、それを console.log() で出力できると想定します。
まず文字列シリーズが必要です
早速、最初に文字列を与えてから、それについて話しましょう。 (√ ε :)
ただし、Node.js コードの型指定が弱いため、この文字列をユニバーサル型にする必要があります。
Local
え? Local
それでは、それについて少しお話しさせてください。ここと V8 リファレンス ドキュメントを参照してください。
ドキュメントに示されているように、Local
それではローカルについて話しましょう。
ハンドルにはローカル ハンドルと永続ハンドルの 2 種類があり、それぞれローカル
次に、パラメータテーブルシリーズが必要です
ターミナルのコマンドラインから C/C を呼び出した後、コマンドラインパラメータを取得するにはどうすればよいですか?
#include
void main(int argc, char* argv[])
{
// ...
}
ちなみに、ここでのargcはコマンドラインパラメータの数、argv[]は各パラメータです。次に、Node.js のコールバック関数を呼び出します。v8 も同様の方法を採用しています。
int argc,
ハンドル argv[]
);
~~QAQ が Handle
多くの側面 (SegmentFault、StackOverflow、KouKou グループ) で検証した結果、上記の関数の 3 つのパラメーターの意味が最終的に解決されました。
次の 2 つのパラメータについては多くは説明しません。1 つはパラメータの数で、もう 1 つはパラメータの配列です。最初のパラメータ Handle
JS での apply と同じです。
cb.apply(context, [ ...args...]);
最初の引数として渡されるオブジェクトは、関数スコープ内で this になります。JS について詳しくない場合は、ここで JS の詳細を参照してください。http://unschooled.org /2012/03/undering-javascript-this/
——StackOverflow
つまり、その機能は呼び出される関数の this ポインタを指定することです。この Call の使用法は、JavaScript の binding()、call()、および apply() に似ています。
したがって、私たちがしなければならないことは、最初にパラメータテーブルを構築し、次に実行のために Call 関数を渡すことです。
最初のステップは変換関数を表示することです。変換関数は元々オブジェクト型であるためです。
ローカル cb = ローカル::Cast(args[0]);
2 番目のステップは、パラメーター テーブル (配列) を作成することです:
Local
ラストコール機能シリーズ
cb を呼び出してパラメータを渡します:
cb->Call(Context::GetCurrent()->Global(), 1, argv);
ここでの最初のパラメータ Context::GetCurrent()->Global() は、関数の this としてグローバル コンテキストを取得することを意味します。2 番目のパラメータはパラメータ テーブル内の番号です (結局、Node.js ですが)。配列には長さ属性がありますが、実際にはシステムは C の配列の長さを知らないため、配列の長さを示すために自分で数値を渡す必要があります); 最後のパラメーターは作成したばかりのパラメーター テーブルです。 。
最終章ファイナルドキュメントシリーズ
関数を作成し、それをエクスポートされた関数に入れて、最後に宣言するというこのステップについては、誰もがすでによく知っていると思います。
コードを直接リリースするだけですが、Node.js ドキュメントに直接アクセスすることもできます。
#include
名前空間 v8 を使用;
ハンドルRunCallback(const Arguments& args)
{
HandleScope スコープ;
ローカル cb = ローカル::Cast(args[0]);
const unsigned argc = 1;
Local
cb->Call(Context::GetCurrent()->Global(), argc, argv);
returnscope.Close(Unknown());
}
void Init(Handle
NODE_MODULE(アドオン、初期化)
完了しました。残りの手順は自分で実行してください。この関数を JS で呼び出すことについては、以前に説明しました。
追加
さて、勉強ノートがどんどん自由になってきている気がしますので、分解してください~
今日はこの辺で、勉強ノートを書いている途中でCall関数のパラメータの意味などでまた困ってしまいました。
この一連の学習ノートがまだ役立つと思われる場合は、ぜひ一緒に楽しんでください〜Σ>―(〃°ω°〃)♡→

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









