<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Compiler &#8211; PARINYA.NET</title>
	<atom:link href="https://www.parinya.net/node/tag/compiler/feed" rel="self" type="application/rss+xml" />
	<link>https://www.parinya.net</link>
	<description>ทฤษฎีการคำนวณสำหรับคอมพิวเตอร์และทฤษฎีการประมวลผลสารสนเทศ</description>
	<lastBuildDate>Sat, 12 Mar 2016 08:20:03 +0000</lastBuildDate>
	<language>th</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>
	<item>
		<title>กระบวนการแปลภาษาทางคอมพิวเตอร์</title>
		<link>https://www.parinya.net/node/2302</link>
					<comments>https://www.parinya.net/node/2302#respond</comments>
		
		<dc:creator><![CDATA[ไท้ ปริญญา]]></dc:creator>
		<pubDate>Sat, 12 Mar 2016 08:20:03 +0000</pubDate>
				<category><![CDATA[Compiler]]></category>
		<category><![CDATA[Feature]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[กระบวนการ]]></category>
		<category><![CDATA[คอมไพเลอร์]]></category>
		<guid isPermaLink="false">http://www.parinya.net/?p=2302</guid>

					<description><![CDATA[หลายวันก่อนอ่านในกระทู้พั]]></description>
										<content:encoded><![CDATA[<p>หลายวันก่อนอ่านในกระทู้พันทิป เหมือนมีคนมาตั้งกระทู้ถามว่า กระบวนการแปลภาษาทางคอมพิวเตอร์มันเป็นยังไง แบบว่าไม่เข้าใจ อะไรประมาณนั้น ซึ่งผมมองว่าเป็นคำถามที่ดี เพราะแสดงว่าเขากำลังสนใจวัตถุประสงค์ของการแปลภาษาทางคอมพิวเตอร์ มากกว่าสนใจในภาษาคอมพิวเตอร์ชั้นสูง ซึ่งมีออกมาใหม่ ๆ กันมากมายหลายภาษาซะเหลือเกิน</p>
<p>ผมคิดว่าคนที่ตั้งกระทู้ถาม น่าจะเป็นคนรุ่นใหม่ ผมเองเห็นใจคนรุ่นใหม่มาก เพราะพวกเขาอยู่ในยุคสมัยที่ช่องว่างระหว่างเทคโนโลยีต้นน้ำกับเทคโนโลยีปลายน้ำมันห่างออกไปทุกที พวกเขากำลังถูกผลักให้กลายเป็นผู้ใช้งาน มากกว่าเป็นผู้คิดค้นวิจัยพัฒนา พวกเขาถูกสิ่งกีดกันที่เรียกว่าเวลาในการเรียนรู้มาขวางทางเขาเอาไว้ พวกเขาต้องมีเวลามากพอในการเรียนรู้ย้อนกลับจากเทคโนโลยีปลายน้ำไปหาเทคโนโลยีต้นน้ำ เพื่อทำความเข้าใจที่มาที่ไป เพื่อจะได้สร้างเทคโนโลยีปลายน้ำใหม่ ๆ หรือตั้งต้นสร้างเทคโนโลยีต้นน้ำใหม่ได้</p>
<p>เมืองไทยเรานับคนได้เลย ที่คิดจะคิดภาษาคอมพิวเตอร์ชั้นสูง ผมเคยเห็นมีอยู่คนนึงนานแล้ว ชื่อ อาจหาญ สัตยารักษ์ เคยคิดค้นภาษาคอมพิวเตอร์ที่มีไวยากรณ์เป็นภาษาไทย จุดประสงค์เพื่อสั่งให้คอมพิวเตอร์รับข้อมูลเข้าเป็นภาษาไทย และแสดงผลเป็นภาษาไทยได้ แต่เรื่องมันก็นานมาแล้ว ภาษาคอมพิวเตอร์นี้ก็ถูกลืมเลือนหายไป</p>
<p>จริง ๆ แล้วภาษาคอมพิวเตอร์เป็นสินค้าแฟชั่นนะครับ มันมักจะมีดีของมันตามยุคตามสมัย บ้างก็ดีเพราะไวยากรณ์ของมันทำให้คนเขียนโปรแกรมชีวิตดี๊ดี บ้างก็ดีเพราะพอแปลเป็นภาษาเครื่องแล้วมันมีขนาดเล็กกระทัดรัดทำงานเร็วจี๊ด</p>
<p>โดยองค์ประกอบหลัก ๆ ของการเกิดขึ้นและตั้งอยู่ของภาษาทางคอมพิวเตอร์ก็มีอยู่ 2 ประการคือ หนึ่งไวยากรณ์ของภาษา และ สองโปรแกรมที่จะแปลไวยากรณ์ของภาษาให้เป็นภาษาเครื่อง</p>
<p>เห็นมั้ยครับ? จริง ๆ ไม่มีอะไรเลย แค่คิดค้นภาษาและตัวแปลมันเท่านั้นเอง และส่วนใหญ่คนหรือกลุ่มคนที่คิดค้นภาษาทางคอมพิวเตอร์ใหม่ ๆ ก็มักจะต้องรับผิดชอบในการสร้างโปรแกรมเพื่อแปลภาษาที่คิดค้นให้เป็นภาษาเครื่องด้วย อันนี้เป็นข้อเท็จจริง ใครคิดคนนั้นทำ</p>
<p>งั้นเรามาสมมติว่าเราเป็นผู้ที่สามารถคิดค้นหน่วยประมวลผลแบบดิจิทัลขนาดเล็กที่ใช้พลังงานน้อย มีพื้นที่จัดเก็บข้อมูลและชุดคำสั่งขนาดเล็กแต่ความจุสูง และสามารถป้อนชุดคำสั่งได้ 3,000 ชุดคำสั่งใน 1 วินาที โดยหน่วยประมวลผลถูกติดตั้งอยู่ในหุ่นยนต์สูง 50 เซ็นติเมตร มีกำลัง 1 แรงม้า นะครับ</p>
<p>และสมมติว่าหน่วยประมวลผลที่คิดค้นขึ้น มันรู้จักชุดคำสั่งภาษาเครื่องหลายร้อยคำสั่งเลยนะครับ ดังนั้น เริ่มแรกถ้าเราจะสั่งให้มันทำงาน สมมติว่าจะสั่งให้หุ่นยนต์กระพริบตา เราก็ต้องสั่งมันด้วยภาษาเครื่องถูกมั้ยครับ ตามรูปข้างล่างนี้</p>
<figure id="attachment_2306" aria-describedby="caption-attachment-2306" style="width: 721px" class="wp-caption aligncenter"><a href="https://www.parinya.net/wp-content/uploads/2016/03/compiler1.png" rel="attachment wp-att-2306"><img fetchpriority="high" decoding="async" class="size-full wp-image-2306" src="https://www.parinya.net/wp-content/uploads/2016/03/compiler1.png" alt="สั่งเครื่องจักรด้วยภาษาเครื่อง" width="721" height="309" srcset="https://www.parinya.net/wp-content/uploads/2016/03/compiler1.png 721w, https://www.parinya.net/wp-content/uploads/2016/03/compiler1-300x129.png 300w" sizes="(max-width: 721px) 100vw, 721px" /></a><figcaption id="caption-attachment-2306" class="wp-caption-text">สั่งเครื่องจักรด้วยภาษาเครื่อง</figcaption></figure>
<p>ดิบมากครับ ถ้าเราสั่งให้หุ่นยนต์กระพริบตา เราก็คงต้องใช้ภาษาเครื่องหลาย ๆ บรรทัด ค่อย ๆ สั่งคำนวณบวกลบคูณหาร สั่งย้ายค่าเข้าออกที่เก็บข้อมูล สั่งให้ทดสัญญาณดิจิทัล เพื่อเพิ่มลดกระแสไฟฟ้า เพิ่มลดความต้านทานไฟฟ้า เพิ่มลดแรงดันไฟฟ้า วนรอบรอจังหวะ บลา ๆ ๆ กว่าจะสั่งให้หุ่นยนต์กระพริบตาสำเร็จหนึ่งที</p>
<p>มันด้อยประสิทธิภาพมากเลยใช่มั้ยครับ คนที่จะสั่งเครื่องจักรก็ต้องเหนื่อยน่าดู กว่าจะเขียนคำสั่งจำนวนหลาย ๆ บรรทัด โดยจะต้องจดจำคำสั่งภาษาเครื่อง หรือดีหน่อยก็ชำเลืองมองคู่มือภาษาเครื่องไปพลาง เขียนคำสั่งไปพลาง เพื่อสั่งให้เครื่องจักรทำงานให้ ซึ่งได้ผลนิดเดียว!</p>
<p>ทีนี้เพื่อความง่ายขึ้น เราก็น่าจะเพิ่มประสิทธิภาพ โดยการคิดค้นภาษาระดับล่างขึ้นมา เพื่อทดแทนภาษาเครื่องดีกว่า ซึ่งองค์ประกอบมันก็ต้องมี 2 อย่างแบบที่บอกไว้ คือ ต้องมีไวยากรณ์ และต้องมีตัวแปลภาษา ดังนั้น ก็ต้องคิดค้นไวยากรณ์ขึ้นมา จากนั้นก็ใช้ภาษาเครื่องที่มีนั่นแหล่ะครับ มาสร้างตัวแปลภาษา เพื่อแปลภาษาระดับล่าง ให้กลายเป็นภาษาเครื่อง แล้วก็เอาไปสั่งเครื่องจักรให้มันทำงานต่อไปได้</p>
<p>ดังนั้น ด้วยการเสียสละเวลาเพื่อคิดค้นพัฒนา ก็จะทำให้การสั่งเครื่องจักรในครั้งต่อ ๆ ไป ไม่ต้องใช้ภาษาเครื่อง แต่ใช้ภาษาระดับล่างแทน ดังรูปด้านล่าง</p>
<figure id="attachment_2307" aria-describedby="caption-attachment-2307" style="width: 848px" class="wp-caption aligncenter"><a href="https://www.parinya.net/wp-content/uploads/2016/03/compiler2.png" rel="attachment wp-att-2307"><img decoding="async" class="size-full wp-image-2307" src="https://www.parinya.net/wp-content/uploads/2016/03/compiler2.png" alt="การแปลภาษาเครื่องให้เป็นภาษาระดับล่าง" width="848" height="557" srcset="https://www.parinya.net/wp-content/uploads/2016/03/compiler2.png 848w, https://www.parinya.net/wp-content/uploads/2016/03/compiler2-300x197.png 300w, https://www.parinya.net/wp-content/uploads/2016/03/compiler2-768x504.png 768w" sizes="(max-width: 848px) 100vw, 848px" /></a><figcaption id="caption-attachment-2307" class="wp-caption-text">การแปลภาษาเครื่องให้เป็นภาษาระดับล่าง</figcaption></figure>
<p>แบบนี้คือชีวิตดีขึ้นมั้ย? ก็ยังไม่ได้ดีขึ้นอะไรมากมายครับ เพราะภาษาระดับล่าง ยังไงก็ทำงานแบบ 1 ต่อ 1 กับภาษาเครื่องอยู่แล้ว มันไม่ได้ช่วยทำให้เขียนน้อยลง แต่มันช่วยเรื่องไวยากรณ์ จากเดิมที่เคยต้องเขียนสั่งด้วยภาษาเครื่องที่เป็นเลขฐานสอง ก็เปลี่ยนมาเป็นภาษาระดับล่างซึ่งมีคำสั่งแบบข้อความสั้น ๆ หรือคำย่อแทน</p>
<p>คนเรามักจะคิดคล้าย ๆ กันครับ คือถ้าสั่งอะไรให้ใครทำ ก็หวังจะสั่งด้วยคำสั่งที่ง่าย ๆ และสั่งแค่คำสั่งไม่กี่คำสั่ง ที่เหลือก็ให้ไปคิดเองว่าจะต้องไปทำอะไรบ้าง ดังนั้น ถ้าเราคิดจะสั่งให้หุ่นยนต์กระพริบตา จะดีกว่ามั้ยถ้าไม่ต้องมาเขียนภาษาเครื่องหลาย ๆ บรรทัด หรือเขียนภาษาระดับล่าง ๆ หลาย ๆ บรรทัดเพื่อสั่งมัน?</p>
<p>งั้นเรามาคิดค้นภาษาระดับสูงกันดีกว่า ซึ่งจะมีความยากขึ้นทั้งการออกแบบไวยากรณ์และการสร้างตัวแปลภาษา แต่พอทำสำเร็จชีวิตเราจะดีขึ้นเพราะในการสั่งงานเครื่องจักรครั้งถัด ๆ ไป แทนที่เราจะต้องเขียนภาษาระดับล่างเพื่อสั่งเครื่องจักร ก็เปลี่ยนเป็นเขียนด้วยภาษาระดับสูงเพื่อสั่งเครื่องจักรแทน</p>
<p>และเนื่องจากเราเคยสร้างภาษาระดับล่างไว้แล้ว มันก็จะเป็นการลดขั้นตอนในการสร้างตัวแปลภาษา เพราะแทนที่เราจะต้องเขียนตัวแปลภาษาด้วยภาษาเครื่อง เพื่อแปลภาษาระดับสูงให้เป็นภาษาเครื่อง เราก็เปลี่ยนเป็นเขียนตัวแปลภาษาด้วยภาษาระดับล่าง เพื่อแปลภาษาระดับสูงเป็นภาษาเครื่องแทน เบาแรงขึ้นเยอะ ดังรูปด้านล่างนี้</p>
<figure id="attachment_2308" aria-describedby="caption-attachment-2308" style="width: 868px" class="wp-caption aligncenter"><a href="https://www.parinya.net/wp-content/uploads/2016/03/compiler3.png" rel="attachment wp-att-2308"><img decoding="async" class="size-full wp-image-2308" src="https://www.parinya.net/wp-content/uploads/2016/03/compiler3.png" alt="การแปลภาษาระดับสูงเป็นภาษาเครื่อง" width="868" height="752" srcset="https://www.parinya.net/wp-content/uploads/2016/03/compiler3.png 868w, https://www.parinya.net/wp-content/uploads/2016/03/compiler3-300x260.png 300w, https://www.parinya.net/wp-content/uploads/2016/03/compiler3-768x665.png 768w" sizes="(max-width: 868px) 100vw, 868px" /></a><figcaption id="caption-attachment-2308" class="wp-caption-text">การแปลภาษาระดับสูงเป็นภาษาเครื่อง</figcaption></figure>
<p>พอมาถึงตรงนี้จะเริ่มงงล่ะ ไอ้นั่นแปลเป็นไอ้นี่ ไอ้นี่แปลเป็นไอ้นั่น อย่าไปงงครับ จริง ๆ แล้วหลักการมันไม่มีอะไรมาก มันคือการสร้างเครื่องมือ เพื่อเอาไปสร้างเครื่องมือ ต่อ ๆ ไปเรื่อย ๆ ครับ โดยเครื่องมือที่ถูกสร้างในแต่ล่ะขั้นตอน ก็อาจจะเอาไปสร้างอย่างอื่นที่ไม่ใช่เครื่องมือ อะไรประมาณนั้น</p>
<p>จะเห็นว่าด้วยกระบวนการแบบนี้ เราก็จะสามารถสร้างภาษาชั้นสูงให้มันสูงขึ้นไปได้เรื่อย ๆ สร้างให้มันมีไวยากรณ์เข้าใกล้ภาษามนุษย์ไปเรื่อย ๆ จนอาจจะเปลี่ยนจากภาษาไปเป็นอย่างอื่นที่ไม่ใช่ภาษาเพื่อสั่งงานเครื่องจักรก็ได้</p>
<p>จากที่อธิบายและสมมติให้ดู ก็สามารถย้ำได้อีกครั้งนะครับว่า จริง ๆ แล้วกระบวนการแปลภาษาทางคอมพิวเตอร์ มันเกี่ยวกับ ไวยากรณ์ของภาษา และ ตัวแปลภาษา เท่านั้นเอง ดังนั้น ถ้าจากตัวอย่างข้างบน เรากำหนดให้ไวยากรณ์ของภาษาระดับล่างคือภาษาแอสเซมบลี้ และภาษาระดับสูงคือภาษาซี งั้นเพื่อจะสั่งหุ่นยนต์ให้กระพริบตา เราก็ทำแค่ตัวแปลภาษาก็พอ ไม่ต้องมาเมื่อยตุ้มคิดค้นไวยากรณ์ของภาษาเอง เป็นการทุ่นแรงลงไปอีกต่อหนึ่ง เพราะงานแบบนี้มันเป็นการทำเพราะความจำเป็นไม่ใช่ทำเพราะแฟชั่น</p>
<p>แต่ถ้าเราจะสร้างภาษาระดับสูงด้วยเหตุผลทางแฟชั่น อันนี้ก็ต้องคิดค้นไวยากรณ์ขึ้นมาใหม่ และรับผิดชอบสร้างตัวแปลภาษาเองครับ ซึ่งแฟชั่นที่ว่าก็เช่น ถ้าช่วงนี้ใคร ๆ ก็อยากจะสั่งเครื่องจักรให้ทำงานด้าน Machine Learning หรือ Data Mining หรือ Data Science หรือ 3D Printing และภาษาชั้นสูงที่มีในปัจจุบัน มันไม่เอื้อต่องานด้านนี้ ก็สามารถสร้างกันขึ้นมาใหม่ได้ครับ ตามแฟชั่นกันไป</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.parinya.net/node/2302/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
