config.json


config.json ফাইলটি ট্র্যাকের কনফিগারেশন বর্ণনা করে। এতে ট্র্যাকের অনুশীলনী ও কনসেপ্টের মতো গুরুত্বপূর্ণ তথ্য থাকে।

মেটাডেটা

নিচের টপ-লেভেল প্রপার্টিগুলোতে সাধারণ ট্র্যাক মেটাডেটা থাকে:

  • language: ট্র্যাকের ভাষা (যেমন "C#")। এর দৈর্ঘ্য <= 255 হতে হবে। (আবশ্যক)
  • slug: ট্র্যাকের ভাষা, লোয়ারকেস করা kebab-case স্ট্রিং হিসেবে (যেমন "csharp")। এর দৈর্ঘ্য <= 255 হতে হবে। (আবশ্যক)
  • active: একটি boolean মান, যা নির্দেশ করে ট্র্যাকটি সক্রিয় কিনা (অর্থাৎ শিক্ষার্থীরা ওয়েবসাইটে ট্র্যাকটিতে যোগ দিতে পারবে) (আবশ্যক)
  • blurb: ভাষার একটি সংক্ষিপ্ত বিবরণ। এর দৈর্ঘ্য <= 400 হতে হবে। (আবশ্যক)
  • version: config.json ফাইলের ভার্সন (বর্তমানে 3-এ নির্ধারিত) (আবশ্যক)
  • online_editor: অনলাইন এডিটরের জন্য ব্যবহৃত সেটিংস বর্ণনা করা একটি অবজেক্ট: (আবশ্যক)
    • indent_style: "space" অথবা "tab" (আবশ্যক)
    • indent_size: ইনডেন্টেশনের আকার, একটি ইন্টিজার হিসেবে (যেমন 4) (আবশ্যক)
    • highlightjs_language: Highlight.js-এর জন্য ভাষা আইডেন্টিফায়ার (আইডেন্টিফায়ারের সম্পূর্ণ তালিকা দেখুন) (ঐচ্ছিক)
  • status: কোন কোন v3 ফিচার সক্রিয় থাকবে তা বর্ণনা করা একটি অবজেক্ট: (আবশ্যক)
    • concept_exercises: একটি boolean মান, যা নির্দেশ করে কনসেপ্ট অনুশীলনী তৈরি করা হয়েছে কিনা (আবশ্যক)। true হলে Exercism ওয়েবসাইটের ইন্টারফেস বদলে যায়, যাতে বোঝা যায় ট্র্যাকটির জন্য কনসেপ্ট অনুশীলনী পাওয়া যাচ্ছে।
    • test_runner: একটি boolean মান, যা নির্দেশ করে একটি টেস্ট রানার তৈরি করা হয়েছে কিনা (আবশ্যক)। true হলে আমরা জমা দেওয়া সলিউশনগুলো আমাদের টেস্টিং ইনফ্রাস্ট্রাকচারের মধ্য দিয়ে চালাই এবং ফলাফল ওয়েবসাইটে দেখাই। ওয়েবসাইট শিক্ষার্থীদের অনলাইন এডিটরের ভেতর থেকেই একটি টেস্ট রান শুরু করার সুযোগও দেয়।
    • representer: একটি boolean মান, যা নির্দেশ করে একটি রিপ্রেজেন্টার তৈরি করা হয়েছে কিনা (আবশ্যক)
    • analyzer: একটি boolean মান, যা নির্দেশ করে একটি অ্যানালাইজার তৈরি করা হয়েছে কিনা (আবশ্যক)
  • files: একটি অনুশীলনীতে ব্যবহৃত ফাইলগুলোর অবস্থানের প্যাটার্ন, অনুশীলনীর ডিরেক্টরির সাপেক্ষে। (ঐচ্ছিক)
    • solution: স্টাব ইমপ্লিমেন্টেশন ফাইলের প্যাটার্ন (ঐচ্ছিক)
    • test: টেস্ট ফাইলের প্যাটার্ন (ঐচ্ছিক)
    • example: উদাহরণ ইমপ্লিমেন্টেশন ফাইলের প্যাটার্ন (ঐচ্ছিক)
    • exemplar: এক্সেমপ্লার ইমপ্লিমেন্টেশন ফাইলের প্যাটার্ন (ঐচ্ছিক)
    • editor: অতিরিক্ত রিড-অনলি এডিটর ফাইলের প্যাটার্ন (ঐচ্ছিক)
  • test_runner: ট্র্যাকের টেস্ট রানার বর্ণনা করা একটি অবজেক্ট (যদি থাকে): (status.test_runner true হলে আবশ্যক)
    • average_run_time: টেস্ট রানার চালাতে গড়ে কত সেকেন্ড লাগে, তার একটি ইন্টিজার number মান (যেমন 4) (status.test_runner true হলে আবশ্যক)
  • approaches: ট্র্যাকের অ্যাপ্রোচ নিয়ে মেটাডেটা থাকা একটি অবজেক্ট: (ট্র্যাকটিতে কোনো অ্যাপ্রোচ থাকলে আবশ্যক)
    • snippet_extension: স্নিপেট ফাইলের এক্সটেনশনের জন্য ব্যবহৃত একটি স্ট্রিং মান (যেমন rb) (ট্র্যাকটিতে কোনো অ্যাপ্রোচ থাকলে আবশ্যক)

ফাইল

এই কী ট্র্যাক-ব্যাপী ফাইল অবস্থান নির্দিষ্ট করতে ব্যবহৃত হয়। মেইনটেইনারদের হাতে হাতে অনুশীলনীগুলোর config.json ফাইলে files কী সেট করার বদলে configlet এই ট্র্যাক-ব্যাপী প্যাটার্নগুলো ব্যবহার করে এটা স্বয়ংক্রিয়ভাবে পূরণ করতে পারে।

files অবজেক্টে নির্ধারিত ফাইল প্যাটার্নগুলো নিচের প্লেসহোল্ডারগুলো সমর্থন করে:

  • %{kebab_slug}: kebab-case অনুশীলনী স্লাগ (যেমন bit-manipulation)
  • %{snake_slug}: snake_case অনুশীলনী স্লাগ (যেমন bit_manipulation)
  • %{camel_slug}: camelCase অনুশীলনী স্লাগ (যেমন bitManipulation)
  • %{pascal_slug}: PascalCase অনুশীলনী স্লাগ (যেমন BitManipulation)

এই প্যাটার্নগুলো ব্যবহার করে একটি অনুশীলনীর .meta/config.json ফাইলে files কী পূরণ করার সুবিধা configlet-এ যোগ করা হবে।

উদাহরণ

{
  "language": "C#",
  "slug": "csharp",
  "active": true,
  "status": {
    "concept_exercises": true,
    "test_runner": true,
    "representer": false,
    "analyzer": false
  },
  "blurb": "C# is a modern, object-oriented language with lots of great features, such as type-inference and async/await. The tooling is excellent, and there is extensive, well-written documentation.",
  "version": 3,
  "online_editor": {
    "indent_style": "space",
    "indent_size": 4,
    "highlightjs_language": "csharp"
  },
  "test_runner": {
    "average_run_time": 2
  },
  "files": {
    "solution": [
      "%{pascal_slug}.cs"
    ],
    "test": [
      "%{pascal_slug}Tests.cs"
    ],
    "example": [
      ".meta/Example.cs"
    ],
    "exemplar": [
      ".meta/Exemplar.cs"
    ]
  }
}

অনুশীলনী

টপ-লেভেল exercises কী একটি অবজেক্ট, যাতে তিনটি সম্ভাব্য কী থাকতে পারে:

  • concept: এটি একটি অ্যারে, যাতে ট্র্যাকের কনসেপ্ট অনুশীলনীগুলোর তালিকা থাকে
  • practice: এটি একটি অ্যারে, যাতে ট্র্যাকের প্র্যাকটিস অনুশীলনীগুলোর তালিকা থাকে
  • foregone: এটি একটি অ্যারে, যাতে ট্র্যাকটি যেসব অনুশীলনী তৈরি করবে না সেগুলোর স্লাগের তালিকা থাকে

কনসেপ্ট অনুশীলনী

প্রতিটি কনসেপ্ট অনুশীলনী exercises.concept অ্যারের একটি এন্ট্রি। ওয়েবসাইটে অনুশীলনীগুলো এই ফাইলে যেভাবে তালিকাভুক্ত থাকে, ঠিক সেই ক্রমেই সাজানো হয়, এবং এটা সাধারণত যে ক্রমে সেগুলো সমাধান করা উচিত তার সাথে মিলে যাওয়া উচিত। একটি কনসেপ্ট অনুশীলনীতে নিচের ফিল্ডগুলো থাকে:

  • uuid: একটি V4 UUID, যা অনুশীলনীটিকে অনন্যভাবে চিহ্নিত করে। UUID-টি ট্র্যাকের ভেতরে এবং সব ট্র্যাক মিলিয়ে অনন্য হতে হবে, এবং কখনোই বদলানো যাবে না
  • slug: অনুশীলনীর স্লাগ, যা একটি লোয়ারকেস করা kebab-case স্ট্রিং। ট্র্যাকের ভেতরে সব কনসেপ্ট এবং প্র্যাকটিস অনুশীলনীর স্লাগ মিলিয়ে স্লাগটি অনন্য হতে হবে। এর দৈর্ঘ্য <= 255 হতে হবে।
  • name: অনুশীলনীর নাম। এর দৈর্ঘ্য <= 255 হতে হবে।
  • concepts: কনসেপ্ট স্লাগের একটি অ্যারে, যা এই কনসেপ্ট অনুশীলনীতে শেখানো হয়
  • prerequisites: কনসেপ্ট স্লাগের একটি অ্যারে, যা শিক্ষার্থী এই অনুশীলনী শুরু করার আগে আনলক করা থাকতে হবে
  • status (ঐচ্ছিক): অনুশীলনীর স্টেটাস, যা "wip", "beta" "active" বা "deprecated"-এর একটি; নির্দিষ্ট না করা হলে ডিফল্ট "active"
    • wip: একটি কাজ-চলছে অনুশীলনী, যা জনসাধারণের ব্যবহারের জন্য প্রস্তুত নয়। এই ট্যাগযুক্ত অনুশীলনী শিক্ষার্থীদের UI-তে দেখানো হয় না বা আনলকিং লজিকে ব্যবহৃত হয় না। এগুলো মেইনটেইনারদের জন্য দেখা যেতে পারে।
    • beta: এটি নতুন এবং সক্রিয় অনুশীলনী বোঝায়, যেগুলোর বিষয়ে আমরা মতামত চাই। এই অনুশীলনীগুলোর জন্য সাইটে একটি বিটা লেবেল দেখানো হয়, যার কল-টু-অ্যাকশন হলো "আমাদের মতামত দিন।"
    • active: সক্রিয় অনুশীলনীর স্বাভাবিক অবস্থা
    • deprecated: যে অনুশীলনীগুলো যেসব শিক্ষার্থী শুরু করেনি তাদের আর দেখানো হয় না (এই পর্যায়ে ব্যবহারযোগ্য নয়)। আরও তথ্যের জন্য ডেপ্রিকেটেড অনুশীলনী দেখুন।

উদাহরণ

{
  "exercises": {
    "concept": [
      {
        "slug": "cars-assemble",
        "name": "Cars, Assemble!",
        "uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
        "concepts": [
          "if-statements",
          "numbers"
        ],
        "prerequisites": [
          "basics"
        ]
      },
      ...
    ]
  }
}

কাজ-চলছে অবস্থার উদাহরণ

{
  "exercises": {
    "concept": [
      {
        "slug": "cars-assemble",
        "name": "Cars, Assemble!",
        "uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
        "concepts": [
          "if-statements",
          "numbers"
        ],
        "prerequisites": [
          "basics"
        ],
        "status": "wip"
      },
      ...
    ]
  }
}

প্র্যাকটিস অনুশীলনী

প্রতিটি প্র্যাকটিস অনুশীলনী exercises.practice অ্যারের একটি এন্ট্রি। একটি প্র্যাকটিস অনুশীলনীতে নিচের ফিল্ডগুলো থাকে:

  • uuid: একটি V4 UUID, যা অনুশীলনীটিকে অনন্যভাবে চিহ্নিত করে। UUID-টি ট্র্যাকের ভেতরে এবং সব ট্র্যাক মিলিয়ে অনন্য হতে হবে, এবং কখনোই বদলানো যাবে না
  • slug: অনুশীলনীর স্লাগ, যা একটি লোয়ারকেস করা kebab-case স্ট্রিং। ট্র্যাকের ভেতরে সব কনসেপ্ট এবং প্র্যাকটিস অনুশীলনীর স্লাগ মিলিয়ে স্লাগটি অনন্য হতে হবে। এর দৈর্ঘ্য <= 255 হতে হবে।
  • name: অনুশীলনীর নাম। এর দৈর্ঘ্য <= 255 হতে হবে।
  • practices: কনসেপ্ট স্লাগের একটি অ্যারে, যা শিক্ষার্থীদের অনুশীলন করতে অনুশীলনীটি সাহায্য করে
  • prerequisites: কনসেপ্ট স্লাগের একটি অ্যারে, যা শিক্ষার্থী অনুশীলনীটি শুরু করার আগে আনলক করা থাকতে হবে
  • difficulty: অনুশীলনীর কঠিনতা নির্দেশকারী একটি সংখ্যা। সংখ্যাটি 1 (সবচেয়ে সহজ) থেকে 10 (সবচেয়ে কঠিন) পরিসরে থাকতে হবে। ওয়েবসাইট কঠিনতাকে এভাবে ব্যাখ্যা করে:
    • 1,2,3: সহজ
    • 4,5,6,7: মাঝারি
    • 8,9,10: কঠিন
  • status (ঐচ্ছিক): অনুশীলনীর স্টেটাস, যা "wip", "beta", "active" বা "deprecated"-এর একটি; নির্দিষ্ট না করা হলে ডিফল্ট "active"
    • wip: একটি কাজ-চলছে অনুশীলনী, যা জনসাধারণের ব্যবহারের জন্য প্রস্তুত নয়। এই ট্যাগযুক্ত অনুশীলনী শিক্ষার্থীদের UI-তে দেখানো হয় না বা আনলকিং লজিকে ব্যবহৃত হয় না। এগুলো মেইনটেইনারদের জন্য দেখা যেতে পারে।
    • beta: এটি নতুন এবং সক্রিয় অনুশীলনী বোঝায়, যেগুলোর বিষয়ে আমরা মতামত চাই। এই অনুশীলনীগুলোর জন্য সাইটে একটি বিটা লেবেল দেখানো হয়, যার কল-টু-অ্যাকশন হলো "আমাদের মতামত দিন"
    • active: সক্রিয় অনুশীলনীর স্বাভাবিক অবস্থা
    • deprecated: যে অনুশীলনীগুলো যেসব শিক্ষার্থী শুরু করেনি তাদের আর দেখানো হয় না (এই পর্যায়ে ব্যবহারযোগ্য নয়)।

ওয়েবসাইটে প্র্যাকটিস অনুশীলনীগুলোর "প্রস্তাবিত ক্রম" practice অ্যারে অনুশীলনীগুলোর যে ক্রমে আছে তার সাথে মিলে যায়।

উদাহরণ

{
  "exercises": {
    "practice": [
      {
        "slug": "leap",
        "name": "Leap",
        "uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
        "practices": [
          "if-statements",
          "numbers",
          "operator-precedence"
        ],
        "prerequisites": [
          "if-statements",
          "numbers"
        ],
        "difficulty": 1
      },
      ...
    ]
  }
}

বিটার উদাহরণ

{
  "exercises": {
    "practice": [
      {
        "slug": "leap",
        "name": "Leap",
        "uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
        "practices": [
          "if-statements",
          "numbers",
          "operator-precedence"
        ],
        "prerequisites": [
          "if-statements",
          "numbers"
        ],
        "difficulty": 1,
        "status": "beta"
      },
      ...
    ]
  }
}

বাদ দেওয়া অনুশীলনী

কোনো ট্র্যাক যদি জানে যে Problem Specifications রিপো-তে সংজ্ঞায়িত কোনো অনুশীলনী এটি তৈরি করতে চায় না, তাহলে সেই অনুশীলনীর স্লাগ exercises.foregone কী-তে যোগ করা যায়। ট্র্যাকের যা তৈরি করা হয়নি এমন অনুশীলনী আউটপুট করার সময় configlet বাদ দেওয়া অনুশীলনীগুলো উপেক্ষা করবে।

কোনো ট্র্যাক কেন একটি অনুশীলনী তৈরি করতে নাও চাইতে পারে, তার কারণ হতে পারে:

  • ভাষাটি দিয়ে যুক্তিসঙ্গতভাবে অনুশীলনীটি তৈরি করা সম্ভব নয়। উদাহরণ হিসেবে, lens-person অনুশীলনী তৈরি করতে ভাষাটিতে lenses সমর্থন থাকা প্রয়োজন।
  • অনুশীলনীর বিষয়টি ভাষার সাথে মানানসই নয়। যেমন, কিছু হাই-লেভেল ভাষার জন্য একটি লো-লেভেল বিট-ম্যানিপুলেশন অনুশীলনীর অর্থ হয় না।

উদাহরণ

{
  "exercises": {
    "foregone": [
      "lens-person"
    ]
  }
}

কনসেপ্ট

প্রতিটি কনসেপ্ট টপ-লেভেল concepts অ্যারের একটি এন্ট্রি। একটি কনসেপ্টে নিচের ফিল্ডগুলো থাকে:

  • uuid: একটি V4 UUID, যা কনসেপ্টটিকে অনন্যভাবে চিহ্নিত করে। UUID-টি ট্র্যাকের ভেতরে এবং সব ট্র্যাক মিলিয়ে অনন্য হতে হবে, এবং কখনোই বদলানো যাবে না
  • slug: কনসেপ্টের স্লাগ, যা একটি লোয়ারকেস করা kebab-case স্ট্রিং। ট্র্যাকের ভেতরে সব কনসেপ্ট মিলিয়ে স্লাগটি অনন্য হতে হবে। এর দৈর্ঘ্য <= 255 হতে হবে।
  • name: কনসেপ্টের নাম। এর দৈর্ঘ্য <= 255 হতে হবে।
  • tags: কখন একটি সাবমিশন একটি অ্যাপ্রোচের সাথে যুক্ত হবে, তার শর্ত নির্দিষ্ট করে। (ঐচ্ছিক)
    • all: এমন ট্যাগের অ্যারে, যেগুলোর সবগুলো একটি সাবমিশনে থাকতেই হবে (ঐচ্ছিক, যদি না any-তে কোনো এলিমেন্ট না থাকে)
    • any: এমন ট্যাগের অ্যারে, যেগুলোর অন্তত একটি একটি সাবমিশনে থাকতে হবে (ঐচ্ছিক, যদি না all-তে কোনো এলিমেন্ট না থাকে)
    • not: ট্যাগগুলোর কোনোটিই একটি সাবমিশনে থাকা যাবে না (ঐচ্ছিক)

উদাহরণ

{
  "concepts": [
    {
      "uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
      "slug": "numbers",
      "name": "Numbers",
      "tags": {
        "all": [
          "concept:number"
        ]
      }
    }
  ]
}

মূল ফিচার

ভাষার মূল ফিচারগুলো সংক্ষেপে বর্ণনা করে ভাষার সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্যগুলো কী। এগুলোর উদ্দেশ্য হলো সম্ভাব্য শিক্ষার্থীদের কাছে ভাষার বেশি আকর্ষণীয় বৈশিষ্ট্যগুলো তুলে ধরা। শিরোনামে যতটা সম্ভব কম টেকনিক্যাল পরিভাষা ব্যবহারের চেষ্টা করা উচিত, মনে রাখতে হবে যে ভাষা শেখার আগে শিক্ষার্থীরা ভাষা-নির্দিষ্ট পরিভাষার অর্থ কী তা জানতেই পারে না।

মূল ফিচারগুলো টপ-লেভেল key_features ফিল্ডে নির্দিষ্ট করা হয়, যা নিচের ফিল্ডসহ অবজেক্টের অ্যারে হিসেবে সংজ্ঞায়িত:

  • title: মূল ফিচারের একটি সংক্ষিপ্ত শিরোনাম। এর দৈর্ঘ্য <= 25 হতে হবে। Markdown সমর্থিত নয়।
  • content: মূল ফিচারের একটি বিবরণ। এর দৈর্ঘ্য <= 100 হতে হবে। Markdown সমর্থিত নয়।
  • icon: ফিচারের জন্য দেখানো আইকন। নাম যাই হোক, আপনার মনে হয় যেটি মানায় সেটি বেছে নিতে পারেন। নিচের আইকনগুলো ব্যবহার করা যায়:
    • community
    • concurrency
    • cross-platform
    • documentation
    • dynamically-typed
    • easy
    • embeddable
    • evolving
    • expressive
    • extensible
    • fast
    • fun
    • functional
    • garbage-collected
    • general-purpose
    • homoiconic
    • immutable
    • interactive
    • interop
    • multi-paradigm
    • portable
    • powerful
    • productive
    • safe
    • scientific
    • small
    • stable
    • statically-typed
    • tooling
    • web
    • widely-used

এই আইকনগুলোর চেহারা মূল ফিচার আইকন অংশ-এ দেখে নিতে পারেন।

ঠিক 6টি মূল ফিচার নির্দিষ্ট করতে হবে।

উদাহরণ

{
  "key_features": [
    {
      "title": "Fault-tolerant",
      "content": "Elixir runs on the Erlang VM, known for running low-latency, distributed and fault-tolerant systems.",
      "icon": "safe"
    },
    ...
  ],
}

ট্যাগ

ট্র্যাকগুলোতে ট্যাগ যোগ করা যায়, যা নির্দিষ্ট ট্যাগ-সমাহারযুক্ত ট্র্যাক খুঁজে বের করার সুযোগ দেয়।

ট্র্যাকের উচিত ভাষার সাধারণ ব্যবহারের ভিত্তিতে নিজেদের ট্যাগ নির্বাচন করা। উদাহরণস্বরূপ, ভাবুন একজন শিক্ষার্থী ভাবছে: "আমি মেশিন লার্নিং করতে চাই, কোন ভাষা বেছে নেব?", অথবা "আমি ফাংশনাল প্রোগ্রামিং শিখতে চাই, কোন ভাষা বেছে নেব?"। আপনার ভাষাটি যদি ভালো প্রার্থী হয়, তাহলে সেটিতে ওই ট্যাগ দিন। আপনার ভাষাটি যদি কিছু ফাংশনাল ধারণা সমর্থন করে কিন্তু সেগুলো খুব কম ব্যবহৃত হয়, বা অল্প কিছু মানুষ এতে মেশিন লার্নিং করেন কিন্তু তা বিরল, তাহলে ওই ট্যাগগুলো প্রয়োগ করবেন না।

ট্যাগগুলো টপ-লেভেল tags ফিল্ডে নির্দিষ্ট করা হয়, যা স্ট্রিংয়ের অ্যারে হিসেবে সংজ্ঞায়িত। নিচের ট্যাগগুলো ব্যবহার করা যায় (বিভাগ অনুসারে সাজানো):

প্যারাডাইম

  • paradigm/array: ভাষাটি একটি অ্যারে প্রোগ্রামিং ভাষা
  • paradigm/declarative: ভাষাটি প্রোগ্রামিংয়ের ডিক্লারেটিভ স্টাইল সমর্থন করে
  • paradigm/functional: ভাষাটি প্রোগ্রামিংয়ের ফাংশনাল স্টাইল সমর্থন করে
  • paradigm/imperative: ভাষাটি প্রোগ্রামিংয়ের ইম্পারেটিভ স্টাইল সমর্থন করে
  • paradigm/logic: ভাষাটি লজিক-ভিত্তিক প্রোগ্রামিংয়ের স্টাইল সমর্থন করে
  • paradigm/object_oriented: ভাষাটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের স্টাইল সমর্থন করে
  • paradigm/procedural: ভাষাটি প্রোগ্রামিংয়ের প্রসিডিউরাল স্টাইল সমর্থন করে
  • paradigm/stack-oriented: ভাষাটি স্ট্যাক-ওরিয়েন্টেড প্রোগ্রামিংয়ের স্টাইল সমর্থন করে

টাইপিং

  • typing/static: ভাষাটি স্ট্যাটিক টাইপিং ব্যবহার করে
  • typing/gradual: ভাষাটি গ্র্যাজুয়াল টাইপিং ব্যবহার করে
  • typing/dynamic: ভাষাটি ডাইনামিক টাইপিং ব্যবহার করে
  • typing/strong: ভাষাটি স্ট্রং টাইপিং ব্যবহার করে
  • typing/weak: ভাষাটি উইক টাইপিং ব্যবহার করে

এক্সিকিউশন মোড

  • execution_mode/compiled: চালানোর আগে কোড প্রথমে কম্পাইল করা হয়
  • execution_mode/interpreted: কোড সরাসরি ইন্টারপ্রেট করা হয়

প্ল্যাটফর্ম

  • platform/windows: Windows-এ চলে
  • platform/mac: Mac-এ চলে
  • platform/linux: Linux-এ চলে
  • platform/ios: iOS-এ চলে
  • platform/android: Android-এ চলে
  • platform/web: ব্রাউজারে চলে

রানটাইম

  • runtime/standalone_executable: স্ট্যান্ডঅ্যালোন এক্সিকিউটেবল হিসেবে চলে
  • runtime/language_specific: ভাষা-নির্দিষ্ট রানটাইমে চলে
  • runtime/clr: Common Language Runtime (.NET)-এ চলে
  • runtime/jvm: JVM (Java)-এ চলে
  • runtime/beam: BEAM (Erlang)-এ চলে
  • runtime/wasmtime: Wasmtime (WebAssembly)-এ চলে

যেসব কাজে ব্যবহৃত

  • used_for/artificial_intelligence: কৃত্রিম বুদ্ধিমত্তা
  • used_for/backends: ব্যাকএন্ড
  • used_for/cross_platform_development: ক্রস-প্ল্যাটফর্ম ডেভেলপমেন্ট
  • used_for/embedded_systems: এমবেডেড সিস্টেম
  • used_for/financial_systems: ফাইন্যান্সিয়াল সিস্টেম
  • used_for/frontends: ফ্রন্টএন্ড
  • used_for/games: গেম
  • used_for/guis: GUI
  • used_for/mobile: মোবাইল
  • used_for/robotics: রোবোটিক্স
  • used_for/scientific_calculations: বৈজ্ঞানিক গণনা
  • used_for/scripts: স্ক্রিপ্ট
  • used_for/web_development: ওয়েব ডেভেলপমেন্ট

একটি বিভাগ থেকে একাধিক ট্যাগ অন্তর্ভুক্ত করা সম্পূর্ণ ঠিক।

উদাহরণ

{
  "tags": [
    "paradigm/declarative",
    "paradigm/functional",
    "paradigm/object_oriented",
    "platform/linux",
    "platform/windows",
    "runtime/jvm"
  ]
}

উদাহরণ

একটি বৈধ config.json ফাইল দেখতে কেমন হতে পারে, তার একটি উদাহরণ:

{
  "language": "C#",
  "slug": "csharp",
  "active": true,
  "status": {
    "concept_exercises": true,
    "test_runner": true,
    "representer": false,
    "analyzer": false
  },
  "blurb": "C# is a modern, object-oriented language with lots of great features, such as type-inference and async/await. The tooling is excellent, and there is extensive, well-written documentation.",
  "version": 3,
  "online_editor": {
    "indent_style": "space",
    "indent_size": 4,
    "highlightjs_language": "csharp"
  },
  "test_runner": {
    "average_run_time": 2
  },
  "files": {
    "solution": [
      "%{pascal_slug}.cs"
    ],
    "test": [
      "%{pascal_slug}Tests.cs"
    ],
    "example": [
      ".meta/Example.cs"
    ],
    "exemplar": [
      ".meta/Exemplar.cs"
    ]
  },
  "exercises": {
    "concept": [
      {
        "slug": "lucians-luscious-lasagna",
        "name": "Lucian's Luscious Lasagna",
        "uuid": "7d358894-4fbd-4c91-b49f-d68f1c5aa6bc",
        "concepts": [
          "basics"
        ],
        "prerequisites": []
      },
      {
        "slug": "cars-assemble",
        "name": "Cars, Assemble!",
        "uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
        "concepts": [
          "if-statements",
          "numbers"
        ],
        "prerequisites": [
          "basics"
        ],
        "status": "wip"
      }
    ],
    "practice": [
      {
        "slug": "hello-world",
        "name": "Hello, World!",
        "uuid": "6c88f46b-5acb-4fae-a6ec-b48ae3f8168f",
        "practices": [
          "strings"
        ],
        "prerequisites": [
          "basics"
        ],
        "difficulty": 1
      },
      {
        "slug": "leap",
        "name": "Leap",
        "uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
        "practices": [
          "if-statements",
          "numbers",
          "operator-precedence"
        ],
        "prerequisites": [
          "if-statements",
          "numbers"
        ],
        "difficulty": 2,
        "status": "beta"
      }
    ]
  },
  "concepts": [
    {
      "uuid": "2eb4a463-355f-46ef-ac55-a75ec5afdf86",
      "slug": "basics",
      "name": "Basics"
    },
    {
      "uuid": "4466e33e-dcd2-4b1f-9d9d-2c4315bf5188",
      "slug": "if-statements",
      "name": "If Statements"
    },
    {
      "uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
      "slug": "numbers",
      "name": "Numbers"
    },
    {
      "uuid": "7a86561d-173b-45c0-a53c-1ffd7b9ff259",
      "slug": "strings",
      "name": "Strings"
    }
  ],
  "key_features": [
    {
      "title": "Modern",
      "content": "C# is a modern, fast-evolving language.",
      "icon": "expressive"
    },
    {
      "title": "Cross-platform",
      "content": "C# runs on almost any platform and chipset.",
      "icon": "cross-platform"
    },
    {
      "title": "Multi-paradigm",
      "content": "C# is primarily an object-oriented language, but also has lots of functional features.",
      "icon": "multi-paradigm"
    },
    {
      "title": "General purpose",
      "content": "C# can be used for a wide variety of workloads, like websites, console applications, and even games.",
      "icon": "general-purpose"
    },
    {
      "title": "Tooling",
      "content": "C# has excellent tooling, with linting and advanced refactoring options built-in.",
      "icon": "tooling"
    },
    {
      "title": "Documentation",
      "content": "Documentation is excellent and exhaustive, making it easy to get started with C#.",
      "icon": "documentation"
    }
  ],
  "tags": [
    "paradigm/declarative",
    "paradigm/functional",
    "paradigm/object_oriented",
    "platform/linux",
    "platform/windows",
    "runtime/jvm"
  ]
}