見出し画像

【プログラミング言語】Javascriptの勉強記録

JavaScriptは、プログラミング言語でありHyperText Markup Language(HTML)やCascading Style Sheets(CSS)と並ぶ World Wide Web(WWW)の中核技術の一つである。プロトタイプベースのオブジェクト指向スクリプト言語であるが、クラスなどのクラスベースに見られる機能も取り込んでいる。

利用される場面はウェブサイト、ウェブアプリケーション、バックエンド、デスクトップアプリケーション、モバイルアプリケーションなど、ウェブブラウザからサーバ、デスクトップからスマートフォンまで多岐にわたっている。

【ProgrammingLanguage】プログラミング言語とは

画面で見える言語はすべてプログラミング言語疑惑!?もしかしたらKeyBoardはJavascript⁉

プログラミング言語(programming language)とは、プログラムを記述するための人工言語。コンピュータプログラムを書くために考案された、正確に定義された記号と規則のしくみ。以前は、しばしばプログラム言語と表記された。

プログラミング言語は、情報を組織し処理するタスクについての理解を容易にし、アルゴリズムを正確に表現することができる。特に、チューリング完全であることが特徴である。言語仕様とプログラムとその入力データの組合せで、そのプログラムを実行したときの結果(外部から観測される振る舞い)が完全に指定できなければならない。

プログラミング言語は構文規則(自然言語に関する言語学で言う統語論の規則に類似したもの)と意味規則(自然言語の意味論に類似した規則)で定義される。形式的ないし非形式的(自然言語による)な仕様が(構文規則は形式的で、意味規則はそうでない、というものが多い)実装とは独立した文書で示される言語もあれば、実装のみの言語もある。

実行方法によってプログラミング言語を分類する方法もあり、インタープリタ方式言語/ コンパイラ方式言語(コンパイル方式言語)と分類する方法である。 インタープリタ方式言語の例としてはPHPやRubyを挙げることができる。コンパイラ方式言語の例としてはC言語、C++、Erlang、Haskell、Rust、Go、FORTRAN、COBOLなどを挙げることができる。なお言語によってはインタープリタ方式で実行でき、かつコンパイル方式で実行することができるものもある。

辞書引用:インタプリタ(interpreter)とは、プログラミング言語で書かれたソースコードないし中間表現を逐次解釈しながら実行するプログラムのこと。「インタープリタ」「インタープリター」などと表記することもある。

辞書引用:コンパイラ(compiler)は、高水準言語で書かれたコンピュータプログラムを、 コンピュータが実行や解釈できる形式に、一括して変換するソフトウェア。一回でコンパイルが可能なものをワンパスコンパイラと呼び、一般にマルチパスコンパイラよりも高速で扱いやすい。Pascalなど、多くの言語はワンパスでコンパイルできるよう意図して設計されている。マルチパスコンパイラは、ワイドコンパイラと呼ばれることもあり、パスの範囲が広いことを意味します。プログラムの一部ではなく、コンパイルされているプログラム全体を「見る」ことができます。したがって、これらのコンパイラで利用できるスコープが広いため、ワンパスコンパイラの出力と比較して、コード生成が向上します(たとえば、コードサイズが小さくなり、コードが高速になります)。ただし、コンパイラの時間とメモリ消費量が多くなります。さらに、一部の言語は、その設計の結果として、シングルパスでコンパイルできない。

【プログラミング言語】Javascriptの得意領域

並行処理

JavaScriptではしばしば、ネットワークを介したリクエストのような "待ち"(処理時間) がある処理を行う。これに対処するために非同期処理をサポートし並行処理が可能となる。もしも待ち(処理時間)の間にプログラムを停止/sleep させると、その間に他の処理をそのスレッドで行うことが出来ない(ブロッキング)。もしネットワークリクエストが返ってくるまでブロッキングしたとすると、その間ブラウザのレンダリングも停止してしまう。

非同期処理を記述する方法としてコールバック関数がある。JavaScriptはコールバック関数記法をラップするPromise、Promiseを同期的なコードのように記述できるAsync/await構文をもつ。

並列処理

並列処理とは、複数の処理を同時に実行することで、処理時間を短縮し、効率的なプログラムを実現する方法。同期処理とは通常の実行順番通りにプログラムが実行され実行が終わるまで次の処理に移らない、というような処理方式。javascriptは同期処理で処理が行われる。逆に非同期処理とは同時に実行されているように見える。これが非同期処理です。

JavaScriptでは複数スレッドを用いた並列処理が可能である。共有メモリ上のバッファを表現するSharedArrayBuffer、バッファ操作オブジェクトAtomicsが定義されている。スレッドそのものの仕様は環境ごとに異なる(ECMAScriptでは定義されていない)。ブラウザの場合はWorker、Node.jsの場合はworker_threadsで定義されている。ただこの2環境ではほぼ共通の仕組みとなっており、例えばpostMessageによるメッセージングが両者でサポートされている。

【プログラミング言語】Javascriptの歴史

JavaScriptはネットスケープコミュニケーションズのブレンダン・アイクによって、1995年5月に10日間で開発された。上司からの指示に「Javaのような外観にしてくれ」「初心者に優しく」「Netscapeブラウザのほとんどなんでも制御できるように」との注文があった。Netscape Navigator 2.0で実装される。

