Created
November 19, 2016 23:13
-
-
Save bluss/8da7bbb160050299292ab19ed36424ed to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#![feature(test)] | |
extern crate test; | |
use test::{Bencher}; | |
/// Mask of the value bits of a continuation byte | |
const CONT_MASK: u8 = 0b0011_1111; | |
/// Value of the tag bits (tag mask is !CONT_MASK) of a continuation byte | |
const TAG_CONT_U8: u8 = 0b1000_0000; | |
/// Checks whether the byte is a UTF-8 continuation byte (i.e. starts with the | |
/// bits `10`). | |
#[inline] | |
fn utf8_is_cont_byte(byte: u8) -> bool { (byte & !CONT_MASK) == TAG_CONT_U8 } | |
fn cmov_count(s: &str) -> usize { | |
s.len() - cmov_count_continuation_bytes(s.as_bytes()) | |
} | |
fn cmov_count_continuation_bytes(s: &[u8]) -> usize { | |
let mut c = 0; | |
for &byte in s { | |
c += utf8_is_cont_byte(byte) as usize; | |
} | |
c | |
} | |
#[test] | |
fn test_count() { | |
assert_eq!(LONG.chars().count(), cmov_count(LONG)); | |
assert_eq!(LONG_CY.chars().count(), cmov_count(LONG_CY)); | |
assert_eq!(LONG_JP.chars().count(), cmov_count(LONG_JP)); | |
} | |
#[bench] | |
fn orig_count_ascii(b: &mut Bencher) { | |
//test_count(); | |
b.iter(|| LONG.chars().count()); | |
b.bytes = LONG.len() as u64; | |
} | |
#[bench] | |
fn orig_count_cy(b: &mut Bencher) { | |
b.iter(|| LONG_CY.chars().count()); | |
b.bytes = LONG_CY.len() as u64; | |
} | |
#[bench] | |
fn orig_count_jp(b: &mut Bencher) { | |
let text = LONG_JP; | |
b.iter(|| text.chars().count()); | |
b.bytes = text.len() as u64; | |
} | |
#[bench] | |
fn orig_count_words_ascii(b: &mut Bencher) { | |
let words = LONG.split_whitespace().map(String::from).collect::<Vec<_>>(); | |
b.iter(|| { | |
words.iter().map(|w| w.chars().count()).sum::<usize>() | |
}); | |
b.bytes = words.iter().map(|w| w.len() as u64).sum::<u64>() | |
} | |
#[bench] | |
fn orig_count_words_jp(b: &mut Bencher) { | |
let words = LONG_JP.split_whitespace().map(String::from).collect::<Vec<_>>(); | |
b.iter(|| { | |
words.iter().map(|w| w.chars().count()).sum::<usize>() | |
}); | |
b.bytes = words.iter().map(|w| w.len() as u64).sum::<u64>() | |
} | |
#[bench] | |
fn cmov_count_ascii(b: &mut Bencher) { | |
b.iter(|| cmov_count(LONG)); | |
b.bytes = LONG.len() as u64; | |
} | |
#[bench] | |
fn cmov_count_cy(b: &mut Bencher) { | |
b.iter(|| cmov_count(LONG_CY)); | |
b.bytes = LONG_CY.len() as u64; | |
} | |
#[bench] | |
fn cmov_count_jp(b: &mut Bencher) { | |
let text = LONG_JP; | |
b.iter(|| cmov_count(text)); | |
b.bytes = text.len() as u64; | |
} | |
#[bench] | |
fn cmov_count_words_ascii(b: &mut Bencher) { | |
let words = LONG.split_whitespace().map(String::from).collect::<Vec<_>>(); | |
b.iter(|| { | |
words.iter().map(|w| cmov_count(w)).sum::<usize>() | |
}); | |
b.bytes = words.iter().map(|w| w.len() as u64).sum::<u64>() | |
} | |
#[bench] | |
fn cmov_count_words_jp(b: &mut Bencher) { | |
let words = LONG_JP.split_whitespace().map(String::from).collect::<Vec<_>>(); | |
b.iter(|| { | |
words.iter().map(|w| cmov_count(w)).sum::<usize>() | |
}); | |
b.bytes = words.iter().map(|w| w.len() as u64).sum::<u64>() | |
} | |
static LONG: &'static str = "\ | |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \ | |
ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \ | |
eros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. Integer fringilla non \ | |
sem ut lacinia. Fusce varius tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec \ | |
tempus vel, gravida nec quam. | |
In est dui, tincidunt sed tempus interdum, adipiscing laoreet ante. Etiam tempor, tellus quis \ | |
sagittis interdum, nulla purus mattis sem, quis auctor erat odio ac tellus. In nec nunc sit amet \ | |
diam volutpat molestie at sed ipsum. Vestibulum laoreet consequat vulputate. Integer accumsan \ | |
lorem ac dignissim placerat. Suspendisse convallis faucibus lorem. Aliquam erat volutpat. In vel \ | |
eleifend felis. Sed suscipit nulla lorem, sed mollis est sollicitudin et. Nam fermentum egestas \ | |
interdum. Curabitur ut nisi justo. | |
Sed sollicitudin ipsum tellus, ut condimentum leo eleifend nec. Cras ut velit ante. Phasellus nec \ | |
mollis odio. Mauris molestie erat in arcu mattis, at aliquet dolor vehicula. Quisque malesuada \ | |
lectus sit amet nisi pretium, a condimentum ipsum porta. Morbi at dapibus diam. Praesent egestas \ | |
est sed risus elementum, eu rutrum metus ultrices. Etiam fermentum consectetur magna, id rutrum \ | |
felis accumsan a. Aliquam ut pellentesque libero. Sed mi nulla, lobortis eu tortor id, suscipit \ | |
ultricies neque. Morbi iaculis sit amet risus at iaculis. Praesent eget ligula quis turpis \ | |
feugiat suscipit vel non arcu. Interdum et malesuada fames ac ante ipsum primis in faucibus. \ | |
Aliquam sit amet placerat lorem. | |
Cras a lacus vel ante posuere elementum. Nunc est leo, bibendum ut facilisis vel, bibendum at \ | |
mauris. Nullam adipiscing diam vel odio ornare, luctus adipiscing mi luctus. Nulla facilisi. \ | |
Mauris adipiscing bibendum neque, quis adipiscing lectus tempus et. Sed feugiat erat et nisl \ | |
lobortis pharetra. Donec vitae erat enim. Nullam sit amet felis et quam lacinia tincidunt. Aliquam \ | |
suscipit dapibus urna. Sed volutpat urna in magna pulvinar volutpat. Phasellus nec tellus ac diam \ | |
cursus accumsan. | |
Nam lectus enim, dapibus non nisi tempor, consectetur convallis massa. Maecenas eleifend dictum \ | |
feugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, imperdiet id \ | |
vehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec mollis risus eu \ | |
leo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi euismod vehicula. Nulla \ | |
malesuada sollicitudin quam eu fermentum."; | |
static LONG_CY: &'static str = "\ | |
Брутэ дольорэ компрэхэнжам йн эжт, ючю коммюны дылыктуч эа, квюо льаорыыт вёвындо мэнандря экз. Ед ыюм емпыдит аккюсам, нык дйкит ютенам ад. Хаж аппэтырэ хонэзтатёз нэ. Ад мовэт путант юрбанйтаж вяш. | |
Коммодо квюальизквюэ абхоррэант нэ ыюм, праэчынт еракюндйа ылаборарэт эю мыа. Нэ квуым жюмо вольуптатибюж вяш, про ыт бонорюм вёвындо, мэя юллюм новум ку. Пропрёаы такематыш атоморюм зыд ан. Эи омнэжквюы оффекйяж компрэхэнжам жят, апыирёан конкыптам ёнкорруптэ ючю ыт. | |
Жят алёа лэгыры ед, эи мацим оффэндйт вим. Нык хёнк льаборэж йн, зыд прима тимэам ан. Векж нужквюам инимёкюж ты, ыам эа омнеж ырант рэформйданч. Эрож оффекйяж эю вэл. | |
Ад нам ножтрюд долорюм, еюж ут вэрыар эюрйпйдяч. Квюач аффэрт тинкидюнт про экз, дёкант вольуптатибюж ат зыд. Ыт зыд экшырки констятюам. Квюо квюиж юрбанйтаж ометтантур экз, хёз экз мютат граэкы рыкючабо, нэ прё пюрто элитр пэрпэтюа. Но квюандо минемум ыам. | |
Амэт лыгимуз ометтантур кюм ан. Витюпырата котёдиэквюэ нам эю, эю вокынт алёквюам льебэравичсы жят. Экз пыртенакж янтэрэсщэт инзтруктеор нам, еюж ад дйкит каючаэ, шэа витаэ конжтетуто ут. Квюач мандамюч кюм ат, но ёнкорруптэ рэформйданч ючю, незл либриз аюдирэ зыд эи. Ты эож аугюэ иреуры льюкяльиюч, мэль алььтыра докэндё омнэжквюы ат. Анёмал жямиляквюы аккоммодары ыам нэ, экз пэрчёус дэфянятйоныс квюо. Эи дуо фюгит маиорюм. | |
Эвэртё партйэндо пытынтёюм ыюм ан, шэа ку промпта квюаырэндум. Агам дикунт вим ку. Мюкиуж аюдиам тамквюам про ут, ку мыа квюод квюот эррэм, вяш ад номинави зючкёпит янжольэнж. Нык эи пожжёт путант эффякиантур. Ку еюж нощтыр контынтёонэж. Кюм йужто харюм ёужто ад, ыюм оратио квюоджё экз. | |
Чонэт факэтэ кюм ан, вэре факэр зальютатуж мэя но. Ыюм ут зальы эффикеэнди, экз про алиё конжыквуюнтюр. Квуй ыльит хабымуч ты, алёа омнэжквюы мандамюч шэа ыт, пльакырат аккюжамюз нэ мэль. Хаж нэ партым нюмквуам прёнкипыз, ат импэрдеэт форынчйбюж кончэктэтюыр шэа. Пльакырат рэформйданч эи векж, ючю дюиж фюйзчыт эи. | |
Экз квюо ажжюм аугюэ, ат нык мёнём анёмал кытэрож. Кюм выльёт эрюдитя эа. Йн порро малйж кончэктэтюыр хёз, жят кашы эрюдитя ат. Эа вяш мацим пыртенакж, но порро утамюр дяшзынтиыт кюм. Ыт мютат зючкёпит эож, нэ про еракюндйа котёдиэквюэ. Квуй лаудым плььатонэм ед, ку вим ножтрюм лаборамюз. | |
Вёжи янвыняры хаж ед, ты нолюёжжэ индоктум квуй. Квюач тебиквюэ ут жят, тальэ адхюк убяквюэ йн эож. Ыррор бландит вяш ан, ютроквюы нолюёжжэ констятюам йн ыюм, жят эи прима нобёз тхэопхражтуз. Ты дёкант дэльэнйт нолюёжжэ пэр, молыжтйаы модыратиюз интыллыгам ку мэль. | |
Ад ылаборарэт конжыквуюнтюр ентырпрытаряш прё, факэтэ лыгэндоч окюррырэт вим ад, элитр рэформйданч квуй ед. Жюмо зальы либриз мэя ты. Незл зюаз видишчы ан ыюм, но пожжэ молыжтйаы мэль. Фиэрэнт адипижкй ометтантур квюо экз. Ут мольлиз пырикюлёз квуй. Ыт квюиж граэко рыпудяары жят, вим магна обльйквюэ контынтёонэж эю, ты шэа эним компльыктётюр. | |
"; | |
static LONG_JP: &'static str = "\ | |
ウィキペディアは、ジンボ・ウェールズが2001年1月15日に個人的なプロジェクトとして開始しました。2003年6月以降は非営利団体であるウィキメディア財団によって運営されています。資金面ではウィキペディアは多くの方々からの寄付によって支えられています(wikimedia:寄付を参照)。 | |
ウィキペディアは現在、250を超える言語版で進行中です(Wikipedia:多言語プロジェクトとしてのウィキペディアを参照)。全言語版総計で既に2500万項目以上の記事が作成されています。 | |
ウィキペディア日本語版用のウィキは2001年5月頃に開設されましたが、当初はソフトウェアが日本語の文字に対応していなかったため、ローマ字で書かれていました。日本語版としての実質的な執筆・編集が開始されたのは、日本語の文字が使用できるようになった2002年9月以降のことです。現在では1,038,354項目の記事が作成されており、各言語版の中でも規模の大きいものの一つになっています。ウィキペディア日本語版の歩みについてはWikipedia:発表をご参照ください。 | |
ウィキペディアは誰もが無料で読むことができる百科事典です。それだけでなく、CC-BY-SA 3.0というコピーレフトなライセンス(GFDLのライセンスを合わせて適用することも出来ます)の条件に基づいて改変、複製などの2次的利用をすることもできます。執筆者の著作権を放棄しているわけではありませんが、記事をCC-BY-SA 3.0に基づいて改変することを認めているのです。 | |
記事の引用については、著作権が放棄されているわけではありませんので、著作権法の認める範囲で行うことができます。引用の範囲を超える二次的利用はCC-BY-SA 3.0の規定に従うことが求められます(詳しくはウィキペディアを引用するをご覧ください。) | |
このように、執筆者が投稿するテキストはすべて自由な改変を認めることを条件として投稿しているため、他の参加者が記事の内容をチェックし、次から次へと加筆・修正することができます。ですから、最初は質の低い記事であっても、将来的には質も量も史上最大の百科事典へと成長する可能性があるのです。 | |
ウィキペディア・プロジェクトにはたくさんの人たちが参加しています。記事の執筆・編集に関わるには特別な参加資格は必要ありません。方針とガイドラインを守っていただける方でしたら、誰でも参加できます(アカウントを取得することは推奨されますが、なくても参加できます。詳しくはHelp:ログインを参照)。 | |
プロジェクトの運営ルールは主に各言語版ごとに話し合いによって定められており、運営においては特に著作権侵害の問題が起きないよう厳しい注意が払われています。問題のある記事の削除などの作業は、参加者の中から立候補や推薦により選ばれた管理者が行っています。 | |
ウィキペディアは、誰もが編集に参加できるため、記事の信頼性が低いのではないかと批判されることもあります。こうした批判に対してはよくある批判への回答をご覧ください。 | |
"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment