Skip to content

Instantly share code, notes, and snippets.

@veer66
Last active November 22, 2015 16:11
Show Gist options
  • Save veer66/895c04528b2b7dccefaa to your computer and use it in GitHub Desktop.
Save veer66/895c04528b2b7dccefaa to your computer and use it in GitHub Desktop.

การปรับ Firefox Browser/OS ให้ใช้ได้กับภาษาไทย และ Rust

Firefox สมัยที่ยังตัดคำไม่ได้

(http://poonlap.blogspot.com/2005/01/firefox.html)

  • ท่าของที่สัพพันธ์
  • ท่าของพี่แบค

ท่าของป๋าเทพ ปี 2007

ตอนี้ที่แก้บน OS X กับ Windows มีมิตรสหายช่วยกันเขียน/build/test ร่วมสิบชีวิต

Bug ของ Firefox ที่ยังคาอยู่

Firefox OS bugs

การ build firefox OS

การ patch GAIA

  • Report bug ใน Bugzilla
  • Pull request ใน Github

Servo

  • ใช้ Rust
  • Parallel

Rust

  • เร็ว http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=gpp
  • อย่าลืม rustc -O หรือ cargo build --release ถ้าจะให้เร็ว
  • เน้นให้ compiler ตรวจข้อผิดพลาดให้ก่อน กัน pointer ไปชี้ผิดที่โดยไม่ได้ตั้งใจ

move semantics

เพื่อที่จะเลี่ยงการใช้ GC move semantics ถูกนำมาใช้แทน โดยบังคำให้ตัว object มีตัวแปรที่เป็นเจ้าของมันได้แค่ตัวเดียวเสมอ เวลาออกจาก scope แล้ว free ได้เลย ไม่ต้องเอา GC มาตรวจว่ามีตัวแปรอื่นชี้อยู่ที่ object เดียวกันหรือไม่

  • ใน C++ 2011 ก็มีคล้าย ๆ กันคือ unique_ptr
#include <iostream>
#include <memory>
#include <string>

int
main()
{
  std::unique_ptr<std::string> p_str0(new std::string("Hello!"));
  auto p_str1 = std::move(p_str0); // p_str0 ไม่ได้ชี้ที่ string "Hello!" อีกต่อไป (move)
  auto p_str2 = std::move(p_str1); // p_str2 ไม่ได้ชี้ที่ string "Hello!" อีกต่อไป (move)
  std::cout << *p_str2 << std::endl;
  p_str2.reset();
  return 0;
}

//  g++ -std=c++11 -Wall -g move_sem.cpp
  • ใน Rust เขียนแบบนี้
fn main() {
    let p0 = "Hello!".to_string();
    let p1 = p0; // p0 ไม่ได้ชี้ที่ string "Hello!" อีกต่อไป (move)
    let p2 = p1; // p1 ไม่ได้ชี้ที่ string "Hello!" อีกต่อไป (move)
    println!("{}", p2);
}
  • ส่วนต่างระหว่าง Rust กับ C++11

แต่ว่าต้องใช้เปลี่ยนเป็น println!("{}", p0); จะ compile ไม่ผ่าน แต่ถ้าทำแบบเดียวกันกับ C++ แล้ว compile แต่รันแล้ว segmentation fault

  • อื่น ๆ

จริง ๆ ยังเรื่อง borrow referencce และ Reference counting อีก แต่ว่ายังไม่เขียนถึง

Parallel

  • compiler ตรวจได้ว่าตรงไหนต้องใช้ Arc+Mutex
  • มี Channel เหมือน Go ด้วย

สุดท้ายฝาก Mozilla Thai Group ด้วยครับ https://www.facebook.com/groups/mozth/?fref=ts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment