فکتور (زبان برنامه‌نویسی)
فکتور (به انگلیسی: Factor) یک زبان برنامه‌نویسی پشته گرا است که توسط «اسلاوا پستو» ایجاد شده‌است. زبان برنامه‌نویسی Factor یک زبان پویا است و دارای مدیریت خودکار حافظه و همچنین ویژگی‌های قدرتمند «فرابرنامه‌نویسی» است. این زبان برنامه‌نویسی دارای یک پیاده‌سازی واحد است که مرکب از یک کامپایلر بهینه‌ساز خود میزبان و یک محیط توسعه تعاملی است. توزیع Factor شامل یک کتابخانه استاندارد بزرگ است.
"اسلاوا پستو" در سال 2003 Factor را به‌عنوان یک زبان برنامه‌نویسی برای یک بازی ویدئویی ایجاد کرد. پیاده‌سازی اولیه این زبان که در حال حاضر به آن JFactor گفته می‌شود، در جاوا پیاده‌سازی و در ماشین مجازی جاوا اجرا شده بود. اگرچه زبان اولیه از نظر "قالب دستورالعمل‌هاً شبیه زبان برنامه‌نویسی Factor جدید است، اما زبان جدید در شرایط عملی بسیار متفاوت بوده و اجرای فعلی آن بسیار سریع‌تر است.
این زبان برنامه‌نویسی به‌طور قابل توجهی در طول زمان تغییر کرده است. در اصل، برنامه‌های Factor بر روی «دست‌کاری اشیاء جاوا» و «قابلیت بازتاب جاوا» متمرکز شده‌اند. از همان ابتدا، فلسفه طراحی تغییر این زبان برنامه‌نویسی به‌منظور مناسب شدن برای برنامه‌های نوشته شده در آن است. با توجه به اینکه پیاده‌سازی و کتابخانه‌های استاندارد Factor دقیق‌تر شده‌اند، نیاز به ویژگی‌های خاص زبان مشخص و اضافه شده‌اند. JFactor فاقد یک «سیستم شیءای» بوده که در آن می‌توان کلاس‌های خود را تعریف کرد، نسخه‌های اولیه Factor اصلی نیز به همین شکل بوده‌اند؛ این زبان از این نظر مشابه اسکیم است. (مترجم: بازتاب یا Reflection در برنامه‌های جاوا این امکان را فراهم می‌سازد که در زمان اجرای یک برنامه بتوان بدون دانستن نام یک کلاس، رابط، فیلد یا متد آن‌ها را فراخوانی کرده و اطلاعاتی دربارهٔ آن‌ها کسب کرد؛ به عبارت دیگر، Reflection عبارت است از توانایی اصلاح ساختار و رفتار برنامه در زمان اجرا (زمانی که برنامه در ماشین مجازی جاوا در حال اجرا است). از این قابلیت بیشتر برای نوشتن Framework استفاده می‌شود. این قابلیت ابزاری قدرتمند برای نوشتن برنامه‌هایی است که می‌توانند در زمان اجرا تصمیماتی را بگیرند). امروزه، سیستم شیءای یک بخش مرکزی (اصلی) از Factor است. ویژگی‌های مهم دیگر این زبان عبارت‌اند از کلاس‌های چندگانه، ترکیب کننده درون‌خطی، ماکروها، کلمات تجزیه کننده تعریف شده توسط کاربر و سیستم واژگان مدرن که به‌صورت مرحله به مرحله اضافه شده‌اند بطوریکه کاربرد (سودمندی) آن‌ها مشخص شده‌است.
«رابط عملکرد خارجی» از همان نسخه‌های اولیه Factor ارائه شده بود و یک سیستم مشابه با آن در JFactor وجود داشت. این رابط پیش از ایجاد یک پلاگین برای بخش C پیاده‌سازی هر کتابخانه خارجی که Factor باید با آن ارتباط برقرار کند، انتخاب شده بود و دارای مزایای تشریحی بودن، کامپایل سریع‌تر و نوشتن آسان‌تر است.
پیاده‌ساز اولیه جاوای این زبان فقط مشتمل بر یک مفسر بود، اما بعداً یک کامپایلر به «کد بایت» جاوا به آن اضافه شد. این کامپایلر فقط در پروسه‌های خاصی کار می‌کرد. نسخه جاوای Factor با نسخه نوشته شده در C و Factor جایگزین شد. در ابتدا، این نسخه فقط شامل یک مفسر بود، اما این مفسر با دو کامپایلر جایگزین شد که در موارد متعددی استفاده می‌شود. با گذشت زمان، پیاده‌سازی Factor به‌طور قابل توجهی سریع‌تر رشد کرده‌است.
Factor یک زبان برنامه‌نویسی پویا، تابعی و شیءگرا است. کد (کد برنامه در این زبان برنامه‌نویسی) مبتنی بر پروسه‌های کوچک است که word گفته می‌شوند. در کد معمولی، طول این پروسه‌ها 1-3 خط بوده و یک پروسه با بیش از 7 خط طولانی به ندرت استفاده می‌شود. موردی (برنامه‌ای) که اصطلاحاً با یک پروسه در زبان‌های برنامه‌نویسی دیگر بیان می‌شود می‌تواند به‌عنوان چند word در Factor نوشته شود.
هر word دارای تعداد مشخصی آرگومان ورودی (متغیر ورودی) و دارای تعداد ثابتی از مقادیر بازگشتی است. آرگومان‌ها با استفاده از "نشانه‌گذاری لهستانی معکوس" از یک پشته اطلاعات به word منتقل می‌شوند. پشته فقط برای سازمان‌دهی فراخوانی worldها و نه به‌عنوان یک ساختمان داده استفاده می‌شود. استفاده از پشته در زبان برنامه‌نویسی Factor مشابه استفاده از پشته در زبان برنامه‌نویسی Forth است؛ به همین دلیل، این دو زبان، (به‌عنوان زبان‌های) پشته‌ای در نظر گرفته می‌شوند. به‌عنوان مثال، در زیر یک قطعه کد که "hello world" را در جریان خروجی فعلی چاپ می‌کند، نمایش داده می‌شود:
(مترجم: نشانه‌گذاری لهستانی معکوس (Reverse Polish notation) یا نشانه‌گذاری پسوندی (postfix notation) یک روش نشانه‌گذاری عبارت محاسباتی، منطقی و جبری است که در آن هر عملگر مابعد عملوندهای خود نوشته می‌شود. forth از زبان‌های سطح بالاست که باید به زبان ماشین ترجمه شود تا برای کامپیوتر قابل فهم باشد. این زبان جز زبان‌هایی است که از آن‌ها استفاده «علمی» و «تجاری» می‌شود و جز زبان‌های دهه 1970 است)
PRINT یک کلمه از فهرست واژگان (یک دستور از مجموعه دستورها) "io" است که یک رشته را از پشته دریافت و چیزی را برنمی‌گرداند. این دستور رشته را در جریان خروجی فعلی چاپ می‌کند (به‌طور پیش فرض، در واحد ورودی-خروجی یا نشان دهنده گرافیکی).
الزاماً همه داده‌ها از طریق پشته منتقل نمی‌شوند. «متغیرهای محلی حوزه لغوی»، امکان ذخیره و دسترسی به داده‌های موقت در یک پروسه را به شما می‌دهند. به‌منظور انتقال اشیا در هنگام فراخوانی پروسه بدون استفاده از پشته، متغیرهای دینامیکی حوزه به‌صورت پویا استفاده می‌شوند. به‌عنوان مثال، جریان‌های ورودی و خروجی فعلی در متغیرهای دینامیکی حوزه به‌صورت پویا ذخیره می‌شود.
Factor به‌منظور توسعه این زبان، اهمیت زیادی به انعطاف‌پذیری و توانایی می‌دهد. [۵] یک سیستم برای ماکروها و همچنین برای توسعه اختیاری قالب دستورهای زبان برنامه‌نویسی Factor وجود دارد. قالب دستورهای Factor اغلب توسعه داده می‌شوند تا انواع جدیدی از تعاریف word و انواع جدیدی از «لفظ‌ها» برای ساختمان داده قابل استفاده باشد. این زبان نیز در کتابخانه XML به‌منظور فراهم کردن قالب دستورهای لفظی برای تولید XML استفاده شده‌است. به‌عنوان مثال، کلمه زیر یک رشته را دریافت و تولید یک شیء سند XML تولید می‌کند که یک سند HTML با تأکید بر رشته است: