TGViewer
کدهک کدهک @codehaks · 1.78K subscribers
Post #1441 1.74K

Forwarded from Software Philosophy (mohsen)

بالاخره golang هم generic دار شد!

طبق این پروپوزال، امکان استفاده از generic به نسخه Go 1.18 اضافه می‌شود و در سال 2022 منتشر خواهد شد. اما نکته جالب در مورد تغییر این است بر خلاف بیشتر زبان‌ها که مفهوم جنریک با
Foo<T>
نماش داده می‌شود، در Go این مفهوم به صورت
Foo[T]

نمایش داده خواهد شد و برای این تصمیم هم دلیل جالبی وجود دارد که در این مستند توضیح داده شده‌است.

نکته جالب‌تر این است که این چالش هنگامی که Generic به زبان C# در نسخه 2.0 هم اضافه شد وجود داشت و باعث ایجاد یک Breaking Change از نسخه 1.0 به نسخه 2.0 شد. در این پست سعی می‌کنم این مشکل را با یک مثال از توییتی که Eric Lippert در این مورد زده توضیح بدم.

عبارت زیر را در نظر بگیرید:
A(B<C,D>E())

این عبارت در نسخه 1.0 و در نسخه 2.0 به دو طریق مختلف ترجمه می‌شود. که در کد زیر سعی کردم با فاصله‌گذاری‌های متفاوت آن را نشان دهم.

// C# 1.0
A( B<C , D>E() )

// C# 2.0
A( B<C,D> E() )

همانطور که می‌بینید در نسخه 1.0، فراخوانی متد A با دو پارامتر ورودی انجام شده و علامت < و > به عنوان علامت‌های کوچکتری و بزرگتری تفسیر شده‌اند، اما در نسخه 2.0 این عبارت فراخوانی متد A با یک ورودی جنریک است.

نکته جالب دیگر این است که generics به عنوان یک ویژگی بسیار مهم، تقریبا در سال 2002 به C# اضافه شد و پس از ۲۰ سال قرار است به زبان Go اضافه شود.

در این مدت برخی طرفداران زبان Go نبود این امکان را این گونه توجیه می‌کردند که این یک نقص نیست و تصمیم طراحی بوده که این زبان این امکان را نداشته باشد. به هر حال دیگر نیازی به توجیه نیست و از این به بعد هنگام استفاده از زبان قدرتمند Go از generic ها هم می‌توانید استفاده کنید.

https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md

#مهران_داودی (لینکدین - بلاگ)


کانال تلگرام:
@SoftwarePhilosophy

________
Twitter Eric Lippert @Max_Horstmann I note that C# parses these potential ambiguities without relying on type information. But that came with two costs: (1) an unbounded lookahead in the parser and (2) a breaking change from 1.0 to 2.0; A(B<C,D>E()) has two arguments to A in…
  • 👍 9
More from @codehaks
  1. Jul 27, 2026Post #1738
  2. Jul 26, 2026▶️ https://youtu.be/L-uGqnLdxA4
  3. Jun 4, 2026https://youtu.be/Seub5yHzu5A?si=S23rNa8WC0uhJOqr
  4. Jun 4, 2026https://youtu.be/-CIqrx8Aeig?si=gW9Lda2fA5MUzu_v
  5. Jun 2, 2026https://youtu.be/HG0twQJ7aG4
  6. Jun 1, 2026Channel photo updated
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →