Google Chrome สู้กับ ads block อย่างหนัก
#siamstr
จริง ๆ ผมคิดว่ารอ L2 ของ Tezos แต่ถ้าทุกคนมา Lightning ก็ใข้ Lightning ก็ได้ 😅
#siamstr
นักวิชาการฝ่ายซ้ายท่านหนึ่งตั้งข้อสังเกตว่าการแจกเงินช่วงโควิดโดยรัฐบาลทรัมป์เป็นวิธีแบบคอมมิวนิสต์ทั้ง ๆ ที่รัฐบาลนั้นใครก็ทราบเป็นเสรีนิยมใหม่
หรือผมแปลผิดก็ไม่รู้นะ 🤦🏾
#siamstr
Lightning เอาไปใช้กับรัฐบาลแจกเงินได้เปล่า ? #siamstr
#nostr มีแมวคนไทยแล้ว 😍
Inkscape ออกรุ่น 1.3.2 ผมใช้ Inkscape วาดรูปแบบ vector ผมใช้เป็นหลักเลย ส่วนมากเอาไว้วาดประกอบลง blog
https://mastodon.art/@inkscape/111506443470645117
#siamstr
prescheme เป็นภาษา scheme แบบ static type เน้น ๆ และไม่ใช้ garbage collector ตอนนี้มี website แล้ว
ดู iQIYI ต่อไป
Lisp ที่ทำงานบน Linux kernel ตรง ๆ ไม่ต้องใช้กระทั่ง libc 😱
https://mastodon.social/@lisp_discussions/111356721625656479
Netflix 99 บาทดูบนทีวีได้เปล่า หรือเฉพาะ smartphone #siamstr
sat อ่านว่า .....
#siamstr
ขอบคุณครับ ผมเห็น NSFW แต่ผมไม่เข้าใจเองครับ แบบอยากเตือนรูปอาหาร หรือว่า spoil หนังมันก็ไม่ค่อยเกี่ยวอะไรกับ NSFW แต่ว่าไม่เป็นไร ใช้แทนกันได้
สมมุติว่ามีรูปอาหาร แต่อาหารนี่มัน NSFW เหรอ
Programming language หลายภาษาเขียนไปแล้วรันช้าเพราะ type checking
ไม่นับเรื่องใช้หรือไม่ใช้ garbage collection ไม่นับเรื่อง data structure พื้นฐานที่ไม่เหมือนกัน และไม่ได้เขียนเรื่อง compile หรือ interpret ผมสมมุติว่า compile ให้หมดเลยแล้วกันเพราะว่า mruby ก็ยัง compile ได้เลย ทำไม compile แล้วโปรแกรมไม่รันเร็วเท่าเขียน Go เป็นต้น
เมื่อเห็นโปรแกรมเท่านี้
a * b
หรือจะเขียนแบบ Lisp ก็ตามเหมือนกัน
(* a b)
แปลไปเป็น assembly สำหรับ 8088 + 8087 ก็แปลงไปเป็นคำสั่ง แน่ IMUL หรือ FMUL แต่ว่าไม่รู้ว่า type อะไร มันอาจจะเป็น string ก็ได้ อาจจะเป็น list ก็ได้ ก็ check type ก่อน แล้วก็กระโดดไปทำสิ่งที่ควรทำกับ type นั้น check type และกระโดดนี่มันช้ากว่า FMUL อีก โดยเฉพาะการกระโดด CPU ต้องเดาว่าจะข้ามไปทำคำสั่งต่อไปดีหรือเปล่า ซึ่งก็อาจจะเดาผิด ถ้า compiler รู้แต่แรกเลยว่าเป็น type อะไร โปรแกรมมันเร็วขึ้นเพราะไม่ต้องมา check type ตอนรัน
การที่จะรู้ type ได้ก็มีอยู่ 2 อย่าง คือโปรแกรมเมอร์เขียนบอกเองเลย เช่น
(declare (integer a b))
แบบข้างบน compiler เห็นก็เลือก IMUL ได้เลย เพราะรู้แล้วว่า a และ b เป็น integer หรือไม่ compiler ไปหาเอาซึ่งเรียกว่า type inference เช่น
บรรทัดก่อนหน้าเขียน
(setq a 10)
(setq b 20)
แบบนี้ก็รู้อยู่แล้วว่า 10 และ 20 มันเป็น integer แต่เวลาทำจริง ๆ มันก็จะซับซ้อนกว่านี้อีก
แต่บางทีโปรแกรมเมอร์ไม่ได้ประกาศ type รวมถึง inference เองก็ได้ แต่ละภาษาใช้วิธีไม่เหมือนกัน เช่น Go ก็จะไม่ compile บอกให้โปรแกรมเมอร์ไปใส่ type มาจน compiler พอใจ; Common Lisp ต่างออกไปคือ ถ้าไม่รู้ว่า type อะไรก็ compile อยู่ดีแล้วเดี๋ยวค่อยไป check type ตอนรันก็ได้
ทั้งหมดที่ว่ามายังไม่เกี่ยวกับ JIT compilation เลย แต่ความรู้เกี่ยว JIT compilation ของผมจำกัดมาก เคยอ่านแค่ของ Ruby ผ่าน ลักษณะการทำงานคือรันทีแรกก็ check type ไปก่อน ก็จะรู้ type แล้วตอนรันนั่นล่ะ พอรันซ้ำที่เดิมไป 10 ค่อย generate code แบบที่ไม่ต้อง check type ออกมา ทีนี้รอบต่อไปก็จะรันไวขึ้น ปัจจุบัน Ruby ใช้เทคนิค Basic Block Versioning ใน YJIT ซึ่งผมยังไม่ได้อ่านละเอียด
สำหรับคนที่เขียน Common Lisp อาจจะช่างหัว JIT compiler ไปเลยก็ได้ เพราะรู้อยู่แล้วว่าอยากให้ code ส่วน ไหนรันเร็ว ก็ให้ใส่ type เข้าไปตรงนั้น มันก็จะรันเร็วขึ้น ส่วนที่ไม่ได้อยาก optimize ก็แล้วแต่เหตุปัจจัยอื่น ๆ

