Uploaded avatar of ErikSchierboom

Appy Augustがやってきました!

@ErikSchierboom
約3年前
動画

Introduction

こんにちは。ようこそ。みなさん、お元気ですか? Jurasic Julyでは、古くて影響力のある言語をいくつか探検して楽しんでもらえたら、私はうれしいです。 さて、次は2023年の8月、7つ目のテーマ月であるAppy Augustです。

アプリとは何を指すのでしょう?

さて、アプリといってもいろいろあります。

  • Webアプリケーション。今や多くの人の日常の定番です
  • スマートフォンやタブレットで動くようなネイティブアプリ
  • Windows、Mac、LinuxなどのOS上で直接動くデスクトップアプリ
  • 特定の領域に特化したアプリケーション
  • 業務用アプリケーション
  • そのほかにもいろいろあります!

では、どんな言語があるのでしょう?

今回はなんと14もの言語を取り上げます。ABAP、CoffeeScript、Dart、Delphi、Elm、Java、JavaScript、Kotlin、Objective-C、PHP、PureScript、ReasonML、Swift、TypeScriptです。

バッジ

今月は、これらの言語のいずれかで演習を5問クリアするとバッジがもらえます。 また、年間バッジのためには、次のものをクリアする必要があります。

  • アナグラム: ある単語と、アナグラム候補のリストが与えられたとき、その単語のアナグラムを見つけます
  • 電話番号: 電話番号を整形します
  • 三角形: 三角形を分類します
  • RNA転写: DNA配列を、対応するRNAの相補鎖に変換します
  • スクラブルスコア: ある単語が与えられたとき、そのスクラブルスコアを求めます

概要

ABAP

  • 1980年代にSAP SEが開発しました。その設計目標は、頭字語が何を表していたかを見れば明らかになります。Allgemeiner Berichts-Aufbereitungs-Prozessor、ドイツ語で「汎用レポート処理プロセッサ」という意味です。その後、ABAPはより汎用的に使えるように変わり、それに合わせて頭字語もAdvanced Business Application Programmingに更新されました
  • 強い静的型付けの言語です
  • マルチパラダイム:命令型プログラミングとオブジェクト指向プログラミングをサポートします
  • バイトコードにコンパイルされます。興味深いことに、ソースコードはデータベースの中に保存されます
  • すべてのコードは、リレーショナルデータベースと1つ以上のアプリケーションサーバーからなるSAPシステムのコンテキストで動作します
  • 独自技術でクローズドソースです。ただし、メンテナーの一人が素晴らしいオープンソースの再実装を作っています
  • 財務、資材管理、会計、経営といった業務アプリケーションで使われています。世界中に顧客がおり、Apple、Amazon、Walmartといった多くの有名企業が名を連ねています

なぜ優れているのか

  • 常に進化を続けており、新しい機能が定期的に追加されます
  • 信頼性:数十年の実績に裏打ちされた安定した機能
  • 充実した標準ライブラリ

際立った特徴

  • SAPシステムやデータベースとのシームレスな連携に加え、他の多くのシステムとも連携できます
  • ABAPディクショナリには、SAPシステム内のデータに関するすべてのメタデータが含まれており、テーブル、ビュー、構造が含まれます。このディクショナリの型を使って変数を静的に型付けできます。型がテーブルであっても可能です
  • ABAP WorkbenchはABAPシステムの一部で、プログラムを編集するためのツール群を含んでいます。画面の設計も含まれます

CoffeeScript

  • 2009年、Jeremy Ashkenasによって最初のコミットが行われました。最初のコミットメッセージは「謎の言語の最初のコミット」でした
  • 動的型付けのマルチパラダイム言語です(オブジェクト指向、命令型、関数型、プロトタイプベース)
  • JavaScriptにコンパイルされます(_トランスパイル_と呼ばれます)。CoffeeScriptの黄金律は「これはただのJavaScriptです」というものです。初期に成功した「JSへのトランスパイル」言語の1つです
  • 当時JSを書いていた人が苦しんでいた問題のいくつかをCoffeeScriptが解決していたため人気になりました(例えばthisの束縛の挙動が違う、クラスがサポートされていない、など)。Ruby on Railsにはバージョン3.1から含まれました
  • 2017年にバージョン2.0が登場し、最新のJavaScript標準と同等にすることを目指しました。言語は年に1回ほど更新されます
  • 言語のコンパイラは当初Rubyで書かれていましたが、2010年にCoffeeScript自身で書かれたセルフホスティングコンパイラに置き換えられました(このコンパイラはNodeJSに依存せず、ブラウザで直接実行できます)
  • CoffeeScriptは影響力があり、JavaScriptが特定の機能(ラムダのアロー構文、クラス)を取り入れるきっかけになりました
  • かつてDropboxやRailsで使われていました

なぜ優れているのか

  • Python、Ruby、Haskellに着想を得た、すっきりと簡潔な構文です。JavaScriptより冗長でなく、多くの括弧(())や波括弧({})を取り除きます。その一因は、インデントに意味を持たせる構文(空白が重要)を使っていることです
  • セマンティクスが簡素化されています。例えば、let、var、constが存在しないため混乱がなく、==は===(厳密等価)にトランスパイルされ、関数の束縛によってよくあるthisの間違いを防ぎます
  • 式ベースなので、if式の結果を変数に代入できます
  • たくさんの構文糖があります。例えば、thisの代わりに@を使う、trueの代わりにyes/onを使う、切り捨て除算に//を使う、thisの代わりに@を使う、などなど

際立った特徴

  • ソースコードと生成されたコードが1対1で対応する、クリーンで人間が読めるJavaScriptにコンパイルされます
  • JavaScriptとの相互運用性が高いです。JSで書かれたコードをCoffeeScriptから簡単に使えます(逆も同様です)。あらゆるJSライブラリを使えます
  • JavaScriptにない、あるいはなかった機能を追加します。リスト内包表記、文字列補間、存在演算子(?)、連鎖比較などです
  • 言語自体が小さく、コンパイラは500KB程度です(zip圧縮で100KB)

Dart

  • GoogleのLars BakとKasper Lundによって設計されました
  • 最初のリリースは2011年です
  • 特にUIの構築に適した、高速で生産性の高い言語を作ることが目標でした
  • 静的型付けです
  • マルチパラダイム:主にオブジェクト指向ですが、関数型と命令型もサポートします
  • インタプリットも、Just-In-Timeコンパイルもできます
  • 主にアプリの構築に使われますが、バックエンドの構築にも使えます

なぜ優れているのか

  • 見慣れた構文なので学びやすいです
  • モダンな型システム:型推論、パターンマッチング、async/await
  • 優れたドキュメント
  • 健全なnull安全システムによる安全性:nullポインタ例外がなくなります
  • ツールが充実しており、さまざまなIDEでサポートされています。高速なホットリロードなどにより、短いフィードバックループに最適化されています
  • ライブラリが豊富な、成長中のエコシステム

際立った特徴

  • JSやネイティブだけでなく、SwiftやKotlinにもコンパイルでき、モバイルアプリに最適です
  • Flutterライブラリを使えば、モバイル、ウェブ、デスクトップ、組み込みのアプリをすばやく構築できます。一度書けば、さまざまなプラットフォームで動きます
  • 並行処理のサポートが優れています。async/await、アイソレート(軽量な並行処理の実行単位)、Futureなどがあります

Delphi

  • DelphiはBorlandによって開発され、1995年にリリースされました
  • Object Pascalのプログラミング言語で、C#の主任設計者の一人であるAnders Hejlsbergによって開発されました
  • 強い静的型付けです
  • ネイティブコードにコンパイルされます
  • マルチパラダイム:主にオブジェクト指向ですが、命令型、宣言型、イベント駆動型もサポートします
  • 業務アプリケーション、GUI、学校(プログラミングの教育)で使われています

なぜ優れているのか

  • 学びやすいです。Object Pascalは、Pascalのシンプルさと明快さにオブジェクト指向プログラミングの機能を組み合わせており、コードを書きやすく、保守しやすくしています
  • 統合開発環境(IDE):DelphiのIDEは、開発プロセスを効率化する、使いやすく機能豊富な環境を提供します。コードナビゲーション、デバッグツール、コード補完など、開発をより効率的にする生産性機能を備えています
  • 安定性:1990年代初頭から存在し、信頼できる安定した開発ツールと言語としての実績があります。後方互換性も強力です。以前のバージョンのDelphiで書かれたコードも、最小限の調整で新しいバージョンでコンパイルして実行できます
  • クロスプラットフォーム対応:DelphiはWindowsにとどまらず能力を広げ、クロスプラットフォーム開発をサポートしています。macOS、iOS、Androidなど複数のOSを対象にできます。これにより、より多くの利用者向けのアプリを作れ、プロジェクトの到達範囲が広がります
  • 強力なコミュニティとサポート:Delphiには、ライブラリやツール、リソースをエコシステムに提供する、熱心で活発な開発者コミュニティがあります

際立った特徴

  • 高性能な実行ファイル:Delphiのアプリケーションは、その速度と性能で知られています。Delphiコンパイラは高度に最適化されたネイティブの実行ファイルを生成し、リアルタイム処理や重い計算処理を必要とするような種類のアプリケーションでは重要になることがあります
  • 高速アプリケーション開発(RAD)環境:ビジュアルなドラッグ&ドロップの設計ツールにより、最小限の手間でユーザーインターフェースを作成して機能に接続でき、開発プロセスを加速します
  • コンポーネントベースのアーキテクチャ:再利用可能なコンポーネントを組み合わせてアプリケーションを構築する、コンポーネントベースのアーキテクチャに基づいています。コードの再利用がしやすくなり、開発時間が短縮されます
  • イベント処理:Delphiは組み込みのイベントモデルを使い、ユーザーの操作やその他のイベントに簡単に応答できます。イベント処理は、ユーザー入力やシステムイベントを捉えて適切に応答するプロセスを簡素化します
  • データベース接続:Delphiは、さまざまなデータベースシステムとシームレスに連携できるネイティブのデータベースアクセスコンポーネントを提供します。この組み込みのサポートにより、データベース駆動型アプリケーションの開発が簡単になります

Elm

  • この言語はEvan Czaplickiが卒業論文のために作り、2012年にリリースされました
  • 当初はGUI向けの関数型リアクティブプログラミング(FRP)(シグナルを使うFRP)を扱っていましたが、2017年にFRPは廃止され、TEA(The Elm Architecture)に取って代わられました
  • 静的で強い型付けの関数型言語です
  • 構文はHaskellに着想を得ています
  • オープンソースの言語ですが、非常に意見がはっきりしており、開発スタイルはEvanが公開するまで長期間じっくり取り組むというものです。そのためPRが長い間マージされないことがあり、プロジェクトが停滞しているように見えることもありますが、それはEvanの作業スタイルなだけです
  • ウェブサイトで使われています。例えばNoRedInk、Vendr、Rakuten、Brilliantなどです

なぜ優れているのか

  • とても小さな言語で、ML系の静的型付け関数型言語の中では最も学びやすいものの1つです。そのため、関数型プログラミングを教えるのにほとんど最適です
  • コンパイラのエラーは、ほかでは見られないほど親切で役立つものです
  • 安定した言語です。最後のリリースは2019年です
  • エコシステムのパッケージは少ないですが、質が高いです
  • elm-reviewによる強力なリンティングのエコシステムがあります(ExercismのElmトラックのアナライザーを支えています)

際立った特徴

  • The Elm Architecture(TEA)がすべてのElmアプリの基盤になっているので、未知のElmアプリケーションを読むのはとても簡単です
  • 実行時例外がありません! ほんのいくつかのことを除いて。
  • 依存関係を更新しても壊れません。セマンティックバージョニングがコンパイラによって強制されます
  • コンパイルが通れば動きます(論理エラーを除く)。そして慣れてしまうと、他の言語に戻るのはとても難しくなります
    • Matthew Griffithの「elm-ui」を使えば、スタイルとレイアウトでも「コンパイルが通れば動く」が実現し、CSSは不要です
  • フルスタックのウェブアプリ:Lamderaは、フロントエンドとバックエンドの間のつなぎを一切必要とせず、Elmでフルスタックのウェブアプリを作るスピンオフです

Java

  • Sun MicrosystemsのJames Goslingによって開発され、1995年にリリースされました
  • 当初の5つの目標:
    • シンプルで、オブジェクト指向で、親しみやすい
    • 堅牢で安全
    • アーキテクチャに依存せず、移植可能
    • 高性能
    • インタプリットされ、スレッド化され、動的である
  • 強い静的型付けです
  • バイトコードにコンパイルされます(ネイティブコードへのコンパイルも進められています)
  • マルチパラダイム:命令型、オブジェクト指向、関数型
  • 言語と仮想マシンには公式の仕様があり、したがって複数の実装も存在します(例えばOpenJDKのJVMやOracleのHotspot VM)
  • ウェブサイトから組み込みシステムまで、アプリからデータベースまで、膨大なソフトウェアで使われています

