main

この新年から始まった持ち回りシリーズ、最後の新カテゴリは、Rust。

Rust programming language

プログラミング言語Rustのススメ - Qiita
Install - Rust programming language

凄く簡単に導入できるということだが・・・。

まずダウンロードだが、

$ curl https://sh.rustup.rs -sSf | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust programming 
language, and its package manager, Cargo.

It will add the cargo, rustc, rustup and other commands to Cargo's bin 
directory, located at:

  /home/xxx/.cargo/bin

This path will then be added to your PATH environment variable by modifying the
profile files located at:

  /home/xxx/.profile
  /home/xxx/.bash_profile

You can uninstall at any time with rustup self uninstall and these changes will
be reverted.

Current installation options:

   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2019-01-17, rust version 1.32.0 (9fda7c223 2019-01-16)
info: downloading component 'rustc'
 79.5 MiB /  79.5 MiB (100 %)   2.5 MiB/s ETA:   0 s                
info: downloading component 'rust-std'
 54.3 MiB /  54.3 MiB (100 %)   2.3 MiB/s ETA:   0 s                
info: downloading component 'cargo'
  4.4 MiB /   4.4 MiB (100 %)   2.7 MiB/s ETA:   0 s                
info: downloading component 'rust-docs'
  8.5 MiB /   8.5 MiB (100 %)   2.3 MiB/s ETA:   0 s                
info: installing component 'rustc'
info: installing component 'rust-std'
info: installing component 'cargo'
info: installing component 'rust-docs'
info: default toolchain set to 'stable'

  stable installed - rustc 1.32.0 (9fda7c223 2019-01-16)


Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH 
environment variable. Next time you log in this will be done automatically.

To configure your current shell run source $HOME/.cargo/env
$

こうする。

で、Cargoを使うという意味でも、rustcを使うという意味でも、

$ source $HOME/.cargo/env

これは一応やっといたほうがいいかな。(もしかしたらいらないかもだけど、確認の意味で。)

で、確かに、

$ cargo new main

このようにしてmainプロジェクトを作成し、

$ cargo run

でそのままビルドと実行をしてくれるが、".git"や".gitignore"がある辺り、レポジトリを作ってしまってるっぽい。
なので、

Rust触ってみたらかなり良かった話 | ブログ :: Web notes.log

ここではrustcコマンドでコンパイルし、実行するような流れとする。

$ vi main.rs

でmain.rsを開き、

と書く。

rust コーディングルール メモ - Qiita

今度はfnの後にmain()・・・。
インデントはスペース4つ・・・。
また違う・・・。

$ vi main.rs
$ cat main.rs 
fn main(){
    println!("ABCDE");
}
$ source $HOME/.cargo/env
$ rustc --version
rustc 1.32.0 (9fda7c223 2019-01-16)
$ rustc main.rs 
$ ls
main  main.rs
$ ./main 
ABCDE
$

sourceであったり、mainバイナリが出来てるかなど、ひととおり確認しつつ、ビルドから実行までを行い、"ABCDE"の出力を確認。
println!もこれまでにない書き方なので気になるが、その辺は後で・・・。

Sample/rust/main/main/src/main at master · bg1bgst333/Sample · GitHub

main

続いての新カテゴリは、Go。

The Go Programming Language

まず、ダウンロードだが、

Downloads - The Go Programming Language

から、

$ wget https://dl.google.com/go/go1.11.4.linux-amd64.tar.gz

ダウンロード。

$ tar vzfx go1.11.4.linux-amd64.tar.gz

で解凍したら、goフォルダが出来てるので、

$ sudo mv go /usr/local/

goフォルダを/usr/localへ移動。

$ export PATH=$PATH:/usr/local/go/bin

パスを通す。
パッケージマネージャとかインストーラLinux用にはなくて、アナログだけど、これはこれでわかりやすい・・・。

このプログラムのパッケージ名はmainとする。
fmtモジュールをインポート。
funcのあとにmain()が続くJavaScript形式。
ちなみにインデントはタブ(スペース8文字)らしい。

Goプログラミング言語のチュートリアル - golang.jp
他言語プログラマがgolangの基本を押さえる為のまとめ - Qiita

fmt.Printlnメソッドで"ABCDE"を出力。

$ vi main.go
$ cat main.go 
// パッケージ宣言
package main    // mainパッケージ

// モジュールのインポート
import "fmt"    // fmt

// main関数
func main(){    // funcの後ろに関数名main.
    fmt.Println("ABCDE")    // fmt.Printlnで"ABCDE"を出力.
}
$ go build main.go 
$ ls
main  main.go
$ ./main 
ABCDE
$

このようになる。

Sample/go/main/main/src/main at master · bg1bgst333/Sample · GitHub

write

ここからは新カテゴリ、D言語

D言語を始めよう - D言語ツアー

標準出力はwriteで行う。

std.stdio - プログラミング言語 D 2.0

まず、

Downloads - D Programming Language

ここからダウンロード。

$ curl -fsS https://dlang.org/install.sh | bash -s dmd
Downloading https://dlang.org/d-keyring.gpg
######################################################################## 100.0%
Downloading https://dlang.org/install.sh
######################################################################## 100.0%
The latest version of this script was installed as ~/dlang/install.sh.
It can be used it to install further D compilers.
Run `~/dlang/install.sh --help` for usage information.

Downloading and unpacking http://downloads.dlang.org/releases/2.x/2.084.0/dmd.2.084.0.linux.tar.xz
######################################################################## 100.0%
Using dub 1.13.0 shipped with dmd-2.084.0

Run `source ~/dlang/dmd-2.084.0/activate` in your shell to use dmd-2.084.0.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run `deactivate` later on to restore your environment.
$

で、

$ cd dlang/
$ ls
d-keyring.gpg  dmd-2.084.0  install.sh
$ cd ~
$ source $(~/dlang/install.sh dmd -a)
(dmd-2.084.0)$ dmd --version
DMD64 D Compiler v2.084.0
Copyright (C) 1999-2018 by The D Language Foundation, All Rights Reserved written by Walter Bright
(dmd-2.084.0)$ dub --version
DUB version 1.13.0, built on Jan  2 2019
(dmd-2.084.0)$ deactivate
$

dlangディレクトリの下にinstall.shがあるので、使う時はsourceでactivateして、終わるときはdeactivateするみたい。
dmdコンパイラ、dubはパッケージ管理らしい。

(dmd-2.084.0)$ vi write.d 
(dmd-2.084.0)$ cat write.d 
import std.stdio; // 標準入出力
void main(){
  write("ABCDE"); // writeで"ABCDE"を出力.
}
(dmd-2.084.0)$ dmd write.d 
write.d(3): Error: function expected before (), not module write of type void
(dmd-2.084.0)$

こんな感じでstd.stdioをインポートして、writeで"ABCDE"を出力しようとしたが、なぜかコンパイルエラー・・・。
Wandboxでは、

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

いけたので、原因がまったくわからない・・・。

#dlang インストールスクリプトの使い方 - Kotet's Personal Blog

複数のバージョンを入れられるのでもしかしてとおもって、

$ ./install.sh install dmd-2.070.0
Downloading and unpacking http://downloads.dlang.org/releases/2.x/2.070.0/dmd.2.070.0.linux.tar.xz
######################################################################## 100.0%
Downloading and unpacking https://github.com/dlang/dub/releases/download/v1.11.0-alpha.1/dub-v1.11.0-alpha.1-linux-x86_64.tar.gz
######################################################################## 100.0%

Run `source ~/dlang/dmd-2.070.0/activate` in your shell to use dmd-2.070.0.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run `deactivate` later on to restore your environment.
$

2.084.0より古い2.070.0をインストール。

$ source ~/dlang/dmd-2.070.0/activate

アクティベートして、

あらためて、これをコンパイルすると、

$ cat write.d 
// モジュールのインポート
import std.stdio; // 標準入出力

// main関数の定義
void main() // 戻り値はvoidでもいい.
{

  // "ABCDE"を出力.
  write("ABCDE\n"); // writeで"ABCDE"を出力.(writeは改行しないので"\n"を付加.)

}
$ source ~/dlang/dmd-2.070.0/activate
(dmd-2.070.0)$ ls
write.d
(dmd-2.070.0)$ dmd write.d 
(dmd-2.070.0)$ ls
write  write.d  write.o
(dmd-2.070.0)$ ./write 
ABCDE
(dmd-2.070.0)$ deactivate
$

このようにコンパイルも実行も成功した。
最新のはなぜかダメだった・・・。根本的な原因はなんだろうか・・・。
しばらくは安定している2.070.0でやっていき、問題なければ2.084.0でもやろう。

Sample/d/write/write/src/write at master · bg1bgst333/Sample · GitHub

Number

Numberは数値オブジェクト。

数値(Number)
Number | MDN

コンストラクタに数値を何らかの文字で表したモノを渡すと、その数値を持つ数値オブジェクトが生成される。

"0xff"は16進数表現の255だが、これ自体は文字列である。
これをNumberに渡して、生成されたnumberをalertに渡す。

255
255

255という数値で表示される。

Sample/js/Number/Number/src/Number at master · bg1bgst333/Sample · GitHub

phpinfo

phpinfoは、PHPの設定情報一覧を表示する関数。

PHP: phpinfo - Manual

PHPがちゃんと動いているか確認する為に使うことも多い。

このようにphpタグの中にphpinfo()だけ。

$ cd /var/www/html/
$ vi phpinfo.php
$ cat phpinfo.php 
<html>
  <head>
    <title>phpinfo()</title>
  </head>
  <body>
    <?php
      phpinfo();
    ?>
  </body>
</html>
$ sudo systemctl restart httpd
[sudo] xxx のパスワード:
$

Apacheをリスタートして、ブラウザでphpinfo.phpにアクセスする。

phpinfo
phpinfo

こんな風にいろんな情報が出てくれば正解。

Sample/php/phpinfo/phpinfo/src/phpinfo at master · bg1bgst333/Sample · GitHub

リスト

Pythonの場合、配列というよりリストと呼ぶ。

3. 形式ばらない Python の紹介 — Python 2.7.15 ドキュメント
Python入門 - リスト・タプル・辞書
リストオブジェクト - リスト - Python入門
Python - Python2.7のprint文で変数を展開したい|teratail

こちらもリストを初期化。

で、1番目を出力。

こう書く。

ダブルクォート("")の中での展開だが、

ダブルクォート内の"%s"の部分が、その後の'%'の後ろの値に置き換わる模様。
C言語に近い形。

同じように配列ごと展開して出力してみる。

$ vi list.py 
$ python list.py 
20
lst[1] = 20
lst = [10, 20, 30]
$

このようになる。
タプルもアレイもあるのでややこしい。

Sample/python/list/list/src/list at master · bg1bgst333/Sample · GitHub