Google&MS「バグの70%はC/C++。Rustにする」 (811レス)
1-

1
(2): 仕様書無しさん [] 2021/05/02(日) 17:14:48.90 AAS
グーグルやMSが「Rust」言語でOS開発、背景に国家による諜報活動の影

 1970年代初めにUNIXの開発にC言語が採用されて以来、OS開発はCやその後継であるC++の独壇場だった。グーグルはこれまでもAndroidの開発にJavaやKotlinを採用していたが、カーネルやデバイスドライバーなどOSの下位レイヤーの開発にはC/C++しか使ってこなかった。RustはC/C++と同様に下位レイヤーの開発に使用する。

 グーグルは数千万行にも及ぶ既存のC/C++のコードを書き換えるのは不可能としており、新規のコードの開発にのみRustを適用する方針だ。それでもOS開発の常識が数十年ぶりに変わるのだけは間違いない。

 RustはWebブラウザー「Firefox」を開発する米Mozilla Foundation(モジラ財団)が開発を主導するプログラミング言語だ。開発が始まったのは2006年で、安定版であるバージョン1がリリースされたのも2015年のことだ。まだ新しいプログラミング言語をグーグルやマイクロソフトがOS開発に採用する理由は、OSのセキュリティー強化にある。

 Rustは、プログラムに必要なメモリーの確保や解放に関連するバグが生じない「メモリー安全」が保証されたプログラミング言語である。それに対してこれまでのOS開発に使われてきたC/C++は「大規模な開発においてメモリー安全なコードを記述することがほぼ不可能」(マイクロソフトのブログ「We need a safer systems programming language」より)なのだという。

脆弱性の70%がメモリー管理バグに起因

 グーグルによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに起因するという。同様にマイクロソフトも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関するバグに起因すると述べている。C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と考えて、Rustを採用するに至ったというわけだ。

https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
712: 仕様書無しさん [sage] 2025/03/23(日) 06:38:02.62 AAS
久しぶりRust触ってるけどなんか面白いかもしれん
優秀すぎる言語はあまり可愛いとは思わないのだが
しばらくRust書いてみるか
713: 仕様書無しさん [] 2025/03/23(日) 10:11:28.82 AAS
>>711
C++は言語仕様を変えない限り見捨てられる
例えば未定義動作を無くさないとな
714
(1): 仕様書無しさん [sage] 2025/03/24(月) 10:57:51.35 AAS
未定義は未定義なので、処理系が「その未定義、設定ONにしてくれたら全部潰します」ってしてくれてもいいのよ
いいはずなのよ

未定義になりかけたら落とす、確実に落とす、でもだいぶ違うとおもう
しばらくはDoSの嵐になるだろうけど、リスクの潜在が放置されるよりいい
715: 仕様書無しさん [] 2025/03/24(月) 22:12:11.91 AAS
>>714
いいえ
プログラミング言語に未定義動作があってはいけません
そこがバクの元となりセキュリティ脆弱性にも繋がります
人間が未定義動作を踏まないよう自己責任で注意しながら進まなければいけないC/C++を排除していこうという動きになっている要因の一つでもあります
716: 仕様書無しさん [] 2025/03/24(月) 22:12:28.89 AAS
「Google Chrome」のフォント処理がC/C++言語からRust言語に
「FreeType」からの移行でメモリ安全性を改善、脆弱性が出にくいライブラリに
https://forest.watch.impress.co.jp/docs/news/1672186.html
717: 仕様書無しさん [sage] 2025/03/24(月) 22:34:34.31 AAS
出にくいってなあ
718
(1): 仕様書無しさん [sage] 2025/03/24(月) 22:37:12.88 AAS
メモリ管理手動にしたせいでRustかなり性能悪いと聞いた
719: 仕様書無しさん [] 2025/03/25(火) 01:13:25.81 AAS
ん?メモリ管理が手動なのはC/C++だろ?
Rustはメモリ管理はコンパイラ任せ
720
(1): 仕様書無しさん [sage] 2025/03/25(火) 01:50:57.09 AAS
ガベージコレクション無しにしたけど状況に対応しきれなくて復活
JavaのStringみたいなメモリ共有の仕組みを非推奨にしたせいでコピー&デストラクタ走りまくり
721: 仕様書無しさん [] 2025/03/25(火) 11:04:31.91 AAS
>>718
>>720
そんなガセ話を書いても誰も騙される人はいないぞ

RustはC/C++と同等の性能を出せるため
ネットインフラも次々とRust製へ置き換わっている
クラウドやCDNなどもRust製が増えている
具体的にAWSやCloudflareなどでもRust製へ置き換え
722: 仕様書無しさん [sage] 2025/03/25(火) 12:19:46.78 AAS
C++と同程度の性能をうたってる言語のベンチマークでなんかRustだけ遅かった
723: 仕様書無しさん [] 2025/03/25(火) 13:28:14.83 AAS
現実はこれ>>652
Rustで書いたら性能アップした
5chも使っているCloudflare
724: 仕様書無しさん [sage] 2025/03/25(火) 15:28:45.24 AAS
>>652
これすごいけどさ
NGINX自体もC言語で書かれて高速軽量がウリだったのに、それよりも性能向上しつつCPUとメモリ消費を3分の1って何をしたんって思う
オープンソース化されたら世の中のNGINXを置き換えるかも
725: 仕様書無しさん [sage] 2025/03/25(火) 15:37:11.67 AAS
新機能を追加したが機能を削減してないとは言ってない
726: 仕様書無しさん [] 2025/03/25(火) 15:47:32.76 AAS
CDN世界シェアトップのCloudflareが現実にWebトラフィックをそのRust製で捌いているのだから実用性が十二分にある
727: 仕様書無しさん [sage] 2025/03/25(火) 16:26:22.32 AAS
unsafe {}
728: 仕様書無しさん [sage] 2025/03/26(水) 02:53:58.76 AAS
後発のRustがデキるのは当たり前
自分も、仕事で使えと言われたら使う

でも自分用にはC++がいいんだなあ
Rustの知見はよC++に来い
729: 仕様書無しさん [] 2025/03/26(水) 10:34:22.19 AAS
C++は良いところが全くないからなあ
C++は未定義動作という地雷原を歩く
C++はムーブが手動だからムーブにコンストラクタに後始末など無駄な記述が多くなる
730: 仕様書無しさん [sage] 2025/03/26(水) 10:40:20.81 AAS
まあ、C++が迷走し出した辺りから使わなくなったなぁw
731: 仕様書無しさん [] 2025/03/26(水) 17:25:12.52 AAS
確かに
732: 仕様書無しさん [sage] 2025/03/26(水) 22:14:50.56 AAS
何かしらの理由でC++にこだわり続けないといけないようなシステムは、おそらくコンパイラの更新も禁じられてるのでいくらメモリ安全をもたらす新機能がC++に増えても使えない
C++にこだわらないでいいようなプロジェクトは、何年後に形になるかわからないProfilesフレームワークの仕様決定を待つ暇があったらRustを使えばいい
733: 仕様書無しさん [] 2025/03/31(月) 15:20:01.67 AAS
Git 2.49リリース — 各種の高速化とRustコードの導入、Git 3.0を見据えた重要なリリース
https://techfeed.io/entries/67d7444dbe91ab1bb00840c6

4. Rust コードの導入
最近はさまざまなプロジェクトで安全性や高パフォーマンスを得るために Rust が採用されているが、Git もその流れに乗り、 Git 本体の一部コードが Rust で実装され始めた。
いきなり大部分が Rust になるわけではないが、今後の拡張や改善でセキュリティや安定性が向上する可能性がある。
普段使っている人にはあまり見えない変更だが、内部の品質向上の一環として要注目だ。
734: 仕様書無しさん [sage] 2025/03/31(月) 20:04:02.46 AAS
unsafe{}
735
(1): 仕様書無しさん [sage] 2025/03/31(月) 20:08:49.77 AAS
オブジェクト指向は命にかかわるものに使えない
Rustもオブジェクト指向でないといいつつJUMP命令先が可変なので
命にかかわるシステムには使えない
医療機器や自動車がRustになる日などとても想像できない
736: 仕様書無しさん [] 2025/03/31(月) 21:11:47.94 AAS
>>735
ほなCに命賭けるんすか?
737: 仕様書無しさん [sage] 2025/03/31(月) 23:42:34.40 AAS
みんなそうしているはずだ
738
(1): 仕様書無しさん [sage] 2025/03/31(月) 23:49:40.06 AAS
コンパイルイメージがくそでかくて何仕込まれてるかバイナリ見てもわからないとか
怖くてマシンに載せることすらためらわれる
739: 仕様書無しさん [sage] 2025/04/01(火) 12:21:37.20 AAS
Cに命を賭けてきた人々の死体の山の上で俺たちは生きている
740: 仕様書無しさん [] 2025/04/01(火) 12:46:17.97 AAS
>>738
Rustはコンパイルによる生成コードのサイズを小さくできることがメリット
そのためサイズが小さいと有利なWebAssemblyなどでもRustを用いるのが主流
逆に実行速度優先のために単相化できるのもRustのメリットでこの場合は生成コードのサイズはもちろん大きくなる
741: 仕様書無しさん [sage] 2025/04/01(火) 14:56:20.35 AAS
Delphiも実行速度は速かったけどバイナリサイズもでかかったから似たようなもんだ
742
(1): 仕様書無しさん [sage] 2025/04/01(火) 17:42:18.01 AAS
Cは早いし小さい
マネージド言語に比べたらめちゃくちゃ小さい
743: 仕様書無しさん [sage] 2025/04/01(火) 18:49:32.43 AAS
マネージドコードと比べるな
744: 仕様書無しさん [] 2025/04/01(火) 19:50:52.48 AAS
>>742
Rustも同じ
RustはCと同じことが全てできる
Rustはインラインアセンブラも対応している
745: 仕様書無しさん [sage] 2025/04/01(火) 19:53:14.80 AAS
そこは張り合うとこじゃない
C++派だが、C++もへたくそがこねくったソースからは、スパゲッティみたいなバイナリが吐かれるからな
それはおなじ
746
(1): 仕様書無しさん [sage] 2025/04/01(火) 20:55:45.53 AAS
前から言われていることだが
所有権の確認などツールを使えばいいのではないか
747: 仕様書無しさん [sage] 2025/04/01(火) 21:48:35.58 AAS
現実世界にそんなツールが無いことを除けば素晴らしいアイデアだね
748
(2): 仕様書無しさん [sage] 2025/04/01(火) 22:12:09.65 AAS
メモリ安全を確保するツールなど山のようにあるはずだ
749: 仕様書無しさん [sage] 2025/04/01(火) 22:16:43.77 AAS
なんかなんとなくRustに置き換わっていっているが
Rustにして成果が出たというようなレポートを見ない
750: 仕様書無しさん [] 2025/04/01(火) 22:26:14.14 AAS
>>748
そんなツールは無い
世界中で長年色々な試みが行われてきたが
C/C++の言語仕様が悪いと結論が出ている
そのためIT各社がRustへと舵を切った
751: 仕様書無しさん [] 2025/04/01(火) 23:58:47.77 AAS
>>746
>>748
おすすめのツールおせーて
752
(1): 仕様書無しさん [sage] 2025/04/02(水) 00:03:25.13 AAS
ちょっとぐぐったらいっぱいでてくる
Valgrindが一番いっぱいでてきた
753: 仕様書無しさん [] 2025/04/02(水) 00:11:43.68 AAS
>>752
> 最もよく利用されている標準のツールはMemcheckである。Memcheckはほぼすべての命令に特別な計測用のコードを挿入し、「正当性」(初期化が行われるまでは、割り当て済みでないメモリはすべて無効であるか、未定義である)があり、「アドレス可能」(メモリアドレスが割り当て済みで、解放されていないメモリブロックを指している)であるかという情報が、それぞれVビットおよびAビットに格納されているかを追跡する。
………
> こうした機能への代償として性能が低下する。Memcheckの元で動作するプログラムはValgrindなしで動作する場合と比べて5倍から20倍遅く、より多くのメモリを使用する(メモリ確保ごとにかなりのメモリを追加で消費する)。

うーん…
Rust使ったほうがよくない?😅
754: 仕様書無しさん [sage] 2025/04/02(水) 00:15:20.37 AAS
そりゃあ実行時に検出するよりはコンパイル時に弾くほうがいいだろうな
755: 仕様書無しさん [] 2025/04/02(水) 00:20:04.12 AAS
監視・検出処理を挿入してランタイムにメモリリークチェックします
vs
メモリリークのおそれがあるコードをコンパイルエラーで弾きます

ファイッ
756: 仕様書無しさん [sage] 2025/04/02(水) 00:23:13.63 AAS
偉そうに理想論ぶちあげてるくせに、そういうツールの実務での利用経験すらねえのかよ
757: 仕様書無しさん [sage] 2025/04/02(水) 00:55:54.33 AAS
静的解析機能もついてたはずだ
758: 仕様書無しさん [sage] 2025/04/02(水) 11:27:45.02 AAS
あっちを立てればこっちが立たずみたいなことが結構あってあんまり意味ないのよねその手のツール…
759: 仕様書無しさん [] 2025/04/02(水) 11:57:42.97 AAS
コンパイルが通ればメモリ安全性だけでなくデータ競合すらないことが保証されるRustへIT各社移行中
760
(1): 仕様書無しさん [sage] 2025/04/02(水) 13:48:30.58 AAS
データ競合のバグなんて生涯でまだあったことないんだが
761: 仕様書無しさん [] 2025/04/02(水) 15:07:15.41 AAS
>>760
CPUマルチコアを生かすプログラミングしたことすらない初心者か?
762: 仕様書無しさん [sage] 2025/04/02(水) 16:26:13.82 AAS
ないな
763: 仕様書無しさん [sage] 2025/04/02(水) 18:40:41.58 AAS
いままでC言語でなにして遊んでたんだ
764: 仕様書無しさん [sage] 2025/04/02(水) 19:03:24.93 AAS
スレッド関係ないときまで余計なこと考えんといかんじゃないか
765
(1): 仕様書無しさん [sage] 2025/04/02(水) 19:18:24.34 AAS
可読性ゼロのC++テンプレートメタ地獄よりはマシですわw
766
(1): 仕様書無しさん [sage] 2025/04/03(木) 17:20:51.77 AAS
ライブラリ作成は数学の得意そうな人とかに任せますわw > テンプレメタ地獄

Rustだったら安全と投資家も認めた
はよその知見C++に来い まったく同じにやればいいんだ
767
(1): 仕様書無しさん [] 2025/04/03(木) 17:44:13.76 AAS
>>766
C/C++の言語仕様があまりにも酷いためRustのような安全性を導入できないことが判明している
解決策としてはC/C++とは互換性がない制約と拡張を行なうしか手がない
特にC/C++の未定義動作は全て無くす必要があり根本的に別の言語となってしまう
そのため今後の進む道は『C/C++改造版』ではなくRustが選ばれた
768: 仕様書無しさん [sage] 2025/04/03(木) 17:58:53.38 AAS
Rustもマクロあるんよね
769: 仕様書無しさん [sage] 2025/04/03(木) 18:42:29.26 AAS
Rustのマクロは強力すぎる分、意識高い系に触らせると
C++のテンプレートメタパズルよりもっと酷いものがシステムに持ち込まれると思う
770: 仕様書無しさん [] 2025/04/03(木) 19:05:38.26 AAS
マクロは関係ない

ジェネリック関数を記述する時に
Rustは関数そのままに型名をジェネリックパラメーターに置き換えるだけでよい
C/C++はテンプレートを使わないと書けない
771
(1): 仕様書無しさん [sage] 2025/04/03(木) 21:41:18.71 AAS
C/C++はすごいよ
コンピューターのかなり低いところまで好きなようにいじれてしまう
人間には過ぎたシロモノだったんだ
772: 仕様書無しさん [] 2025/04/03(木) 22:10:46.74 AAS
>>771
このスレでそんなアホなこと言うか?
Cで出来ることは全てRustでも出来る
RustはCと同様にインラインアセンブラ機能まであるため万能
773: 仕様書無しさん [sage] 2025/04/04(金) 12:20:25.82 AAS
いまやインラインアセンブラがあるだけでは優位とはいえんな

インラインアセンブラが、unsafe なしで書けてこそRust
774: 仕様書無しさん [sage] 2025/04/04(金) 12:21:13.68 AAS
>>767
> C/C++の言語仕様があまりにも酷いためRustのような安全性を導入できないことが判明している

ソースplz
775: 仕様書無しさん [] 2025/04/05(土) 11:39:00.54 AAS
>>765
上層のクラス含め何でもテンプレートで書く独りよがりいるけど止めて欲しいよな
あくまで型違いで共用するコードの冗長を減らす目的に限定
なおかつ他者は使い方だけ把握して、コード内を見ず使えるように実装すべきだな
776
(1): 仕様書無しさん [] 2025/04/05(土) 11:45:59.22 AAS
Rustはなあ、人を用意できんだろ?特に日本じゃ

c++だってstlテンプレラムダmoveとかは見ずに使えて
デザインパターンで設計できてc++17くらいまでさえOKな人はなかなか捕まらない
777
(1): 仕様書無しさん [] 2025/04/05(土) 11:47:58.22 AAS
>>776
俺を呼べ😎
778: 仕様書無しさん [] 2025/04/05(土) 11:51:21.93 AAS
>>777
ここの人は当然リーダーをやるべきでしょう
それでrustかc++23か、とにかくやりたい言語で人を集めないと
779: 仕様書無しさん [sage] 2025/04/05(土) 12:48:19.91 AAS
C++ジジイばっかり集まるぞ
780: 仕様書無しさん [sage] 2025/04/05(土) 17:52:49.17 AAS
実際自称C++出来る人って、9割ぐらいは未だにC++11未満の知識しかないんじゃない?
ある程度いける口はRustに行っちゃってそうだし
781: 仕様書無しさん [sage] 2025/04/06(日) 07:25:07.81 AAS
23になってなんか文法劇的に変わったのある?
782
(1): 仕様書無しさん [sage] 2025/04/07(月) 10:18:19.76 AAS
全然昔からあるが、ラムダぜんぜん使いこなせない
783: 仕様書無しさん [sage] 2025/04/07(月) 12:22:38.93 AAS
ラムダ式は設計書に書くメソッド一覧にどう書けばいいのやら
784: 仕様書無しさん [sage] 2025/04/07(月) 12:50:32.64 AAS
新規関数追加申請書にちゃんと印鑑を押して提出してから書かないとダメだぞ
785: 仕様書無しさん [sage] 2025/04/07(月) 15:13:54.43 AAS
関数名が分からないw
786: 仕様書無しさん [] 2025/04/07(月) 22:02:35.14 AAS
>>782
はじめつらかったけど、気がついたら当たり前みたいに使うようになった
787: 仕様書無しさん [sage] 2025/04/07(月) 23:07:41.17 AAS
キャプチャとか
788: 仕様書無しさん [sage] 2025/04/08(火) 19:03:23.16 AAS
C++のアルゴリズムって、JavaのStreamやRustのIteratorに比べてなんか直感的じゃなくて使いにくいよな
789: 仕様書無しさん [] 2025/04/09(水) 22:12:44.13 AAS
Rustを蛇蝎のごとく嫌ってる人間が相当数いるよな
790
(1): 仕様書無しさん [sage] 2025/04/10(木) 09:42:32.42 AAS
一部のRust教徒キライ
俺の かあちゃんであるC++を侮辱するんだ

Rustに恨みはない
それどころか、知見を学ばないとって当然思ってる
仕事でつかえっていわれたらつかうよ なんとかなるはず
791: 仕様書無しさん [sage] 2025/04/10(木) 13:10:50.44 AAS
まともにC++使える人間なら、実際Rustは使えると思う
最近は流行ってるせいか、人生でスクリプトしか触ってないようなイケイケのWeb屋も手を出してるみたいだけど
そいつらのほうが苦しむだろうな
792
(1): 仕様書無しさん [sage] 2025/04/10(木) 21:42:17.70 AAS
文字列ひとつ戻り値で返すのに七転八倒
793: 仕様書無しさん [] 2025/04/10(木) 21:45:40.29 AAS
>>792
Rustをつかえば安全で簡単だよ
794: 仕様書無しさん [sage] 2025/04/11(金) 08:14:23.71 AAS
>>790
お前のかあちゃんは立派だったけどそろそろ年金生活の歳だからな
795: 仕様書無しさん [sage] 2025/04/12(土) 09:20:48.96 AAS
まだごりごり畑耕してるぞw 最近は孫の面倒見て大忙し
796: 仕様書無しさん [sage] 2025/04/20(日) 02:49:30.03 AAS
rustはあまりaiは学習していない印象
797: 仕様書無しさん [] 2025/04/20(日) 17:55:34.76 AAS
Rustのようにスレッドセーフが保証される型があってAtomic型を使えばマルチスレッドでもロックフリーで高速にすることも可能な言語
PythonのようにGIL(グローバルインタプリタロック)があってマルチスレッドでも十分に性能が出ない言語
プロと素人くらいの差があって驚いた
798: 仕様書無しさん [sage] 2025/04/21(月) 09:46:23.22 AAS
こりん星から来たまんこりんです
799
(2): 仕様書無しさん [sage] 2025/05/02(金) 18:14:57.48 AAS
https://www.c-nexco.co.jp/corporate/pressroom/2025_crisis-management_etc/pdf/2025_crisis-management_etc05.pdf
Rust使ってたら避けれたの?
800: 仕様書無しさん [sage] 2025/05/02(金) 19:45:27.57 AAS
>>799
まあ
大量のレコードを移動する事無く再利用してたけど、書き込むサイズを間違えて後ろのデータに上書きしちゃった、てへ
って事だから
Rustだとしても回避出来ないかな
801: 仕様書無しさん [] 2025/05/02(金) 20:36:56.61 AAS
>>799
別領域へ書き込んでるから、Rustなら必ず回避できていて、今回の問題は避けられた
Rustは領域を最終的にスライスで抽象化し、それは内部的には始点アドレスと長さのペアになる
そしてRustでその領域を超えた書き込みは絶対に起きず、安全が保証される
802: 仕様書無しさん [sage] 2025/05/02(金) 21:17:59.45 AAS
ストレージ容量の不足かと思ってたけど意図しないアドレスへのデータ書き込みが原因だったのか
803: 仕様書無しさん [sage] 2025/05/02(金) 21:41:41.57 AAS
障害時の対応いろいろ考えてて大変だなと思った
バグみたいな障害起こったらどうせだめなんだから止めたらいいじゃんって思うんだが
804: 仕様書無しさん [] 2025/05/02(金) 22:17:09.39 AAS
Rustはスライスが始点だけでなくサイズも伴ってペアで管理されるため、こういった問題も防げるね。
805: 仕様書無しさん [sage] 2025/05/02(金) 23:10:04.72 AAS
後ろのレコードにはみ出して上書いちゃうって
どんな作りしたらそうなるんだよ
806: 仕様書無しさん [sage] 2025/05/04(日) 12:25:28.51 AAS
生ポインタの操作とかやらない言語だとわけわかんないだろうけど
そのわけわかんないのをボンクラだけじゃなく、世界最高峰レベルでもC/C++だと普通にやっちゃうのが現実なんだ
807: 仕様書無しさん [sage] 2025/05/05(月) 00:31:46.02 AAS
領域破壊は原因ではなく設計ミスの結果に見える

記事からは
そもそも削除機能がなかったように読める
テストで検出できなかったのも変だ
スケジュールの都合とかでどっかで抜け落ちて忘れてたんだろうが
こんなことでは国に危ないことは何もさせられないではないか
808: 仕様書無しさん [sage] 2025/05/05(月) 00:35:46.73 AAS
でも最低限チェックしてれば壊れずにすんだのか
809
(1): 仕様書無しさん [] 2025/06/04(水) 19:00:28.61 AAS
ブラウン大学がドキュメント「C++ to Rust Phrasebook」を発表
https://techfeed.io/entries/683ccb678fc2c0556f0d68d0
810: 仕様書無しさん [sage] 2025/06/04(水) 22:50:40.21 AAS
Rust面白い
811: 仕様書無しさん [] 2025/06/05(木) 23:59:29.20 AAS
いいね

>>809
C++でおなじみのイディオムや設計パターンを、Rust流にどのように書き換えるかを体系的に示したリファレンスである。
各章は具体的なコード例と、それに伴う設計上のトレードオフについての解説で構成される。
「C++ならこう書くがRustでは?」と行き詰まった場面で索引的に参照する使い方も想定されている。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.090s*