なぜ優れているのか

  • (ほとんど)どこでも動きます(Javaのアップデーターが喜んでそう知らせてくれるはずです ;))
  • 汎用:アプリ、ウェブサイト、組み込みシステムなど、ほとんどあらゆる用途に使えます
  • Kotlin、Groovy、Scala、Clojureなど、他のJVM言語との相互運用性があります
  • IDEだけでなく、ビルドシステムなどの他のツールも充実しています

際立った特徴

  • JVMは成熟した安定性の高い高性能な仮想マシンで、絶えず改善されています
  • 巨大なエコシステムがあり、膨大な数のライブラリが利用できます。それらのライブラリもJavaと同様に成熟して安定しており、機能が充実しています
  • 進化を続けています。言語とランタイムは今も進化しており、言語は定期的に更新されてよりモダンになり、利用者の不満(定型的な記述の多さや冗長さの削減など)にも対応しています。ランタイムについても、さらに発展させるための新しいプロジェクトが定期的に始まっています(例えば軽量な並行処理のためのProject Loomや、GraalVMによるネイティブコンパイルなど)

JavaScript

  • Brendan Eichは1995年にNetscapeに雇われ、ウェブページを動的にするための言語を提供しました。最初のプロトタイプは10日で作られたことで知られています
  • 1997年にECMAScriptとして標準化されました
  • 動的で弱い型付けです
  • かつてはインタプリットのみでしたが、現在はJust-In-Timeコンパイルされることがよくあります
  • マルチパラダイム:プロトタイプベース(かなり珍しい)ですが、オブジェクト指向、命令型、関数型でもあります
  • ウェブを今日の成功に導いた、非常に大きな影響力を持っています。例えばAJAXはインタラクティブ性の追加に非常に役立ちました。ブラウザにサポートが組み込まれた唯一のプログラミング言語であり、ウェブ開発の事実上の標準です
  • おそらく現在最も使われている言語です
  • バックエンド、フロントエンド、スクリプト、コマンドラインツールに使われます

なぜ優れているのか

  • 汎用:バックエンド、フロントエンド、スクリプト、コマンドラインツールなど、多くの用途に使えます。ウェブで使われる多くのツールはJavaScriptで書かれています(そしてnodejs上で動きます)
  • ランタイム(V8など)は高度に最適化されており、言語が非常に動的であっても高い性能を発揮できます
  • 比較的小さな言語なので、比較的学びやすいです。ブラウザで実行できるのは特に大きな利点で、学習中に視覚的なフィードバックが得られます
  • 仕様は頻繁に更新され、async/awaitや文字列補間などの新機能が導入されます。ツール周りも多くの革新があり、JavaScriptのコードベースを扱いやすくするためにdeno、esbuild、bun.jsといった新しいツールが開発されています
  • JSONのサポートは最高レベルです。JSONがJavaScript Object Notationの略であることがその証拠です
  • イベント駆動でノンブロッキングなコードに適するよう設計されています

際立った特徴

  • 巨大なエコシステム。膨大な数のライブラリが利用できます(2022年9月時点で210万パッケージ)。また、JavaScriptをターゲットとする他の言語も多数あります
  • ほとんどのプラットフォームとハードウェアで動きます。WindowsからAppleまで、Raspberry Piからスマートフォンまで、ウェブサーバーからサーバーレスプラットフォームまでです。ウェブブラウザにはネイティブサポートが組み込まれているので、ランタイムをインストールする必要はありません
  • ウェブ開発に最適で、選べるフレームワークが多く(React、Vue、Angular)、ウェブアプリケーションの構築を助けるツールも豊富です(eslint、parcelなど)
  • アイソモーフィックに使えます。同じ言語(と同じコードベース)をバックエンドにもフロントエンドにも使えるということです。保守がしやすくなり、フロントエンドとバックエンドの間でコードを再利用できます
  • 非常に人気があるということは、学べるリソースが豊富(動画、ブログ、コース)で、交流できるコミュニティも巨大だということです

