زبان برنامه نویسی Unison

خوب چند برنامه نویسی که در توییتر دنبال می کردم امروز در مورد این زبان صحبت کردن که می تونید سایتشو https://www.unison-lang.org/ اینجا ببنید

توضیحاتی که خود سایتش در ورود می ده

Distributed programming

No more writing encoders and decoders at every network boundary. Say where you want computations to run and it happens :crystal_ball: — Dependencies are deployed on the fly.

Refactoring

Your codebase is always live and typechecks, even in the middle of a refactoring. Unison has structured refactoring sessions, not a big misleading list of type errors.

Durable storage

No more writing translation code between your values and the storage layer. Directly store values and unpersist them later without fear of dependency conflicts or version mismatches.

Storing code

Other tools try to recover structure from text; Unison stores code in a database. This eliminates builds, provides for instant nonbreaking renames, type-based search, and lots more.

Dependencies

Many dependency conflicts arise from definitions competing for the same names. Since Unison references code by hash instead of by name, an entire class of conflicts can be eliminated.

برای همه موارد بالا از کلمه رویکردی جدید استفاده کرده است.

نمونه کد های این زبان:

helloWorld : '{IO, Exception} ()
helloWorld _ = printLine "Hello World"

برای Distributed map-reduce

distributedEx : Seq k Nat ->{Remote} Nat
distributedEx dseq =
  dseq
    |> Seq.map (x -> x + 1)
    |> Seq.filter (x -> mod x 7 == 0)
    |> Seq.reduce 0 (+)

لینک گیت هاب

مثل اینکه این زبان با Haskell نوشته شده است حالا چیزی هست که در گیت هاب زده

توضیح کوتاه زبان

A friendly programming language from the future
Unison is a modern, statically-typed purely functional language with 
the ability to describe entire distributed systems using a single program. 
1 پسندیده

یه ذره سینتکسش عجیب غریبه. آدم همینطوری که نگاه می‌کنه نمی‌فهمه داره چی میگه…

شبی به haskell و همینطور الیکسیر در قسمت هاش.

1 پسندیده

آره ممکنه به خاطر اینکه با هسکل کار نکردم قابل فهم نباشه.

1 پسندیده

من با پیشفرض زبان الیکسیر می خوام خدمتتون بگم ممکنه اشتباه باشه یعنی در اولین دید

distributedEx : Seq k Nat ->{Remote} Nat
خط اول بالای فانکشن احتملا تایپش هست که مشخص می کنه ورودی و خروجی چی باشه

در خط بعدی ورودی dseq رو می گیره و می یاد پایپ می کنه. پایپ همیشه اون خروجی رو به اولین خونه ورودی فانکشن بعدی می ده پس در حقیقت Seq.map (dseq, x -> x + 1) این هست بعد همینطور خط به خط پردازش هاشو می کنه و به تابع بعدی پاس می ده تا تمام بشه.

dseq
    |> Seq.map (x -> x + 1)
    |> Seq.filter (x -> mod x 7 == 0)
    |> Seq.reduce 0 (+)

احتملا dseq یک مپ یا لیست هست که به تمام خونه هاش اومده یک +۱ اضافه کرده هر آیتمشو داخل مپ لوپ کرده و بعد از خط بعدی اومده فیلتر کرده فقط اونایی که mod x 7 == 0 هست و مپ یا لیست جدید ساخته و در آخر برای منم یکمی گنگ هست احتمالا نوع سینتکزش هست باید دید چه معنی می ده در داکیومنتش ولی ریدیوس استفاده کرده که فکر نمی کنم با زبان های دیگه تفاوت کنه

1 پسندیده

بیشتر به خاطر این قسمتش گفتم قابل فهم نیست:

ولی ممنون برای توضیحت 3>

1 پسندیده

قوربونت اون قسمت بالاش که تایپش هست ولی خط دومش وقتی معمولا می زنیم _ یعنی متغیر رو نیاز نداریم مثلا _a اینجوری نمونه تو حافظه اینجا یک چیزی رو چاپ کنه
ولی برای منم جالب شد یک تست باید بکنمش خودم چرا اینجوری نوشته