স্টারলার্ক ভাষা

এই পৃষ্ঠাটি স্টারলার্কের একটি ওভারভিউ, যা পূর্বে স্কাইলার্ক নামে পরিচিত, ব্যাজেলে ব্যবহৃত ভাষা। ফাংশন এবং প্রকারের একটি সম্পূর্ণ তালিকার জন্য, Bazel API রেফারেন্স দেখুন।

ভাষা সম্পর্কে আরও তথ্যের জন্য, স্টারলার্কের গিটহাব রেপো দেখুন।

স্টারলার্ক সিনট্যাক্স এবং আচরণের প্রামাণিক স্পেসিফিকেশনের জন্য, স্টারলার্ক ল্যাঙ্গুয়েজ স্পেসিফিকেশন দেখুন।

বাক্য গঠন

Starlark এর সিনট্যাক্স Python3 দ্বারা অনুপ্রাণিত। এটি স্টারলার্কের বৈধ সিনট্যাক্স:

def fizz_buzz(n):
  """Print Fizz Buzz numbers from 1 to n."""
  for i in range(1, n + 1):
    s = ""
    if i % 3 == 0:
      s += "Fizz"
    if i % 5 == 0:
      s += "Buzz"
    print(s if s else i)

fizz_buzz(20)

স্টারলার্কের শব্দার্থবিদ্যা পাইথন থেকে ভিন্ন হতে পারে, কিন্তু আচরণগত পার্থক্য বিরল, স্টারলার্ক একটি ত্রুটি উত্থাপন করার ক্ষেত্রে ব্যতীত। নিম্নলিখিত পাইথন প্রকারগুলি সমর্থিত:

পরিবর্তনশীলতা

স্টারলার্ক অপরিবর্তনীয়তার পক্ষে। দুটি পরিবর্তনযোগ্য ডেটা স্ট্রাকচার উপলব্ধ: তালিকা এবং নির্দেশাবলী । পরিবর্তনযোগ্য ডেটা-কাঠামোতে পরিবর্তন, যেমন একটি তালিকায় একটি মান যুক্ত করা বা অভিধানে একটি এন্ট্রি মুছে ফেলা শুধুমাত্র বর্তমান প্রসঙ্গে তৈরি করা বস্তুর জন্য বৈধ। একটি প্রসঙ্গ শেষ হওয়ার পরে, এর মানগুলি অপরিবর্তনীয় হয়ে যায়।

কারণ Bazel বিল্ড সমান্তরাল এক্সিকিউশন ব্যবহার করে। একটি বিল্ড করার সময়, প্রতিটি .bzl ফাইল এবং প্রতিটি BUILD ফাইল তাদের নিজস্ব এক্সিকিউশন প্রসঙ্গ পায়। প্রতিটি নিয়ম তার নিজস্ব প্রেক্ষাপটে বিশ্লেষণ করা হয়।

foo.bzl ফাইলের সাথে একটি উদাহরণ দেওয়া যাক:

# `foo.bzl`
var = [] # declare a list

def fct(): # declare a function
  var.append(5) # append a value to the list

fct() # execute the fct function

যখন foo.bzl লোড হয় তখন Bazel var তৈরি করে। var এইভাবে foo.bzl এর প্রসঙ্গের অংশ। যখন fct() রান করে, এটি foo.bzl এর প্রসঙ্গে তা করে। foo.bzl এর মূল্যায়ন সম্পূর্ণ হওয়ার পর, পরিবেশে একটি অপরিবর্তনীয় এন্ট্রি, var , মান রয়েছে [5]

যখন অন্য bar.bzl foo.bzl চিহ্ন লোড করে, লোড করা মান অপরিবর্তনীয় থাকে। এই কারণে, bar.bzl এ নিম্নলিখিত কোডটি অবৈধ:

# `bar.bzl`
load(":foo.bzl", "var", "fct") # loads `var`, and `fct` from `./foo.bzl`

var.append(6)  # runtime error, the list stored in var is frozen

fct()          # runtime error, fct() attempts to modify a frozen list

