A space to discuss and keep up software development and manage your software career
An inclusive community for gaming enthusiasts
News and discussion of science and technology such as AI, VR, cryptocurrency, quantum computing, and more.
From composing and gigging to gear, hot music takes, and everything in between.
Memes and software development shitposting
Discussing AI software development, and showing off what we're building.
Movie and TV enthusiasm, criticism and everything in-between.
Web design, graphic design and everything in-between
A community for makers, hobbyists, and professionals to discuss Arduino, Raspberry Pi, 3D printing, and much more.
For engineers building software at scale. We discuss architecture, cloud-native, and SRE—the hard-won lessons you can't just Google
Discussing the core forem open source software project — features, bugs, performance, self-hosting.
A collaborative community for all things Crypto—from Bitcoin to protocol development and DeFi to NFTs and market analysis.
ผมเข้าใจสิ่งที่พี่ตั้งใจจะสื่อนะครับ แต่ผมคิดว่าประโยคนี้อาจทำให้เข้าใจผิดได้ครับ
Elixir ที่มี Immutable data ให้ใช้ จะช่วยให้เราคิดในลักษณะ functional ได้ง่ายมาก
ผมคิดว่ามันไม่ใช่เพราะ immutable data ที่ทำให้เราคิดในลักษณะ functional ได้ง่าย ผมคิดว่าสิ่งที่ทำให้ Go คิดในลักษณะ functional ได้ยาก เป็นในเรื่องของ static typing หรือการไม่มี Generics มากกว่าหนะครับ
อ่อ ถ้างั้นให้ถือว่าเป็นความเห็นส่วนตัวก็ได้ครับ ผมคิดว่ามันบังคับให้คิดและทำออกมาได้ง่ายกว่าจริงๆ การที่ runtime environment ของภาษามีบังคับ immutable data แล้วตัว runtime เองจัดการพวกนี้ด้วย persistent data structure ให้ทำให้คนเขียนไม่ต้องกังวลว่าข้อมูลนั้นจะจัดเก็บแบบไหน จะเกิดการ copy กันจน memory ไม่พอหรือไม่ เราก็กลับมา focus แค่ว่า function เรารับ input อะไรแล้วจะ return output อะไรกลับออกไป
ส่วนภาษาที่ไม่มี runtime environment จัดการพวกนี้ให้ แม้จะมี immutable ให้ใช้อย่าง Rust ที่มี generic ด้วยนั้น ต้องอาศัย type reference เข้ามาช่วยอีกในการควบคุมว่าจะให้ mutate ข้อมูลของตัวแปรได้แค่ไหน อันนี้ผมเลยคิดว่า Generic ไม่ช่วยอะไรให้ผมคิดถึงการทำงานแบบ Functional แบบรับ input -> process -> return output ได้ง่ายๆ น่ะครับ อย่างมากถือทำให้ผม abstract type ออกมาให้มัน generic แล้ว reuse ได้ง่ายขึ้นนั่นเอง
ตามแนวคิดทั่วไปผมเห็นด้วยเลยครับว่า immutable data จำเป็นต่อการเขียนโปรแกรมแบบ functional มากๆ
แต่ในตัวอย่างในโพสนี้ เราสามารถเขียนโปรแกรมด้วยแนวคิด functional ในภาษาที่ไม่ต้องมี immutable data จาก runtime ก็ได้ อย่างเช่นใช้ map ของ Ruby หรือ JavaScript อะครับ การที่เราต้องเขียนโค้ด Go ออกมาแบบนั้น มันไม่ใช่เพราะ Go ไม่มี immutable data จาก runtime อะครับ
เห็นด้วยว่าไม่ต้องมี immutable data หรือ persistent data structure มาให้เอง ก็เขียนได้ อันนี้ผมก็ไม่ได้ติดอะไรครับ แต่นั่นก็คือทำให้มีภาระต้องทำเองเช่นของ Go ต้อง copy slice ทั้งก้อนเองก่อนแก้ไขแล้วค่อย return ก้อนใหม่กลับออกไป คือไม่ต้องมีระดับ runtime ก็ได้ครับ ขอแค่มีตัวช่วยเรื่อง immutable ซึ่ง library ของ Ruby และ JavaScript นั้นมี เคส Ruby มีใน standard library พวก Enum ที่มี method ให้ทั้งแบบ return ค่าใหม่ และแบบ mutate จากตัวแปรเดิม ส่วนของ Javascript นั้นมีทั้งแบบสร้างภาษาใหม่แล้วแปลงเป็น Javascript หรือสร้าง Immutable library ขึ้นมาจัดการ persistent data structure ให้อีกรอบนึงโดยที่ไม่ต้องพึ่ง runtime
สรุปคือไม่ว่าจะมีการจัดการ immutable ให้ผ่าน runtime หรือ library ถ้ามีมาให้ก็ช่วยให้เขียนได้ง่ายกว่าไม่มีครับ กับ Go ก็ทำได้แต่แค่มันไม่ง่ายต้องนั่ง copy เองก่อนตอนนี้น่ะครับถ้าอยากได้แบบส่ง slice มา ไม่แก้ไขมันแล้ว return ของใหม่
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
ผมเข้าใจสิ่งที่พี่ตั้งใจจะสื่อนะครับ แต่ผมคิดว่าประโยคนี้อาจทำให้เข้าใจผิดได้ครับ
ผมคิดว่ามันไม่ใช่เพราะ immutable data ที่ทำให้เราคิดในลักษณะ functional ได้ง่าย ผมคิดว่าสิ่งที่ทำให้ Go คิดในลักษณะ functional ได้ยาก เป็นในเรื่องของ static typing หรือการไม่มี Generics มากกว่าหนะครับ
อ่อ ถ้างั้นให้ถือว่าเป็นความเห็นส่วนตัวก็ได้ครับ ผมคิดว่ามันบังคับให้คิดและทำออกมาได้ง่ายกว่าจริงๆ การที่ runtime environment ของภาษามีบังคับ immutable data แล้วตัว runtime เองจัดการพวกนี้ด้วย persistent data structure ให้ทำให้คนเขียนไม่ต้องกังวลว่าข้อมูลนั้นจะจัดเก็บแบบไหน จะเกิดการ copy กันจน memory ไม่พอหรือไม่ เราก็กลับมา focus แค่ว่า function เรารับ input อะไรแล้วจะ return output อะไรกลับออกไป
ส่วนภาษาที่ไม่มี runtime environment จัดการพวกนี้ให้ แม้จะมี immutable ให้ใช้อย่าง Rust ที่มี generic ด้วยนั้น ต้องอาศัย type reference เข้ามาช่วยอีกในการควบคุมว่าจะให้ mutate ข้อมูลของตัวแปรได้แค่ไหน อันนี้ผมเลยคิดว่า Generic ไม่ช่วยอะไรให้ผมคิดถึงการทำงานแบบ Functional แบบรับ input -> process -> return output ได้ง่ายๆ น่ะครับ อย่างมากถือทำให้ผม abstract type ออกมาให้มัน generic แล้ว reuse ได้ง่ายขึ้นนั่นเอง
ตามแนวคิดทั่วไปผมเห็นด้วยเลยครับว่า immutable data จำเป็นต่อการเขียนโปรแกรมแบบ functional มากๆ
แต่ในตัวอย่างในโพสนี้ เราสามารถเขียนโปรแกรมด้วยแนวคิด functional ในภาษาที่ไม่ต้องมี immutable data จาก runtime ก็ได้ อย่างเช่นใช้ map ของ Ruby หรือ JavaScript อะครับ การที่เราต้องเขียนโค้ด Go ออกมาแบบนั้น มันไม่ใช่เพราะ Go ไม่มี immutable data จาก runtime อะครับ
เห็นด้วยว่าไม่ต้องมี immutable data หรือ persistent data structure มาให้เอง ก็เขียนได้ อันนี้ผมก็ไม่ได้ติดอะไรครับ แต่นั่นก็คือทำให้มีภาระต้องทำเองเช่นของ Go ต้อง copy slice ทั้งก้อนเองก่อนแก้ไขแล้วค่อย return ก้อนใหม่กลับออกไป คือไม่ต้องมีระดับ runtime ก็ได้ครับ ขอแค่มีตัวช่วยเรื่อง immutable ซึ่ง library ของ Ruby และ JavaScript นั้นมี เคส Ruby มีใน standard library พวก Enum ที่มี method ให้ทั้งแบบ return ค่าใหม่ และแบบ mutate จากตัวแปรเดิม ส่วนของ Javascript นั้นมีทั้งแบบสร้างภาษาใหม่แล้วแปลงเป็น Javascript หรือสร้าง Immutable library ขึ้นมาจัดการ persistent data structure ให้อีกรอบนึงโดยที่ไม่ต้องพึ่ง runtime
สรุปคือไม่ว่าจะมีการจัดการ immutable ให้ผ่าน runtime หรือ library ถ้ามีมาให้ก็ช่วยให้เขียนได้ง่ายกว่าไม่มีครับ กับ Go ก็ทำได้แต่แค่มันไม่ง่ายต้องนั่ง copy เองก่อนตอนนี้น่ะครับถ้าอยากได้แบบส่ง slice มา ไม่แก้ไขมันแล้ว return ของใหม่