kakasi/tests/rust_article_hiragana.txt

157 lines
38 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Rustらすとは、せいのう、めもりあんぜんせい、あんぜんなへいこうせいをめざしてせっけいされたまるちぱらだいむのぷろぐらみんぐげんごである。Cげんご、C++にかわるしすてむぷろぐらみんぐげんごをめざしており[2]、こうぶんてきにはC++ににているが[3]、「ぼろーちぇっかー」(borrow checker) でさんしょうのゆうこうせいをけんしょうすることによってめもりあんぜんせいをほしょうできる。Rustはがべーじこれくしょんなしでのめもりあんぜんせいをたっせいしており、ひつようなばめんでさんしょうかうんとをつかうこともできる[4][5] 。
Rustぷろじぇくとはおーぷんそーすのこみゅにてぃべーすかいはつでしんこうしており[6]、げんごしよう(けんとうだんかいふくむ)、そーすこーど、どきゅめんとはおーぷんそーすらいせんすでこうかいされている[7]。2006ねんのかいはつしょきは、Mozillaのじゅうぎょういんのぐれいどん・ほあれGraydon Hoare[8]のこじんぷろじぇくとだったが、2009ねんにMozillaがかいはつにかかわりはじめてMozilla Researchのこうしきぷろじぇくととなった[9][10]。2015ねんに1.0はんがりりーすされるまでにいくつものはかいてきなしようへんこうがあったが、1.0はんいこうはきほんてきにはこうほうごかんをたもって6しゅうかんかんかくでていきてきにりりーすされている。
Rustはまるちぱらだいむぷろぐらみんぐげんごであり、てつづきがたぷろぐらみんぐ、おぶじぇくとしこうぷろぐらみんぐ、かんすうがたぷろぐらみんぐなどのじっそうしゅほうをさぽーとしている。きほんてきなせいぎょこうぶんはCげんごににているが、そのおおくがしきexpressionであるというてんにおいてはMLげんごににている。こんぱいるきばんにMIRとLLVMをもちいており[11]、じっこうじそくどせいのうはCげんごとどうとうていどである[12]。きょうりょくなかたしすてむとりそーすかんりのしくみにより、めもりあんぜんせいがほしょうされている。
Rustは20162022ねんのかんStack Overflow Developer Surveyで「もっともあいされているぷろぐらみんぐげんご」でいちいをかくとくしつづけている[13]。いっぽうで、Rustはがくしゅうなんいどがたかいげんごともかんがえられており[14]、2017ねんろーどまっぷではがくしゅうきょくせんのかいぜんをもくてきとしてあげていた[15]。
Rustというなまえはさびきんにちなんでづけられた[16]。このめいめいののち、とうじのかいはつちーむめんばーのおおくがじてんしゃをあいこうしていたことから、じてんしゃのちぇーんりんぐのさびつきをもとにしたでざいんのろごがこうあんされた[17]。とうぜん、ちぇーんりんぐのさびがさびきんによってしょうじるわけがなく、「せっけいしゃのぐれいどん・ほあれがせいぶつがくおたくであることからさんかてつの「さび」ではなく「さびきん」なのだ」と、さんこうぶんけん16のまつびにしるされている。
かいはつたいけい
Rustはおーぷんそーすのこみゅにてぃべーすでかいはつがすすめられている。ぷろじぇくとのしゅかんはRust Project DevelopersRustかいはつちーむである[18]。2018ねんげんざい、げんごはつめいしゃのぐれいどん・ほあれはぷろじぇくとちーむからはずれている。ぷろじぇくとのすべてのそーすこーどはGitHubでいっぱんにこうかいされており[19]、こみゅにてぃめんばーのきょうりょくによりかいりょうがすすめられる。ぷろじぇくとのだいぶぶんのこみっとはこみゅにてぃめんばーによるものである[20]。
Mozillaのりねん[21]をまもり、Rustげんごはしゃかいにひらかれており、げんごやつーるにたいするしようのていあんはRFCのかたちでとりまとめられ[22]、かんれんするちけっとでしようしょうさいについてりようしゃからかんそうやていげんをうけている[23][24]。
げんごやこあらいぶらりをかいはつするRustかいはつちーむはServoうぇぶぶらうざようれいあうとえんじんやRustこんぱいらのじっそうけいけんをとうしてげんごをかいりょうしている。たとえば、CげんごとRustをれんけいさせるこーどをじどうせいせいするbindgenはもともとはがいぶかいはつしゃがかいはつしていたが[25]、Mozilla ServoかいはつちーむがServoのかいはつでりようするためにC++とRustをれんけいさせるこーどもじどうせいせいできるようかいりょうをおもね、げんざいはServoかいはつちーむとみつにれんけいしているRustかいはつちーむにしゅかんをいこうして[26]Servoのかいはつとともにかいりょうがつづけられている[27]。
せっけいととくちょう
ぱらだいむ
げんごじっそうしゅほうにおいてのぷろぐらみんぐぱらだいむはとくていのじっそうしゅほうにげんていされないひじゅんすいなまるちぱらだいむぷろぐらみんぐげんごである。ぶんぽうのひょうめんてきなきじゅつはてつづきがたぷろぐらみんぐ、ぶろっくこーどのまとまりのいみろんはかんすうがたぷろぐらみんぐ、かたしすてむをもちいたおぶじぇくとこうぞうはおぶじぇくとしこうぷろぐらみんぐのぱらだいむとくせいをもつ。とくていのぷろぐらみんぐぱらだいむのみをしようしてそーすこーどをきじゅつすることはなく、ようしょようしょのひつようなところでひつようなぱらだいむをしようしてそーすこーどをきじゅつすることになる。
そーすこーどをたーげっとぷらっとふぉーむにさいてきかしたおぶじぇくとふぁいるにこんぱいるするこんぱいるげんごのぱらだいむとくせいをもつ。おおくのすくりぷとげんごがもついんたぷりたきのうや、SwiftやGoがていきょうするようなREPLきのうのぱらだいむとくせいはもたない。
そのほかのぱらだいむとして、かんすうのにゅうしゅつりょくぱらめーたにじぇねりっくかたをしていするじぇねりっくぷろぐらみんぐ、ひどうききのうをじつげんするへいこうけいさんのぱらだいむとくせいをもつ。
きそぶんぽう
RustのきそてきなぶんぽうはCげんごやC++ににて、なみかっこでかこまれたぶろっくこーど{ ... }、if, else, whileなどのせいぎょふろーきーわーどをもつ。 すべてのCげんごやC++のきーわーどがじっそうされているわけではなく、いっぽうでいくつかのRustのせいぎょめいれいぱたーんまっちのためのmatchはそれらのげんごをしゅうとくしたぷろぐらまにとってはなじみがすくないものもそんざいする。Rustのめいれいぶんは、ひょうめんてきなCげんごやC++とのぶんぽうのるいじせいにもかかわらず、いみろんてきにはMLけいげんごのめいれいしきにちかく、かんすうほんたいのほぼすべてのぶぶんはせいぎょふろーえんざんしでさえ「ぶんstatement」ではなく「しきexpression」である[28]。たとえばふつうのifしきもCげんごでいうところのじょうけんえんざんしであり、ifしきのけっかとしてかえりちをかえす。
ぶろっくこーどないのめいれいぶんのせぱれーたにはせみころん(;をもちいるが、CげんごのそれとことなりRustのせみころんはちょくぜんのめいれいぶんがぶろっくこーどでくくられるしきのとちゅうしきであることをせんげんするためのものである。せみころんをまつびにおかないめいれいぶんはぶろっくこーどのさいしゅうてきなひょうかしきとしてあつかわれ、そのしきのけっかがぶろっくこーどのそとへもどりちとしてかえされる[29]。これはかんすうていぎであれば、けっかをかえすかしょにはせみころんをつけない。けっかがふようならばせみころんによってめいじてきにすてるのである。そしてけっかをかえさないならば、それはぶんとよばれる。
へんすう
へんすうはletきーわーどでていぎされ、ふへんいみゅーたぶるである[30]。へんすうへのさいだいにゅうはこんぱいるえらーとなる[31]。
かへんへんすうをあつかいたいばあい、へんすうせんげんときにmutきーわーどをりようしてかへんであることをめいじしなければならない[32]。このきのうはたとえばきょだいこうぞうたいのこぴーをさけながらいちぶをへんこうするためにゆうこうかつようできる。
またRustはしゃどーいんぐどうめいへんすうのふくすうかいていぎにたいおうしている[33]。しゃどーいんぐによりいちじてきなへんすうのへんこうやへんすうけいのへんこうがかのうになる[34]。
へんすうとはべつにconstきーわーどでていぎされるていすうをもつ。ていすうはつねにひとしいあたいをもつmutやしゃどーいんぐにたいおうしていない
かたとぽりもーふぃずむ
このげんごのかたしすてむではHaskellげんごにならい「かたくらす」をもちいることができる。これはあどほっくなたあいしょうをよういにするものであり、かへんかたせんげんによりじつげんされるものである。たかかいんどたあいしょう[35]など、Haskellげんごにあるほかのとくちょうはさぽーとされていない。
かたしすてむ
Rustげんごがそなえるかたしすてむは、implじっそう、traitとれいと、structこうぞうたいおよびenumれっきょがたをきほんとしてこうせいされる。implがほかのげんごにおけるくらすにちかいやくわりをはたし、けいしょうとぽりもーふぃずむはtraitによってていきょうされる。traitにはめそっどをていぎすることができ、traitでせんげんされためそっどはimplによってstructへみっくすいんされる。structにはふぃーるどがていぎかのうで、traitとimplはそれじしんにはふぃーるどはていぎできない。enumにはふくすうしゅるいのかたのかてごりへんすうがていぎかのうで、すうちかた、もじれつがた、おぶじぇくとかたなどのふくすうのじょうたいをせんたくてきにもちうる。ひしがたけいしょうもんだいをかいひするためにtraitのみがけいしょうがかのうである。
へんすうのかたをけっていするかたしすてむはせいてきがたづけかつつよいかたづけである。せいてきがたづけとどうてきかたづけのくぶんにおいてのかたづけは、こんぱいるときにすべてのへんすうにたいしてかたをけっていするせいてきがたづけをきほんとしているが、とれいとをぽいんたをかいしてりようすることで、だっくたいぴんぐににたかたづけがかのうなとれいとおぶじぇくとがそんざいする。ほかに、Anyとれいとにて、じっこうじりふれくしょんをもちいたどうてきかたづけもかのうである。つよいかたづけとよわいかたづけのくぶんにおいてのかたづけは、じっこうじにへんすうのかたをかたへんかんあっぷきゃすと、だうんきゃすと、くろすきゃすとおよびぼくしんぐをすることをゆるさないつよいかたづけのみをさぽーとしている。Cげんご、Javaはじっこうじにかたへんかんをすることをゆるすよわいかたづけをさぽーとしているが、Rustげんごではそのようなかたへんかんはみとめられていない。
かたすいろん
Rustこんぱいらはへんすうへのだいにゅうときvariable = value、へんすうのかたをあたいのかたにもとづきかたすいろんする。へんすうのせんげんにはかならずしもかたをけっていするためのしょきちをひつようとしない。へんすうのせんげんときにしょきちがあたえられたばあいは「へんすうのかた」は「しょきちのかた」であるとかたすいろんがなされるが、しょきちがあたえられなかったばあいはいこうのぶろっくこーどなかのそのへんすうへあたいがはじめてだいにゅうされたときに「さへんのへんすうのかた」は「うへんのだいにゅうするあたいのかた」であるとかたすいろんがなされる。へんすうへのだいにゅうがかたふいっちによりしっぱいしたばあいにはこんぱいるときにえらーをけんしゅつする[36]。
ぽりもーふぃずむのじつげん
ぽりもーふぃずむをじつげんするため、こうぞうたいのふぃーるどおよびかんすうのにゅうしゅつりょくちはとくていのとれいとのじっそうをするじぇねりっくかたをしていすることができる。そのようなていぎのなかでは、じぇねりっくかたでかたがせんげんされたへんすうおよびにゅうしゅつりょくちはそのとれいとのとくせいのみしようできる。これはじぇねりっくかんすうがていぎされるとすぐにかたはんていができることをいみしている。これはC++のだっく・たいぴんぐでぐたいてきなかたがいんすたんすかされるまではんていできないてんぷれーととはたいしょうてきである。しかし、RustのじぇねりくすのじっそうはC++のてんぷれーとのてんけいてきなじっそうとにており、いんすたんすかごとにこーどのこべつのこぴーがせいせいされる。これはたんそうか[37]とよばれ、JavaやHaskellでつうじょうしようされるかたしょうきょほうしきとはたいしょうてきである。たんそうかのりてんはとくていのゆーすけーすごとにさいてきかされたこーどであり、けってんはけっかのばいなりのこんぱいるじかんおよびさいずがぞうかすることである。Rustのとれいとをもちいたぽりもーふぃずむのじつげんは、じっこうじのおーばーへっどがない「ぜろこすとちゅうしょうか」とひょうげんされている[38]。
りそーすかんり
RustはめもりやそのほかりそーすのかんりにRAIIをさいようしており、りそーすのりようくかんをこんぱいるときにせいてきにけんしょうするぼろーちぇっかーborrow checkerというきのうでじつげんされている。がべーじこれくしょんやさんしょうかうんととはことなり、こんぱいるときにせいてきにりそーすのりようくかんをけんしょうすることで、じっこうじのりそーすかんりこすとをしょうりょうにおさえている。
ぼろーちぇっかー
ひとつのりそーすはひとつのしょゆうしゃへんすうやぶろっくのみにかんれんづけされるというせいやくがRustとくゆうのりそーすかんりきのうとしてそんざいする。これは、あるりそーすのしょゆうけんownershipはあるしょゆうしゃownerがじっている、のようにひょうげんされる。どうじに、りそーすのしょゆうけんをふくすうのへんすうがもつことはできない。これはC++のすまーとぽいんたのいっしゅであるunique_ptrのふるまいににている。ぼろーちぇっかーはしょゆうけんのきょうごうおよびふせいりようをけんしょうする。
りそーすにはさんしょう(&きごうのがいねんがそんざいし、これはしょゆうけんのがいねんとへいこうしてあつかわれる。しょゆうけんはひとつのしょゆうしゃしかもてないが、さんしょうはふくすうのしょゆうしゃがもちうる。さんしょうはどういつのりそーすをふくすうのかしょでりようするためにりようされる。ただし、しょゆうけんによるりそーすかんりはゆうこうであり、しょゆうけんがかいほうされたりそーすをさすさんしょうはどうじにむこうかされる。ぼろーちぇっかーはこのさんしょうについてもらいふたいむlifetimesとしてりそーすのせいぞんきかんをけんしょうする。
ぼろーちぇっかーはりそーすのしょゆうけんとらいふたいむのりょうほうをせいてきにかいせきすることで、ぬるぽいんたやふせいなめもりいきをさすぽいんたー(えいごばん)、りそーすりようきょうごうをせいげんしためもりあんぜんせいをじつげんしている。
とくいなりそーすかた
りそーすのめもりかくほはきほんてきにはすたっくめもりをりようしており、ひーぷめもりをりようしためもりかくほはBoxやVecなどのとくていのかたのみでげんていてきにりようされている。
こんぱいるときにかたのさいずがけっていできないかへんちょうはいれつをあらわすようなかたはひーぷめもりをりようするBoxかたをしようしてりそーすをかんりする。Boxりそーすじたいはすたっくめもりでかんりされるが、Boxりそーすがしょゆうけんをもつじったいのりそーすはひーぷめもりでかんりされる。ひょうじゅんのひーぷめもりかくほにはしすてむあろけーたをりようするが[39]、たいしょうぷらっとふぉーむやびるどときのしていによりほかのめもりかくほAPIをりようすることもある。ひーぷめもりはすたっくめもりにくらべてそくどせいのうがおちるため、ひつようときにのみげんていてきにりようされている。
きょうかいちぇっく
Rustはじっこうじにきょうかいちぇっくをおこなう。これによりばっふぁおーばーらんをはじめとしためもりあくせすにたいするあんぜんせいをえている。このきのうはぜろこすとちゅうしょうかでなくじっこうじのめいれいであるため、あんぜんせいとひきかえにいくらかのせいのうおーばーへっどがはっせいしている。ほかのしすてむぷろぐらみんぐげんごとしてだいひょうてきなCげんごやC++はきょうかいちぇっくをきょうせいしないため、Rustのとくちょうの1つとなっている。
らいぶらり
Rustのらいぶらりはくれーとcrateというこしょうでていきょうされる。おおくのくれーとはcrates.ioでこうかいされている。どうさいとはばーじょんごとのそーすこーどをあーかいぶとしてていきょうしている。くれーとはかならずしもcrates.ioにとうろくされているひつようはなく、WebさーばやふぁいるしすてむをさすURIでしていすることもできる[40]。らいぶらりはそーすこーどぷろじぇくとではいふされることがいっぱんてきだが、こんぱいるしたばいなりらいぶらりふぁいるかくちょうしrlibでしゅつりょくすることもかのうである。
こあらいぶらり
こあらいぶらりはcoreのめいしょうでていきょうされている[41]。このらいぶらりはひょうじゅんらいぶらりにいぞんしないきかんらいぶらりであり、いっさいのじょういらいぶらり、しすてむらいぶらり、libcらいぶらりにりんくしていない。こあらいぶらりはさいしょうげんであり、ひーぷわりあてをにんしきせずへいこうせいやにゅうしゅつりょくもていきょうしていない。それらのことはぷらっとふぉーむへのちょうせいがひつようであり、このらいぶらりはぷらっとふぉーむにいぞんしない。
ひょうじゅんらいぶらり
ひょうじゅんらいぶらりはstdのめいしょうでていきょうされている[42]。このらいぶらりはきそてきなかたVec<T>やOption<T>、げんごのきほんのしょり、ひょうじゅんのまくろ、にゅうしゅつりょくI/O、まるちすれっどなどのきのうをていきょうする。ひょうじゅんらいぶらりはひょうじゅんでりんくしてそふとうぇあがびるどされるが、よりこんかんてきなそふとうぇあやりそーすのちいさいくみこみかんきょうではりんくをはずしてそふとうぇあをびるどすることができる。
がいぶらいぶらり
Rustはきほんてきではんようてきなきのうをふくめひょうじゅんらいぶらりではなくがいぶらいぶらりとしてていきょうしている。これはいわゆる「ばってりーどうこん (“Battery Included”)」のはんたいをいくもので、げんごとともにこうしんすることでほしゅてきになりがちなひょうじゅんらいぶらりではなく、げんごとはどくりつしてこうしんすることでさいぜんをくりかえしたんきゅうしうるがいぶらいぶらりとすることで、それらのきのうをよりよいひんしつでていきょうするかんがえにもとづいていたものである[43]。がいぶらいぶらりのりべんせいとひんしつのほしょうのためにcrates.ioとAPIがいどらいんをていきょうしている。
げんごかいはつのこみゅにてぃがそれらについてたずさわっていないわけではなく、きそてきながいぶらいぶらりはこみゅにてぃはいかでかいはつがすすめられている。
きそてきならいぶらり
rand - らんすうせいせい[44]
regex - せいきひょうげん[45]
chrono - じこくそうさ[46]
libc - Cげんごいんたーふぇーす[47]
log - ろぐしゅつりょくいんたーふぇーす[48]
かいはつつーる
Rustのかいはつつーるはどくりつしたそふとうぇあとしてていきょうされているが、Rustのこうしきないんすとーるほうほうにしたがえば、いかのつーるいっしきがてにいる。
rustc
rustcはRustできじゅつされたRustそーすこーどをこんぱいるするこんぱいらしょりけいである。こんぱいるのせいかぶつとしてちゅうかんこーど、およびじっこうふぁいる、せいてきらいぶらり、どうてきらいぶらりをしゅつりょくする[49]。rustcはくろすこんぱいるをかのうとし、Windows、Linux、macOSむけのじっこうふぁいるほか、AndroidやiOSでどうさするらいぶらりをほすとましんでしゅつりょくすることができる[50]。
たいしょうぷらっとふぉーむはかんせいどにあわせて3つのてぃあにわかれている[51]。てぃあ1はばいなりりりーすがていきょうされており、じどうびるどえいごばんとじどうてすとがせいびされ、それらがあんていしてせいこうぱすすることがほしょうされている。 てぃあ2はばいなりりりーすがていきょうされており、じどうびるどとじどうてすとはせいびされているがてすとがせいこうすることはほしょうされていない。てぃあ3はそーすこーどとしてはたいおうしているが、じどうびるどとじどうてすとのどうさがほしょうされておらず、こうしきりりーすはていきょうされていない。
Windows、Linux、macOSむけのRustこんぱいらはてぃあ1でりりーすされている。Android、iOS、WebAssemblyむけのRustこんぱいらはてぃあ2でりりーすされている。
Rust 1.12はんよりどうにゅうされたMIR (Mid-level IR)[11] によって、こんぱいるとじっこうじまのじんそくかならびにかたちぇっくのせいかくせいのじつげんがはかられている。
Cargo
CargoはRustせいそふとうぇあぷろじぇくとのCUIのびるどつーるである。きていのふぁいるこうせいでぃれくとり、せっていふぁいる、そーすふぁいるのぷろじぇくとでぃれくとりでりようされる。ぷろじぇくとのびるどこんぱいる、いぞんらいぶらりのだうんろーど、てすと、どきゅめんとせいせいなどをさぽーとする[53]。つうじょうはCargoをちゅうしんにかいはつをおこなえるようにせっけいされているため、rustcこんぱいらをちょくせつよびだすことはまれである。Cargoのいぞんらいぶらりのだうんろーどさきはcrates.ioである[54]。 さぶこまんどはかくちょうかのうでひょうじゅんのこまんどのほか、README.mdふぁいるのじどうせいせいこまんど[55]などのかくちょうこまんどがそんざいする。このかくちょうはcargo-xxxとなづけたこまんどをてきせつにいんすとーるするだけで、cargoにxxxというさぶこまんどをついかできる。
rustup
rustupはつーるちぇーんのかんりそふとうぇあである。つーるちぇーんのだうんろーどといんすとーる、そふとうぇあばーじょんのかんり、こんぱいるたーげっとのきりかえのきのうをていきょうする[56][57]。
きのう
rustupはRustぷろじぇくとがりりーすしているこんぱいらrustc、びるどつーるCargoなどのつーるちぇーんをいんたーねっとをけいゆしてほすとましんにだうんろーど、いんすとーるおよびまねーじめんとするきのうをていきょうする。いんすとーるたいしょうのつーるちぇーんのばーじょんは、あんていはん、べーたはん、ないとりーはんのすべてをふくんでおり、りようしゃがひつようとするばーじょんをしていしてだうんろーどすることができる。また、たーげっとぷらっとふぉーむについてもすべてのしゅるいをふくんでおり、ほすとましんとことなるぷらっとふぉーむたとえば、ほすとがmacOSであってもWindowsやAndroid、iOSのこんぱいらをいんすとーるすることができる。このばあい、こんぱいらはくろすこんぱいらとしてどうさしてたーげっとぷらっとふぉーむにあわせたびるどをじっしする。
れきし
Rust 1.13はんいぜんはしぇるすくりぷとでじっそうされたrustup.shがこうかいされていた[58]。これとへいこうしてRustげんごでじっそうされたどうとうきのうをていきょうするrustup.rsのかいはつがすすめられており、Rust 1.14はんでrustup.shはひすいしょうとなり[59]、Rust 1.14はんいこうはrustup.rsがこうしきりりーすとしてていきょうされている[60][61]。
ひょうか
Rustは2016〜2022ねんにわたってStack Overflow Developer Surveyで「もっともあいされているぷろぐらみんぐげんご」でいちいをかくとくしつづけ[13]、ぷろぐらまのこういてきなひょうかはおおい。
いっぽうで、Rustはがくしゅうなんいどがたかいげんごともかんがえられている[62]。おおくのRustしょがくしゃのぷろぐらまにおいて、じしんがただしいとおもってかいたそーすこーどのこんぱいるにたいしてこんぱいらぼろーちぇっかーがえらーをけんしゅつする、「ぼろーちぇっかーとのたたかい」fighting with the borrow checkerがはっせいしがちである[63][64]。ちいさなあぷりけーしょんのじっそうについてどうじきにげんごかいはつされているGoげんごとひかくしたばあい、RustげんごよりGoげんごのほうがかいはつこうりつがよいというひょうかがある[14]。がくしゅうなんいどのたかさはかいはつちーむもにんしきしており、2017ねんろーどまっぷではがくしゅうきょくせんのかいぜんをもくてきとしてあげていた[15][65]。
このもんだいをかいぜんするために、2020ねんげんざいにおいて、じどうかをめいんてーまにしたかいはつをつづけており、ぜんじゅつにあるcargo、rustupなどのつーるいがいにも、rustfmt、clippy、cargo docなどのつーるるいをIDEかんきょうのみならずCUIかんきょうでもりようかのうなじょうたいへとせいびをつづけている。また、こうほうごかんせいをいじしているため、crates.ioをもちいることでらいぶらりるいなどのせいさんせいのこうじょうにもつとめている。
RustのじっこうじそくどせいのうはおなじくこんぱいらにLLVMをりようしているばあいのCげんごとどうとうていどであり[66][67]、いちぶのしょりではCげんごをうわまわったそくどがかくにんされている[12]。2018ねん2がつじてんで、うぇぶさーばあぷりけーしょんのはんようしょりではそくどせいのうのよいRustせいらいぶらりはかいはつがすすんでいない[68]。たんじゅんなてきすとしょりではそくどせいのうはよい[69]。
そののちのべんちまーくでは、へいこうしょりやぐらふぃっくすしょりにおいても、JavaやGoをうわまわっており、こんぱいらのしゅつりょくするこーどのゆうしゅうせいがしょうめいされている。ただし、さぽーとされていないぐらふぃっくすぼーどCのらいぶらりをいんくるーどしなければならないでは、C/C++のじっこうせいのうにはおよんでいない。
たんじょう
2006ねん、Mozillaではたらいていたぐれいどん・ほあれ[70]はげんだいのいんたーねっとかんきょうでたかいへいこうせいとたかいあんぜんせいがもとめられるしすてむぷろぐらみんぐげんごとしてCげんごやC++にかわりうるぷろぐらみんぐげんご Rustげんごのかいはつにちゃくしゅした[2]。MozillaがRustのかいはつにかかわりはじめたのは2009ねんで[71][9]、Rustは2010ねんのもじら・さみっとでこうにすがたをあらわした[72]。RustそーすこーどをこんぱいるするRustこんぱいらは、しょきのごろはOCamlげんごでつくられたこんぱいらrustbootがもちいられていたが[73]、2010ねんにはRustげんごじしんでRustこんぱいらをつくるせるふほすてぃんぐへいこうしたこんぱいらrustcのかいはつがはじめられ[74]、よくねんにはぶーとすとらっぷもんだいをかいけつしたさいしょのかんどうひんがかんせいした[75]。このときよりRustこんぱいらはこんぱいるきばんにLLVMをもちいたものとなった[76]。
0.xはん
ぷれあるふぁ0.1はんとよばれるさいしょのばーじょんは2012ねん1がつにりりーすされた[77]。Mozillaはこれをあたらしいものこのみのにんやぷろぐらみんぐげんごあいこうかのためのあるふぁはんといちづけていた。さいしょのあんていはんである1.0はんがりりーすされるまでの0.xはんりりーすでは、いくつものおおきなはかいてきなしようへんこうがげんごおよびらいぶらりにくわえられた。
へんすうめいやかんすうめいなどしきべつしは、このげんごのかいはつのしょきのごろは、ASCIIもじいがいのもじをつかうことがきんじられていた。げんごについてのあるしつぎおうとうのなかで、げんばのひえいごけんのぷろぐらまーのほとんどがしきべつしにはASCIIもじをつかっているとのべられていた。しかしそのせいげんははんろんをひきだすことになった[78]。それにより、2011ねん2がつにげんごにへんこうがおこなわれ、このせいげんはさくじょされた[79]。
かたはんていは、0.4はんいぜんのじゅうらいのせいてきがたづけにくわえて、かたじょうたいしすてむをさぽーとしていた。かたじょうたいしすてむは、とくべつなcheckぶんをしようしてぷろぐらむぶんのぜんごでのかたけっていをもでるかした。CげんごやC++こーどでのあさーしょんのばあいとどうように、ぷろぐらむじっこうちゅうではなくこんぱいるときにかたふいっちをけんしゅつする。かたじょうたいのがいねんはRustとくゆうのものではなく、NILでさいようされていたものである[80]。じっさいにはほとんどしようされていなかったためかたじょうたいはさくじょされたが、ぶらんでぃんぐぱたーんでおなじきのうをじつげんできる[81]。
おぶじぇくとしこうのしすてむは、0.2はんから0.4はんにかけておおきくかわっていった。0.2はんではじめてくらすclassがどうにゅうされ、0.3はんでいんたーふぇーすinterfaceをとうしたですとらくたとぽりもーふぃずむがついかされ、0.4はんでけいしょうをていきょうするしゅだんとしてとれいとtraitがついかされた。いんたーふぇーすはとれいとにいちぶのきのうがとうごうされて、ことなるふようなきのうとしてさくじょされた。くらすもまたさくじょされ、こうぞうたいととれいとをしようしたみっくすいんにおきかえられた。
こあのめもりもでるは、0.9はんから0.11はんのかん、2つのびるといんのぽいんたかたひーぷめもりかた~とがべーじこれくしょんかた@をきのうをたんじゅんかするためによういしていた。それらは、ひょうじゅんらいぶらりのBoxかたとGcかたでおきかえられ、Gcかたはさいしゅうてきにはさくじょされた[82]。
2014ねん1がつ、Dr. Dobb's Journalのへんしゅうちょうあんどりゅー・びんすとっくはDげんごやGoげんご、NimげんごとどうようにC++のきょうそうあいてになるきかいをえたとこめんとした。びんすとっくによると、Rustはひじょうにえれがんとなげんごとしてひろくみられているが、ばーじょんかんでくりかえしおおきくへんこうされたためふきゅうがおくれているという[83]。
1.xはん
2015ねん5がつ16にち、あんていはんとなるRust 1.0がりりーすされた[84]。1.0はんののち、あんていはんおよびべーたはんが6しゅうかんおきにていきりりーすされている[85]。またないとりーはんがまいにちりりーすされている[86]。あらたなきのうはないとりーはんでかいはつがすすめられ、べーたはんでどうさがけんしょうされている[87]。
2016ねん8がつ2にちにりりーすされたFirefox 48にはRustでかきなおされためでぃあぱーさがくみこまれており、MozillaがかいはつしているぶらうざのFirefoxにおいてRustでかかれたこーどがかきくわえられるはつれいとなった[88][89]。
2016ねん9がつにRustはFedora 24のひょうじゅんこんぽーねんとにくわえられ、RPMのぱっけーじかんりしすてむをもちいてのいんすとーるさぎょうがよういかされている[90]。
2018ねんばん
2018ねん12がつ6にちにばーじょん1.31がりりーすされた[91]。こんかいからえでぃしょんせいがどうにゅうされ、さいしんばんは"Rust 2018"、じゅうらいはんは"Rust 2015"とよばれることになる。げんごきのうへのはかいてきへんこうはあたらしいえでぃしょんのみにてきようされるが、ごかんせいにえいきょうしないきのうついかはひきつづきりょうしゃにてきようされる。また、2015ねんばんから2018ねんばんへはcargo fixでとらんすこんぱいるできる[91]。
2021ねんばん
2021ねん5がつ11にちに、3ねんぶりのかいていとなる2021ねんばんについてこうしき Blogへきさいがおこなわれた[92]。とうがいきのうは、2021ねん10がつ21にちにりりーすの1.56よりてきようされる。こんかいのしゅようなかいていは、れいがいしょりへのたいおうがきょうかされ、preludeぶんにTryIntoやTryFrom、FromIteratorなどがついかされる。しょうさいについては、こうしきBlogをさんしょうされたいが、こうほうごかんせいをいじしているため、2018ねんばんとのかんではとくにもんだいなくこんぱいるできる。
Source: https://ja.wikipedia.org/wiki/Rust_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E), Creative Commons Attribution-ShareAlike License 3.0