Kotlin

  • 2010年に、IDEで有名なJetBrains(IntelliJ、CLion、GoLand、Riderなど)によって開発されました
  • JetBrainsの製品のほとんどはJavaで書かれていましたが、定型的なコードを減らし、開発を速め、足りない機能をいくつかサポートするJVM言語を求めていました。Scalaにはこれらの機能がありましたが、コンパイルが遅すぎることが分かりました。そこでProject Kotlinが始まりました
  • 強い静的型付けです
  • マルチパラダイム:命令型、オブジェクト指向、関数型、宣言型
  • 既定ではJVMのバイトコードにコンパイルされますが、JSやネイティブにもコンパイルできます(仮想マシンが使えない、あるいは使いたくないプラットフォーム、例えばiOSデバイスで役立ちます)
  • 2019年にGoogleがAndroidアプリを書くのに好ましい言語として指定しました
  • ウェブサイト、アプリ(主にAndroid)、そしてIDE全体(前述のIDE)の構築に使われています

なぜ優れているのか

  • 汎用:アプリやウェブサイトなど、ほとんどあらゆる用途に使えます。Googleは2019年に、Androidアプリを開発するのに好ましい言語をKotlinとしました
  • JVM上で動くので、その利点をすべて享受できます。成熟した高性能なVMと、膨大な数の利用可能なライブラリです
  • 検査例外、null安全、冗長さなど、Javaに対して感じるかもしれない多くの問題を和らげます
  • モダンな言語です。高度な型推論、式ベース、不変性、パターンマッチング、コルーチン、チャネル
  • ツールが充実しています(IDE自体がこの言語で書かれているのだから当然でしょう :))

際立った特徴

  • 生産性が高い:Kotlinは他の言語の良い部分を取り入れ、一貫性のある生産性の高い1つの言語にまとめ、場合によっては元の機能をさらに改善しています(例えばローカル拡張メソッド)
  • コルーチン:多くの言語ではasync/awaitが言語に組み込まれていますが、Kotlinでは言語のコルーチン機能を使ってライブラリとして実装されています。コルーチンはサスペンド関数を扱う方法で、FutureやPromiseよりも安全でエラーが起きにくい非同期処理の抽象化を提供します
  • 優れた並行処理:async/await、チャネル、不変性が、優れた並行処理の実現に役立ちます
  • Composeマルチプラットフォームを使えば、宣言的な構文で同じコードベースから共有UIを構築できます

Objective-C

  • 元々は1980年代初頭にBrad CoxとTom Loveによって開発され、NeXTが自社のNeXTSTEPオペレーティングシステム用に採用しました。AppleのmacOSがNeXTSTEPから直接つながっているため、Appleのソフトウェアで選ばれる言語になりました
  • SmallTalkのオブジェクト指向の考え方とCを組み合わせるように設計されており、メッセージパッシングを中核となるオブジェクト指向の仕組みとして使います
  • Cのスーパーセットなので、どんなCのコードも有効なObjective-Cのコードであり、両者を同じコードベースで組み合わせられます
  • 静的型付けと動的型付け
  • コンパイルされます
  • 2014年にSwiftが登場するまで、macOSとiOSのアプリケーションを書くための標準的な言語でした
  • macOSとiOSのアプリに使われます

なぜ優れているのか

  • Cとオブジェクト指向の機能を組み合わせたものは、非常に強力になり得ます
  • 軽量なランタイムで、リソース効率が良いです
  • 軽量なクラス構文です
  • Fast Enumerationにより、Cよりも簡単にforループを書けます
  • 後方互換性が強いです

際立った特徴

  • Automatic Reference Counting(ARC)をサポートしており、オブジェクトが参照されなくなると自動的にメモリを解放するので、メモリ管理が簡単になります
  • 動的なランタイムにより、メソッドスウィズリング(セレクタの動作を動的に変えること(モンキーパッチのようなもの))、リフレクション、メッセージ転送(オブザーバーパターンやプロキシパターンに最適)が可能です
  • プロトコルとインターフェースは、Cにインターフェースの機能をもたらします。カテゴリインターフェースを使えば、既存の型を拡張することもできます

PHP

  • 1993年にRasmus Lerdorfによって開発・実装され、1995年に最初のリリースが行われました
  • 名前は再帰的な頭字語で、PHP: Hypertext Preprocessorです
  • 動的で弱い型付けですが、実行時の強い型アサーションを徐々に追加する選択肢もあります
  • マルチパラダイム:命令型、関数型、オブジェクト指向、手続き型、リフレクション
  • インタプリットされるか、Just-In-Timeコンパイルされます
  • サーバーサイドレンダリングの元祖です
  • ウェブサイト(Facebook、Wikipediaなど多数)や、多くのコンテンツ管理システム(Wordpress、JOOMLA)に使われています

なぜ優れているのか

  • どこにでもあります。PHPはすべてのウェブサイトの77.4%で使われており^1、特定のプラットフォームに依存しません
  • 他の定番のプログラミング言語(java、javascript、c)に似たシンプルな構文で、学びやすいです
  • 汎用です。小さなウェブスクリプトの作成から、企業が運用する大規模なサーバーサイドアプリケーションの作成まで、多くの用途に使えます
  • 広く採用されており、非常に定着しています。学習リソース、フレームワーク、ライブラリが多数あります
  • データベースのサポートが強力です
  • 今も活発に開発が続けられ、モダンな機能がリリースされています
  • クロスプラットフォームです。Window、Mac、Linux、Unix、あらゆる環境で動きます
  • オープンソースで無料です

際立った特徴

  • 実行とデプロイが簡単です。ビルドチェーンもコンパイラもありません
  • 漸進的な型システム。必要なところに型を追加し、動的型付けで開発の一部を簡素化できます
  • すばやいプロトタイピング。アイデアを試すウェブページを作り、自分のマシンで実行できます

PureScript

  • Phil Freemanによって設計され、最初のバージョンは2013年にリリースされました
  • 彼は、HaskellをJavaScriptにトランスパイルする他の試みに満足できず、PureScriptの開発を始めました
  • 強い静的型付けです
  • JSにコンパイルされます
  • 純粋関数型言語です
  • 構文と機能はHaskellに着想を得ています
  • ウェブアプリケーションの構築に使われますが、Electron経由でサーバーサイドアプリやデスクトップアプリケーションの構築にも使えます

なぜ優れているのか

  • Haskellを優れたものにしている要素の多くを共有しています:
    • 強力な型システム:代数的データ型、型クラス、高カインド型
    • 表現力:パターンマッチング、型推論
    • 安全性:nullがなく、型は不変
    • 純粋関数型:副作用は型システムにエンコードされます
  • JSONと型の間のデコード/エンコードが簡単で、型安全です
  • 人間が読めるJavaScriptにコンパイルされます
  • ツールが充実しています

際立った特徴

  • 関数型のコアは、実行時エラーのない型安全なウェブアプリケーションに最適です
  • JSとの相互運用性が優れています
  • 効率的なJSにコンパイルされます

ReasonML

  • FacebookのJordan Walkeによって作られ、最初のバージョンは2016年にリリースされました
  • OCamlをベースにしていますが、特有の癖を取り除き、JSとの相互運用のために設計されています
  • 静的型付けの関数型言語です
  • コンパイルされます
  • ウェブサイトの構築に使われています(例えばFacebookで)

なぜ優れているのか

  • OCamlの良さをそのままウェブ環境に持ち込めます:
    • 強力な型システム:すべての値は、複雑な型よりもシンプルな型(レコード、バリアント、オプションなど)で型付けされます。undefinedエラーがなくなり、信頼性が向上します
    • 表現力:パターンマッチング、型推論、分割代入
    • 安全性:nullがなく、既定で不変
  • 人間が読めるJavaScriptにコンパイルされます
  • OCamlにコンパイルできます(逆も同様)。つまり、OCamlのエコシステム全体を使えます(例えばネイティブバイナリへのコンパイル)

際立った特徴

  • ReasonMLのコンパイル時間は非常に速く、高速なイテレーションサイクルを実現します
  • JSとの相互運用性が優れており、ReasonMLのコードからJSを使う場合も、ReasonMLをJSにエクスポートする場合も対応します。TSの型を生成することもできます。Cとも相互運用できます。JSXに似た構文もサポートしています

Swift

  • Swiftの開発は2010年にChris Lattnerによって始められ、2014年のWWDCイベントで世界中に発表されました
  • 目標は、80年代初頭以来大きな変更がなかったAppleの古いプログラミング言語Objective-Cを、新しいモダンな言語で置き換えることでした。Objective-Cの大部分と相互運用できるように設計されています
  • 強い静的型付けです
  • コンパイルされ、機械語へのコンパイルには(Rustなどと同様に)LLVMを使います
  • マルチパラダイム:関数型、オブジェクト指向、命令型、宣言型
  • 元々はプロプライエタリなソフトウェアでしたが、2015年にオープンソース化されました
  • 主にモバイルアプリとデスクトップアプリに使われますが、バックエンドやサーバーレスの場面でも使われます

なぜ優れているのか

  • モダンな言語:型推論、パターンマッチング、代数的データ型、Unicode文字列
  • 生産性が高い:Swiftは他の言語(Rust、Python、C#、Rubyなど)の良い部分を取り入れ、一貫性のある生産性の高い1つの言語にまとめています
  • 安全:ポインタが露出せず、nullポインタ例外を防ぐオプショナル型、明示的なエラー処理、ARC(Automatic Reference Counting)による自動メモリ管理があります
  • 定期的に更新されます。初期には、うまく機能しないと分かったものには破壊的な変更を導入することをAppleは恐れませんでした。これにより「余計な荷物」が蓄積するのを防ぎます。通常、コードの移行を助けるツールが提供されます。Swift 5以降、Application Binary Interface(ABI)は安定しています
  • Objective-Cとは異なり、Swiftはすべての主要なプラットフォーム(macOS、Windows、Linux)で動きます

際立った特徴

  • 高速。効率的な機械語にコンパイルされ、速く動作します
  • Objective-Cとのシームレスな相互運用に加え、CやC++とも良好に相互運用できます
  • 大きなコミュニティがあり、優れたリソースが多数あります

TypeScript

  • JSで大規模なアプリケーションを開発することへの不満から、Microsoftで作られました。設計者の一人は、C#の主任設計者でありDelphiとTurbo Pascalの作者でもあるAnders Hejlsbergです
  • 最初のバージョンは2012年にリリースされました
  • マルチパラダイム:関数型、プロトタイプベース、命令型、オブジェクト指向、ジェネリック
  • 漸進的型付けとダックタイピングを使います
  • コンパイルされます(JSへ)
  • ウェブサイト(フロントエンドとバックエンドの両方)、スクリプト、コマンドラインツールに使われます

なぜ優れているのか

  • 強力で柔軟な型システム:ユニオン型、リテラル型、タプル。基本的に、JSのコードで使えるあらゆるパターンを、TSでは型安全に記述できます。型システムは非常に強力で、チューリング完全にさえなっています
  • JSのスーパーセットであるため、JSのコードベースに徐々に導入できます
  • 動的型付けと静的型付けの両方の良いところを兼ね備えています
  • 人気が急速に伸びており、多くのツールがTypeScriptの型を提供したり、TypeScriptに変換されたりしています。利用できるリソースも多数あります
  • 言語は定期的に更新され、今後のECMAScriptの機能をいち早く取り入れています

際立った特徴

  • セキュリティと正確性の向上:静的型付けにより、JSでよくある種類のエラーの多くを排除できます
  • JSとのシームレスな相互運用。JSのコードを型安全に扱うための独自の型定義を追加できます。独自の型定義は、多くのものに対して提供されています
  • ツール/IDEのサポートが優れています。型注釈、コード補完、さらには安全な大規模リファクタリングまで、多くのIDEで利用できます
  • JSのエコシステムで動くことの利点をすべて得られます。膨大な数のパッケージ、豊富なツール、大きなコミュニティなどです

どれを試すべき?

  1. ネイティブアプリを作りたいなら、Dart、Delphi、Java、Kotlin、Swiftが良い選択です。とはいえ、JSにコンパイルされる他の言語でもネイティブアプリを作ることはできます。iOS/macOSアプリを作るための公式の言語はSwiftで、AndroidアプリならKotlinであることは覚えておく価値があります
  2. ウェブアプリを作りたいなら、CoffeeScript、Dart、Elm、Java、JavaScript、Kotlin、PHP、PureScript、ReasonML、TypeScriptが良いでしょう
  3. 関数型プログラミングに興味があるなら、Elm、PureScript、ReasonMLが自然な選択です。CoffeeScript、Dart、Java、JavaScript、Kotlin、Swift、TypeScriptも関数型プログラミングをサポートしています
  4. オブジェクト指向プログラミングなら、ABAP、Dart、Delphi、Java、Kotlin、Objective-C、PHP、Swiftが候補になります。CoffeeScript、JavaScript、TypeScriptもこのパラダイムをサポートしています
  5. 業務アプリケーションを書きたいなら、ABAPとDelphiが最適です
2023年08月01日(火) · 役に立ちましたか?