開発当初はLiveScriptと呼ばれていたが、1995年にサン・マイクロシステムズ(現・オラクル)が開発したプログラミング言語Javaが当時大きな注目を浴びており、ネットスケープとサン・マイクロシステムズが業務提携していた事もあったため、JavaScriptという名前に変更された。最初のJavaScriptエンジンはブレンダン・アイクによりNetscape Navigatorのために作成されたものであった。このエンジンはSpiderMonkeyと呼ばれており、C言語で実装されていた。また、全てJavaで記述されたJavaScriptエンジンであるRhinoも同じくNetscapeのNorris Boydらにより作成された。

1996年にマイクロソフトのInternet Explorer 3.0にJScriptという名前で搭載されるようになると、その手軽さからJavaScriptは急速に普及していく。1997年、通信に関する標準を策定する国際団体EcmaインターナショナルによってJavaScriptの中核的な仕様がECMAScriptとして標準化され、多くのウェブブラウザで利用できるようになった。ネットスケープは、ウェブアプリケーション開発言語として自社のサーバ製品に実装したLiveWire JavaScriptも発表したが、こちらはあまり普及しなかった。

JavaScriptの登場初期は、ブラウザベンダー間で言語仕様の独自拡張が行われていたため、ブラウザ間の互換性が極めて低かった。ECMAScriptの策定以降は実装間の互換性は向上し、DOMなど関連仕様の実装に関する互換性も高くなっていった。

かつてはJavaScriptという言葉が「ECMAScript標準」を指す、あるいは「独自実装を含んだ広義のJavaScript」を指し幅広い意味で使われていた。ゆえにどちらの意味でJavaScriptという言葉が使われているかは文脈で判断する必要があった。たとえばかつてマイクロソフトによる実装はJScriptと呼ばれたが、JScriptをJavaScriptと呼ぶような場面があった。

ECMAScriptは仕様自体に独自の拡張を条件付きで認める記述があり、ブラウザが実装しているスクリプト言語はすべてECMAScriptに準拠していることになる。広義の意味でこれをJavaScriptと呼ぶ場合、主要なブラウザが実装しているスクリプト言語はマイクロソフトやGoogle、Appleの実装も含めてJavaScriptである。実装間での差異を吸収するためにPrototype JavaScript Frameworkなどのライブラリが用いられた。

次世代のJavaScriptとして、"JavaScript 2.0" を作ろうとした動きは2度あったが、いずれもまとまらなかった。1度目はECMAScript 3が完成したのち2000年から2003年にかけて発生したが、ネットスケープとマイクロソフトの対立でまとまらなかった。当時ネットスケープが提案していた案はアドビのActionScript 2.0に引き継がれ、マイクロソフトの案はJScript .NETへと引き継がれた。

その後もネットスケープ及びMozilla FoundationはECMAScriptの策定に並行してJavaScriptを拡張し、JavaScript 1.x系列としてバージョンアップを繰り返していた。ECMAScript側ではECMAScript 4の策定が1999年以降進められており、2006年の時点でMozilla Foundationはこれに基づいてJavaScript 2.0を作成することを表明していた。MozillaはECMAScript 4の策定にあたって、Pythonの文法を一部取り込んだ案を提案しており、自身でもこれを実装していた。

しかしその後、ECMAScriptの標準化作業がMozilla, Adobe, Opera, Googleらが推す ECMAScript 4 と、Microsoft, Yahoo! らが推す ECMAScript 3.1 に事実上分裂してしまった影響から、2008年8月に大きな方針転換があり、ECMAScript 4は破棄され後者がECMAScript 5として2009年に標準化された。ECMAScript 4に入る予定だった機能は新たに発足した「ECMAScript Harmony」に先送りとなった。これは後にECMAScript 2015として標準化が完了した。なお、ECMAScript 5が標準化されて以降、MozillaのJavaScript実装はECMAScriptへの準拠を謳うようになった。そしてバージョン番号での呼称は行われなくなり、JavaScript 2.0は事実上死語となった。

まとめ

ロボットプログラミングは多くの言語で行われているが、基本としてはC言語、C++、Python、Javaが頻度高く利用されているとのこと。レゴのロボットプログラミングを少し触る機会があったのですが、プログラミングも必要ではあるが動くためにはモーターや動く管が必要でありプログラミングをオブジェクトに入れただだけでは触れる物体としては動くものではないんだなと思いました。逆に3Dデータやゲームなどに出てくる昆虫はデータとプログラミングだけでなんとかなったとしても触れるオブジェクトの場合は難しいなと思いました。逆により細かい動作をゲームなどの昆虫で表現したい場合はより多くのデータ以上に本物の昆虫の動きをセンサーで感知し膨大にデータ化したり、機械型の昆虫で昆虫と同じ動作をさせデータ化、プログラム化させることも大事ではあると思います。ただ、処理速度やPCやデータをストックする装置などのキャパが少なすぎると時間がかかり自分自身のストレスになるのであまりおすすめはしないです。

参考資料:

Insect(昆虫)プログラミング

ピタゴラスイッチ『くものすのプログラム』

映画『聖地には蜘蛛が巣を張る』

おすすめ書籍:

世界2.0-メタバースの歩き方と創り方

ビジネスモデル2.0図鑑

数学の世界-改訂第4版 (ニュートン別冊) ムック


この記事が気に入ったらサポートをしてみませんか?