bzl ফাইলে সংজ্ঞায়িত গ্লোবাল ভেরিয়েবলগুলি তাদের সংজ্ঞায়িত bzl ফাইলের বাইরে পরিবর্তন করা যাবে না। ঠিক যেমন bzl ফাইল ব্যবহার করে উপরের উদাহরণ, নিয়ম দ্বারা প্রত্যাবর্তিত মান অপরিবর্তনীয়।

BUILD এবং .bzl ফাইলের মধ্যে পার্থক্য

BUILD ফাইলগুলি নিয়মে কল করার মাধ্যমে লক্ষ্যগুলি নিবন্ধন করে। .bzl ফাইলগুলি ধ্রুবক, নিয়ম, ম্যাক্রো এবং ফাংশনের জন্য সংজ্ঞা প্রদান করে।

BUILD ফাইলে নেটিভ ফাংশন এবং নেটিভ নিয়ম হল বিশ্বব্যাপী প্রতীক। bzl ফাইলগুলিকে native মডিউল ব্যবহার করে লোড করতে হবে।

BUILD ফাইলে দুটি সিনট্যাকটিক সীমাবদ্ধতা রয়েছে: 1) ফাংশন ঘোষণা করা অবৈধ, এবং 2) *args এবং **kwargs আর্গুমেন্ট অনুমোদিত নয়।

পাইথনের সাথে পার্থক্য

  • গ্লোবাল ভেরিয়েবল অপরিবর্তনীয়।

  • বিবৃতি উচ্চ স্তরে অনুমোদিত নয় for . পরিবর্তে ফাংশন মধ্যে তাদের ব্যবহার করুন. BUILD ফাইলগুলিতে, আপনি তালিকা বোঝার ব্যবহার করতে পারেন।

  • if উচ্চ-স্তরে বিবৃতি অনুমোদিত না হয়। যাইহোক, if এক্সপ্রেশন ব্যবহার করা যায়: first = data[0] if len(data) > 0 else None

  • অভিধানের মাধ্যমে পুনরাবৃত্তির জন্য নির্ধারক ক্রম।

  • পুনরাবৃত্তি অনুমোদিত নয়.

  • Int প্রকার 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার মধ্যে সীমাবদ্ধ। ওভারফ্লো একটি ত্রুটি নিক্ষেপ করবে.

  • পুনরাবৃত্তির সময় একটি সংগ্রহ পরিবর্তন করা একটি ত্রুটি।

  • সমতা পরীক্ষা ব্যতীত, তুলনা অপারেটর < , <= , >= , > ইত্যাদি মান প্রকারের মধ্যে সংজ্ঞায়িত করা হয় না। সংক্ষেপে: 5 < 'foo' একটি ত্রুটি নিক্ষেপ করবে এবং 5 == "5" মিথ্যা ফেরত দেবে।

  • টিপলে, একটি ট্রেলিং কমা তখনই বৈধ হয় যখন টিপল বন্ধনীর মধ্যে থাকে — যখন আপনি 1, এর পরিবর্তে ( 1, (1,) লিখবেন।

  • অভিধানের আক্ষরিক ডুপ্লিকেট কী থাকতে পারে না। উদাহরণস্বরূপ, এটি একটি ত্রুটি: {"a": 4, "b": 7, "a": 1}

  • স্ট্রিংগুলিকে ডবল-কোট দিয়ে উপস্থাপন করা হয় (যেমন আপনি যখন repr কল করেন)।

  • স্ট্রিং পুনরাবৃত্তিযোগ্য নয়.

নিম্নলিখিত পাইথন বৈশিষ্ট্য সমর্থিত নয়:

  • অন্তর্নিহিত স্ট্রিং সংযোগ (স্পষ্ট + অপারেটর ব্যবহার করুন)।
  • শৃঙ্খলিত তুলনা (যেমন 1 < x < 5 )।
  • class ( struct ফাংশন দেখুন)।
  • import ( load বিবৃতি দেখুন)।
  • while , yield .
  • ফ্লোট এবং সেট প্রকার।
  • জেনারেটর এবং জেনারেটর এক্সপ্রেশন।
  • is পরিবর্তে == ব্যবহার করুন)।
  • try , raise , except , finally ( মারাত্মক ত্রুটির জন্য fail দেখুন)।
  • global , nonlocal
  • অধিকাংশ বিল্টইন ফাংশন, অধিকাংশ পদ্ধতি।