コンピュータ教育で欠けている授業-MIT-L 8-メタプログラミング
5569 ワード
https://missing.csail.mit.edu/
https://missing-semester-cn.g...
https://www.bilibili.com/vide...
思否ホームページ:https://segmentfault.com/u/wi...
メタプログラミングは通常オペレーティングプログラム用プログラムを指し、講座では開発プロセスについて議論されています.
システムの構築は、一連の構築プロセスを実行するのに役立ちます.構築プロセスには、ターゲット(targets)、依存(dependencies)、ルール(rules)が含まれます.構築システムに具体的な構築目標を伝える必要があります.システムのタスクは、これらの目標を構築するために必要な依存を見つけ、最終目標が構築されるまで、ルールに基づいて必要な中間生成物を構築することです.
理想的には、ターゲットの依存が変更されず、以前の構築からこれらの依存を多重化できる場合、それに関連する構築ルールは実行されません.
その他の一般的な構築システム/ツール: CとC++:Cmakeは、CMake入門実戦 を参照することができる. Java:Maven,Ant,Gradle フロントエンド開発:Grunt,Gulp,Webpack Ruby:Rake Rust:Cargo
Ubuntu: にアクセスできます. CentOS,Redhat: にアクセス Archlinux/Manjaro: にアクセス Ruby: にアクセス Python: にアクセス
異なるプロジェクトで使用されるバージョン番号は、その具体的な意味は完全に同じではありませんが、比較的一般的に使用される標準はセマンティックバージョン番号であり、このバージョン番号は異なる意味を有し、そのフォーマットはmajor.minor.patch(プライマリ・バージョン番号.セカンダリ・バージョン番号.パッチ番号).関連ルールは次のとおりです.新しいバージョンでAPIが変更されていない場合は、パッチ番号を増やします. APIを追加し、この変更が後方互換性がある場合は、セカンダリ・バージョン番号を増やします. APIを変更しても後方互換性がない場合は、プライマリ・バージョン番号を増やします.
これには、たとえば、プロジェクトがプロジェクトに基づいて構築されている場合、最新バージョンのプライマリ・バージョン番号が変更されていない限り安全であり、セカンダリ・バージョン番号が以前に使用したバージョンよりも低くなければ、多くのメリットがあります.言い換えれば、私が依存しているバージョンが
継続的な統合、またはCIという傘用語(umbrella term)は、「コードが変更されると自動的に実行されるもの」を指し、クラウド構築システムと考えられます.
市場には、Travis CI、Azure Pipelines、GitHub Actionsなど、さまざまなCIツールを提供する会社がたくさんあります.
使用方法は大きく異なります.eventsとactionsを含むルールを記述するコードウェアハウスにファイル(recipe)を追加します.
最も一般的なルールは、誰かがコードをコミットした場合、テストキットを実行することです.このイベントがトリガーされると、CIプロバイダは1つ以上の仮想マシンを起動し、作成したルールを実行し、通常は関連する実行結果を記録します.いくつかの設定を行うことで、テストキットが失敗した場合に通知を受け取ることができます.または、テストがすべて合格した場合、倉庫のホームページにバッジが表示されます.
Githubには、依存関係を維持するCIツールDependabotもあります.
GitHub Pagesは良い例です.Pagesは、
テストキット(Test suite):すべてのテストの総称 ユニットテスト(Unit test):パッケージの特性をテストするための「マイクロテスト」 統合テスト(Integration test):システムの大部分に対して行われる「マクロテスト」で、異なる特性やコンポーネントが協働して動作するかどうかをテストします. 回帰テスト(Regression test):以前に問題が発生したバグが に再発しないことを保証するために使用されます.シミュレーション(Mocking):関数、モジュール、またはタイプを置換するために偽の実装を使用し、テストに関連しないコンテンツをブロックします.たとえば、「ネットワーク接続のシミュレーション」または「ハードディスクのシミュレーション」
いくつかの有用なmake 構築目標(例えば、本題はphonyを用いた).
GitHub Pagesに基づいて、自動公開可能なページを作成します.GitHub Actionを倉庫に追加し、倉庫内のすべてのshellファイルに対して
構築 GitHub actionは、倉庫内のすべての
https://missing-semester-cn.g...
https://www.bilibili.com/vide...
思否ホームページ:https://segmentfault.com/u/wi...
メモ
メタプログラミングは通常オペレーティングプログラム用プログラムを指し、講座では開発プロセスについて議論されています.
システムの構築
システムの構築は、一連の構築プロセスを実行するのに役立ちます.構築プロセスには、ターゲット(targets)、依存(dependencies)、ルール(rules)が含まれます.構築システムに具体的な構築目標を伝える必要があります.システムのタスクは、これらの目標を構築するために必要な依存を見つけ、最終目標が構築されるまで、ルールに基づいて必要な中間生成物を構築することです.
理想的には、ターゲットの依存が変更されず、以前の構築からこれらの依存を多重化できる場合、それに関連する構築ルールは実行されません.
make
は最も一般的な構築システムの1つであり、UNIXベースのほとんどのシステムにインストールされていることがわかります.make
のチュートリアルはチェン一峰のこの文章を参考にすることができます:Makeコマンドチュートリアル.その他の一般的な構築システム/ツール:
依存管理
ソフトウェアウェアハウス
apt
というツールでUbuntuパッケージウェアハウスyum
というツールでソフトウェアウェアハウスpacman
ツールを使用してArchlinuxソフトウェアウェアハウスとArchユーザーソフトウェアウェアハウス(AUR,Arch User Repository)gem
ツールでRubyGems pip
ツールでPypi バージョン番号
異なるプロジェクトで使用されるバージョン番号は、その具体的な意味は完全に同じではありませんが、比較的一般的に使用される標準はセマンティックバージョン番号であり、このバージョン番号は異なる意味を有し、そのフォーマットはmajor.minor.patch(プライマリ・バージョン番号.セカンダリ・バージョン番号.パッチ番号).関連ルールは次のとおりです.
これには、たとえば、プロジェクトがプロジェクトに基づいて構築されている場合、最新バージョンのプライマリ・バージョン番号が変更されていない限り安全であり、セカンダリ・バージョン番号が以前に使用したバージョンよりも低くなければ、多くのメリットがあります.言い換えれば、私が依存しているバージョンが
1.3.7
であれば、1.3.8
、1.6.1
、さらには1.3.0
を使用することができます.バージョン番号が2.2.4
であれば、プライマリバージョン番号が増加したため、必ずしも使用できるとは限りません.持続的統合システム
継続的な統合、またはCIという傘用語(umbrella term)は、「コードが変更されると自動的に実行されるもの」を指し、クラウド構築システムと考えられます.
市場には、Travis CI、Azure Pipelines、GitHub Actionsなど、さまざまなCIツールを提供する会社がたくさんあります.
使用方法は大きく異なります.eventsとactionsを含むルールを記述するコードウェアハウスにファイル(recipe)を追加します.
最も一般的なルールは、誰かがコードをコミットした場合、テストキットを実行することです.このイベントがトリガーされると、CIプロバイダは1つ以上の仮想マシンを起動し、作成したルールを実行し、通常は関連する実行結果を記録します.いくつかの設定を行うことで、テストキットが失敗した場合に通知を受け取ることができます.または、テストがすべて合格した場合、倉庫のホームページにバッジが表示されます.
Githubには、依存関係を維持するCIツールDependabotもあります.
GitHub Pagesは良い例です.Pagesは、
master
でコードが更新されるたびにJekyllブログソフトウェアを実行し、サイトにGitHubドメイン名でアクセスできるようにします.私たちにとってこれらのことはあまりにも些細で、私は今ローカルで修正してgitを使ってコードを提出して、遠隔地に公開するだけです.CIは自動的に後続のことを処理してくれます.テスト
レッスン後の練習
練習問題1
いくつかの有用なmake 構築目標(例えば、本題はphonyを用いた).
.PHONY: clean
clean:
git ls-files -o | xargs rm
# gitignore ,
#
# rm plot-*.png
# rm paper.pdf
練習問題3
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
# Redirect output to stderr.
exec 1>&2
if (! make)
then
cat <
練習問題4
GitHub Pagesに基づいて、自動公開可能なページを作成します.GitHub Actionを倉庫に追加し、倉庫内のすべてのshellファイルに対して
shellcheck
(メソッドの1つ)を実行します.練習問題5
構築 GitHub actionは、倉庫内のすべての
.md
ファイルに対してproselintまたはwrite-goodを実行し、倉庫でこの機能を開き、エラーを含むファイルを提出して機能が有効かどうかを確認します.