মূল লেখায় যান

Create and run a project

দ্রুত একটা test-এর জন্য একটা .b file-ই যথেষ্ট। কিন্তু সত্যিকারের program হলো একটা project — একটা folder tree, যার root-এ একটা manifest। এই পেজে দেখানো হলো একটা project কীভাবে সাজানো থাকে, আর সেটা কীভাবে চালানো হয়।

একটা module হলো এমন একটা directory tree, যার root-এ beans.pot নামে একটা file আছে। ওই file-টাই manifest। এটা module-এর নাম দেয়। (POT নামটা একটা মজা করে রাখা; দেখুন কেন এর নাম POT।)

সবচেয়ে ছোট manifest-টা শুধু module-এর নামই দেয়:

module shop

Project directory থেকে এটা বানাতে চালান:

Terminal window
beansc pot init shop

আগে থেকে beans.pot থাকলে command সেটা overwrite করে না।

কোনো application-এর root package হলো package main, আর এতে একটা fn main() লাগে — অর্থাৎ entry point। সবচেয়ে ছোট একটা project দেখতে এমন:

myapp/
beans.pot
main.b

beans.pot:

module myapp

main.b:

package main
import std.io
fn main() {
io.println("hello from myapp")
}

নিয়মটা সোজা: এক folder = এক package। একটা folder-এর প্রতিটা .b file একই package share করে। একই folder-এর file-গুলো একে অপরকে import করে না; ওরা এমনিতেই একে অপরের নাম দেখতে পায়।

তাই main-কে কয়েকটা file-এ ভাগ করা যায়:

myapp/
beans.pot
main.b package main
helpers.b package main (same package, no import needed)

একটা sub-folder আলাদা একটা package, যেটা import করা যায়। ধরা যাক, এমন একটা layout আছে:

shop/
beans.pot
main.b
money/
money.b package money

তাহলে main.b sub-package-টাকে তার path দিয়ে import করে, আর তার নাম দিয়ে ব্যবহার করে:

package main
import shop.money
fn main() {
let m: money.Money = new money.Money(19.99)
}

import path হলো shop.money। কোডের ভিতরে এটাকে money.thing হিসেবে ব্যবহার করা হয়, কারণ package-টা তার package clause-এ নিজেকে money বলে ডাকে।

beansc run-কে সেই file-এ তাক করুন যেখানে fn main() আছে। সাথে দেওয়া multi-package উদাহরণটার জন্য:

Terminal window
beansc run examples/shop/main.b

beansc ওই file-এর উপরের beans.pot-টা খুঁজে বের করে, module-এর প্রতিটা package resolve করে, আর সেটা চালায়।

beans.pot না থাকলে একটা একলা .b file single-file mode-এ চলে। Standard library import (std.io) আর Git import তখনও কাজ করে। Local package করে না, কারণ ওদের belong করার মতো কোনো module নেই। যেই মুহূর্তে একটার বেশি package লাগবে, একটা beans.pot যোগ করুন।

manifest-এর প্রতিটা field জানতে দেখুন beans.pot manifest। শুরু থেকে শেষ পর্যন্ত হেঁটে দেখানো একটা তিন-package project-এর জন্য দেখুন shop উদাহরণ