Posts

Showing posts with the label compile

Compile C Family Language using Clang (Front-end for LLVM)

Image
สำหรับคนที่ใช้ Command Line Interface (Terminal, DOS) ในการ Compile code นั้น ผมเคยเขียนไว้แล้ว Blog หนึ่งคืออันนี้ http://www.macbaszii.com/2012/01/command-line-compiling-cc-java-windows.html ซึ่งตอนนั้นเราใช้ gcc, g++ (GNU Compiler Collection) ในการ Compile C/C++ วันนี้ผมจะมาแนะนำ Compiler ตัวใหม่ ซึ่งติดมากับ Mac OS X รุ่นใหม่ๆ ถ้าเราลง Xcode นะครับ เนื่องจากการพัฒนา Mac, iOS ณ ตอนนี้จะใช้ Compiler ตัวนี้เป็น Front-end ให้ LLVM Compiler LLVM ใช้แนวคิดแบบเวอร์ชวลแมชีนกับการคอมไพล์โปรแกรม โดยมันจะแปลงภาษาโปรแกรมที่เราคุ้นกันดีมาอยู่ในรูป intermediate form หรือ IF (คล้ายกับ Bytecode ของ Java หรือ CIL ของ .NET) จากนั้นค่อยแปลง IF เป็นภาษาเครื่องอีกทีหนึ่ง แนวทางของ LLVM ช่วยให้การรีดประสิทธิภาพทำได้ง่ายขึ้น เพราะนักพัฒนาของ LLVM สามารถเน้นไปที่การแปลง IF เป็นภาษาเครื่องเพียงขั้นตอนเดียว ส่วนการแปลงภาษาโปรแกรมเป็น IF จะใช้โค้ดอีกส่วนที่เรียกว่า front end ซึ่งรองรับภาษาที่แตกต่างกันไป (front end หลักของ LLVM สำหรับภาษา C/C++/Objective-C มีชื่อว่า  Clang ) จุดเด่นขอ...

How to build Textmate 2 [Mac OS X]

Image
ลง Xcode 4.4+ และ Command Line Tools ก่อนครับ :) เพราะการ Compile source ต้องใช้ clang และ make ด้วย จากนั้นก็ลง Homebrew เพื่อมาลง Dependency ต่างๆ ครับ (MacPorts ก็ได้นะ แต่ผมใช้ brew) $ /usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)" ** ใครใช้ Homebrew อยู่แล้ว อย่าลืมสั่ง brew update สักครั้งก่อนนะครับ ...  จากนั้นก็ถึงเวลาลง Dependency แล้วครับ  $ brew install ragel boost multimarkdown hg ninja proctools ninja -- build system similar to make ragel -- state machine compiler boost -- C++ boost library multimarkdown -- marked-up plain text compiler และเนื่องจาก Source ของ Textmate 2 อยู่ภายใต้ Github.com  ก็ต้องลง Git ด้วยนะ  $ brew install git พอเรียบร้อยหมดแล้ว ก็มาลง Textmate 2 กันตามนี้เลย ... Compile $ git clone https://github.com/textmate/textmate.git $ cd textmate $ git submodule update --init $ ./configure && ninja ...

Skill เบื้องต้นของ Programmer ตอนที่ 2: Read Error Message

Image
อ่าน Error Message ให้ออก แล้วลองแก้ปัญหาตามที่เขาบอกเรา Error Message จาก Syntax Error [ประสบการณ์จากการเป็นพี่คุม Lab โดนเรียกถามบ่อยมาก ผลคือ เด็กไม่อ่านกัน จ้องจะถามอย่างเดียว] เราจะเห็นได้ว่า มันเป็นแค่ ภาษาอังกฤษที่อ่านไม่ยากเท่าไรเ ลยนะ ส่วนใหญ่จะบอกบรรทัดที่ Error ด้วย (ควรจะเปิด Line Number ของ Text Editor) แต่บางทีก็ไม่เป๊ะหรอกนะ ให้มองสัก -2 บรรทัดที่มันบอกว่า Error จะดีมาก (กรณีใน Lab ที่ม. ล่ะ เพราะใช้ GCC Compiler เป็นหลัก) ลองหัดอ่านกันดูนะ ... มันไม่ได้ยากอะไรหรอก ช่วยให้แก้ปัญหาได้อย่างรวดเร็ว ด้วย ส่วนใหญ่ไม่อ่านกัน ... แต่ถ้าเป็น Error Message ที่ไม่เคยเห็นจริงๆ ล่ะก็ ... วิธีที่ดีที่สุดคือ "copy Error Message and Paste to http://www.google.com/ " :P ดูตัวอย่างกัน !! ขอเทียบ Error Message ระหว่าง GCC Compiler กับ Clang (LLVM Front End of C/C++/Objective-C) จากภาพ Compile ครั้งแรก (gcc even_odd.cpp, clang even_odd.cpp) จะเห็นว่า GCC บอกว่า เราลืม ; ก่อนคำสั่ง return ซึ่งอาจจะต้องกวาดสายตาดูบรรทัด ด้านบน แต่ถ้าใช้ Clang จะเห็นว่า มันบอกเราโจ้งๆ เลยว่า ตร...

Command Line Argument in C/C++

Image
ไม่ได้อัพ Blog มาสักพักเลยนะครับ ช่วงนี้ช่วงสอบ วันนี้สอบตัวหนักๆ เสร็จ พักสมองด้วยการเขียนเรื่องที่อยากเขียนมาสักพักหนึ่งแล้ว เราจะมาว่ากันเรื่อง Command Line Argument in C/C++ ซึ่งเวลาเขียนภาษา C/C++ เรามักจะชินกับ โครงสร้างแบบนี้ C++ Language C Language ซึ่งการเขียนโครงสร้างแบบนี้ ถ้าทำให้ไม่สามารถรับ Command Line Argument ได้ ตรงตัวครับ Command Line Argument คือ "Argument (สิ่งที่ส่งไปให้ฟังก์ชั่น) จาก Command Line" ซึ่งการจะทำแบบนี้ อย่างแรกเลยคือ "เราต้อง Compile โปรแกรมของเราผ่าน Command Line ให้ได้เสียก่อน" ซึ่งผมเขียน Blog ก่อนหน้านี้ เกี่ยวกับวิธีการทำไว้แล้วครับ http://macbaszii.blogspot.com/2012/01/command-line-compiling-cc-java-windows.html (พวก Codeblocks หรือโปรแกรม Code Editor อื่นๆ ก็เห็นว่าทำได้นะครับ แต่ผมทำไม่เป็น :P) ว่ากันต่อ ต่อไปเวลาเขียนโครงสร้างของโปรแกรม ก็จะเขียนในรูปแบบนี้นะครับ (C/C++ เขียนเหมือนกัน) โดย (int)argc (Argument Count) คือ จำนวนของ Argument ที่รับเข้ามา และ (char **)argv (Argument Value) คือ ค...

Command Line Compiling C/C++ ,Java [Windows, Mac]

Image
ผมเขียน Blog นี้เพราะน้องในคณะให้มาสอนเรื่อง Command Line Argument  และผมทำกับ Editor สำเร็จรูปพวกนั้นไม่เป็น ก็ Command Line Argument นี่นา ก็ต้องใส่ผ่าน Command Line สิ มันถึงจะ make sense ขอพูดถึงฝั่ง Mac ก่อนนะครับ เพราะมันง่ายกว่า... ทางฝั่ง Mac นั้น เพียงลง Xcode [Developer Tools] ก็เพียงพอแล้ว  สามารถโหลดได้ฟรีจาก Mac App Store ณ ปัจจุบันเป็นเวอร์ชั่น 4.2 จากนั้นให้เปิด Terminal ขึ้นมา แล้วไปที่ที่ ไฟล์ที่เราต้องการ  แล้วใช้คำสั่งตามนี้ครับ  C Compile: gcc filename.c  Run: ./a.out หรือ Compile: gcc filename.c -o exefilename Run: ./exefilename C++   Compile: g++ filename.cpp Run: ./a.out หรือ  Compile: g++ filename.cpp -o exefilename Run: ./exefilename ตัวอย่างการ Compile C++ : Balance Parentheses using Stack Java Compile: javac filename.java Run: java filename ตัวอย่างการ Compile ภาษา Java: Random Number สำหรับภาษา Java นั้นทั้ง Mac และ Windows ใช้คำสั่งเดียวกันเลยค...