#author("2023-11-23T14:36:21+09:00;2023-11-23T14:34:33+09:00","default:inoue.ko","inoue.ko") #author("2023-11-23T17:29:18+09:00;2023-11-23T14:36:21+09:00","default:inoue.ko","inoue.ko") *プログラミング言語 プログラムを記述するための形式言語 ~ コンピュータと人工知能・ロボットは、私たちの社会、私たちの仕事のあり方を大きく変えつつあります。これらに関して全体を俯瞰する知識が必要です。 重要なのは、コーディングのスキルそのものではなく、コーディングの体験を通して、プログラミング的思考を身につけること、また、他者(機械も他者です)とのコミュニケーションの方法を知ることです。 ちなみに、プログラミング言語は(英語をベースとした)世界の共通言語です。自然言語としての英語は、世界中どこでも通用するものではありませんが、プログラミング言語は、それを知っている者同士であれば、世界中で通用します。 ~ ***プログラミング言語の動向 -[[The RedMonk Programming Language Rankings>Google:The RedMonk Programming Language Rankings]] -[[StackOverflow Most Popular Technologies>Google:StackOverflow Most Popular Technologies]] -[[TIOBE Index>https://www.tiobe.com/tiobe-index/]] -[[PYPL|PopularitY of Programming Language index>http://pypl.github.io/PYPL.html]] ~ ***代表的な言語 -[[C>Google:C]] &small(コンパイラ型|手続き型); -[[C++>Google:C++]] &small(コンパイラ型|オブジェクト指向 Google3大言語); -[[Java>Google:Java]] &small(コンパイラ/インタプリタ型|オブジェクト指向 Google3大言語); -[[C#>Google:C#]] &small(コンパイラ型|オブジェクト指向); -[[Objective-C>Google:Objectiv-C]] &small(コンパイラ型|オブジェクト指向 MacOS iOS 公式開発言語); -[[Python]] &small(インタプリタ型|オブジェクト指向 Google3大言語); -[[Ruby>Google:Ruby]] &small(コンパイラ/インタプリタ型|オブジェクト指向); -[[JavaScript]] &small(インタプリタ型|オブジェクト指向); -[[PHP]] &small(インタプリタ型|オブジェクト指向); -[[Processing]] &small(デザイナー・アーティストのためのプログラミング言語); --[[p5.js]] &small(Processing を JavaScript で・・); -[[R言語>Google:R言語]] &small(統計解析向けのプログラミング言語と開発実行環境); ~ 以下、一般には「プログラミング言語」とは区別されます。 -[[SQL>Google:SQL]] &small(データベース言語(問い合わせ言語)); -[[HTML]] &small(マークアップ言語); -[[CSS]] &small(スタイルシート言語); --[[Sass(SCSS)]] &small(CSSのメタ言語 Rubyでコンパイルが前提); ~ ***コンパイラ型とインタプリタ型 コンピュータのCPUは単なる計算機で、0と1で書かれた「機械語」しか理解出来ません。そこでソースコードを機械語に翻訳・通訳する必要が生じます。プログラミング言語は、その仕方の違い、つまり「一括して翻訳する」か「一文ずつ通訳する」かの違いで区別されます。 -コンパイラ型 ソースコードを事前に機械語へ「一括変換」します。結果、実行時の変換プロセスがない分、高速処理が可能になります。また、実行時に変換するための仕組みが必要ないので、単独でプログラムを実行できます。ターゲットとなるOSを選択して動作する、いわゆるネイティブアプリケーションはC++を代表とするコンパイラ型言語で作られています。 例)C, C++, C#, Objective-C・・ -インタプリタ型 インタプリタ型の言語では、書かれたソースコードを逐次読み込んで、それを機械語に変換してコンピュータに命令を与えます。インタプリタ環境があればどこでも動作するため、機種・環境に依存しないプログラミングが可能です。 例)Python, JavaScript, PHP・・ ~ ***プログラミング言語のパラダイム 初期のコンピュータプログラミングは、入力>処理>出力という計算手順を逐次的に書くだけ・・というシンプルなものでしたが、扱う対象の変化に伴い、その書き方の発想も変化してきました。特にGUI(グラフィカルユーザーインターフェイス)の登場で、マウスクリックなどの「イベント」への対応が中心になるとともに、データと処理(関数)をパック化した「オブジェクト」を中心としたプログラミングへと変化してきました。現在のプログラミング言語の多くは''オブジェクト指向型''のパラダイムを採用しています。 -[[構造化プログラミング>Google:構造化プログラミング]]|[[Structured programming>GoogleImage:Structured programming]] -[[手続き型プログラミング>Google:手続き型プログラミング]]|[[Procedural programming>GoogleImage:Procedural programming]] //-[[非手続き型プログラミング>Google:非手続き型プログラミング]]|[[Non-procedural language>GoogleImage:Non-procedural language]] -[[関数型プログラミング>Google:関数型プログラミング]]|[[Functional programming>GoogleImage:Functional programming]] -[[''イベント駆動型プログラミング''>Google:イベント駆動型プログラミング]]|[[Event-driven programming>GoogleImage:Event-driven programming]] -[[''オブジェクト指向プログラミング''>Google:オブジェクト指向プログラミング]]|[[Object-oriented programming>GoogleImage:Object-oriented programming]] -[[''オブジェクト指向プログラミング''>Google:オブジェクト指向プログラミング]]|[[Object-oriented programming>GoogleImage:Object-oriented programming]]|[[記事>ObjectOrientedProgramming]] -[[参考:スパゲティプログラム>Google:スパゲティプログラム]]|[[GoogleImage:Spaghetti program]] ~ ~ **付記:ネイティブアプリとWebアプリ ***ネイティブアプリ ネイティブアプリとは、PC、タブレット、スマートフォンなどにインストールして動かすアプリケーションです。OSごとに異なるAPI(Application Programming Interface)を利用して動くものなので、例えば、Windows用のアプリは、WindowsOSを搭載したパソコンでしか動きません。 ネイティブアプリをインストールする際は、対応するOS(バージョンも含めて)を確認する必要があります。 一般に、ネイティブアプリは、コンパイラ言語でコーディングされてバイナリーファイル(機械語に翻訳・ビルド((ビルドとは、複数のオブジェクトファイルを1つにまとめて実行可能なファイルに変換する作業を言います。))されたもの)として提供されるもので、ファイルを開いても、プログラムのコードを直接見ることはできません。 -Windowsの場合:ビルドされた実行可能ファイルは .exe(Executable)という「拡張子」が付いています。ちなみに .com(コマンド)や .bat(バッチ)という拡張子がついたファイルも実行ファイル扱いなので注意が必要です。ちなみに、「拡張子」によって、ファイルの種類を特定し、システムの挙動を変えるという発想は Windows 特有のものです。 -Mac の場合:MacOSはファイルが実行可能か否かを判断する際に、拡張子に頼ることはありません。実行ファイルかどうかは、ファイルの属性として定義されます。ちなみに .app は実行ファイルを含むコンテナの拡張子です。 -Llinux の場合:実行ファイルかどうかは、ファイルの属性として定義されるのが Linux(Unix)や MacOS の一般的な考え方です。.xxx というのは、ファイル名の一部で、ビルドされた実行ファイルに .bin(Binary) という文字列がつくこともありますが、そもそも Linux には「拡張子」という概念は無い・・と考えて良くて、.xxxx もファイル名の一部と考える方がよいでしょう。その有無自体がシステム面で影響することはありません。 -付記:ファイルの属性については、__[[FilePermission]]__をご覧下さい。 ~ ***Webアプリ Webアプリとは、デバイスやOSプラットフォームに依存することなく、''Webブラウザ上でアクセスして利用するアプリケーション''のことです。 フロントエンド(ブラウザ側)で機能する HTML、CSS、JavaScript といった言語と、バックエンド(サーバ側)で機能するPHP、Ruby、Python、Node.js などの言語の組み合わせで成立します。 身近な例としては、GoogleMap や GoogleDocs などのサービス、ECサイト、CMS(Blog や Wiki)などが挙げられます。 クラウド上に存在するサービス・・という感覚で、その実体は、ネイティブアプリのような実行ファイルとは異なり、複数の言語で書かれたソースコードが、ブラウザ上、またサーバー内でインタプリタ言語として処理されている・・というイメージになります。 フロントエンド側のソースコード(HTML、CSS、JavaScript)は、ブラウザの「ソースを表示」で、実際に誰でも見ることができます。バックエンド側のソースコード(PHP、Ruby、Python、Node.js など)を利用者が見ることはできない仕様になっていますが、基本的にエディタで直接開くことができるテキストファイルとしてサーバー上に置かれています。 ~ ~ ~