کیوآی (زبان برنامه‌نویسی)

کیو آی  نوعی زبان برنامه‌نویسی تابعی است که توسط دکتر مارک تراور در آوریل سال ۲۰۰۵ گسترش و معرفی شد. نسخه جدید و اصلاح یافته این برنامه نیز تحت عنوان کیو آی دو در نوامبر سال ۲۰۰۸ منتشرگردید. هرچند نسخه اولیه که تحت پروانه عمومی همگانی گنو (GPL) بود، به صورت رایگان عرضه شده بود، اما به خاطر عدم تأیید GPL توسط کاربران تجاری، نسخه دوم تحت دو لیسانس انحصاری عرضه گردید: یکی جهت کاربری شخصی و آموزشی و دیگری برای تولید نرم‌افزارهای منابع محدود.

زبان نوشتاری کیو آی لیسپ می‌باشد که دربردارنده اکثر شاخصه‌های مشترک در زبان‌های برنامه‌نویسی تابعی است که به عنوان مثال می‌توان به کنارهم چیدن الگوها، دستورهای اجرایی، عملیات‌های جانبی، حمایتی و چک کردن تایپ اشاره نمود.

کیو آی و پروژه ال ۲۱ 
هدف از گسترش کیو آی که در واقع بخشی از پروژه ال ۲۱ می‌باشد، تجهیز و مدرن‌سازی لیسپ به منظور برطرف کردن مشکلهای محسباتی قرن بیستم می‌باشد. دکتر تراور در سخنرانی خود با بیان پاره‌ای از مشکلها و کاستی‌های لیسپ به این مطلب اشاره کرد که این نواقص می‌تواند باعث اختلال در گستره بیشتری از زبان‌های برنامه‌نویسی گردد. از جمله مهم‌ترین نواقص ذکر شده توسط وی عبارتند از: عدم نبود قابلیت کنارهم چینی الگوها، مغایرت با فرضیه ریاضی لامبادا، اختلالهای موجود در روند کار و فقدان تایپ ایستا.

براساس نظریه‌های دکتر تراور نواقص ذکرشده باعث کاهش اقبال اساتید دانشگاهی به تدریس آن و متعاقباً کمبود فارغ التحصیلان به این زبان برنامه‌نویسی می‌باشد. به بیان دیگر وی این موانع را باعث شکل‌گیری جریانی می‌داند که از آن به نام «دور تسلسل کلاسیک» یاد می‌کند. لازم است ذکر شود با در نظر گرفتن مشکلهای یادشده می‌توان انتظار آن را داشت که این زبان رفته رفته با از دست دادن اقبال کاربران خود به زبانی مرده و بلااستفاده تبدیل گردد.

دکتر تراور معتقد است که راه حل برطرف ساختن این مشکلها هم می‌تواند در بستر صنعت ارائه گردد و هم در جامعه دانشگاهی. با توجه به هزینه بری بالای اجرای صنعتی، وی برآن شد تا جهت رفع نواقص به مدرن‌سازی لیسپ در سطح دانشگاهی بپردازد تا کاربر کیو آی حداقل تا مدت ۲۵ سال با مشکلی روبرو نگردد. از این رو راهکار خود را در قالب اصولی ۱۰ گانه به شرح زیر ارائه داد:
 سازگاری با لیسپ: اکثر ساختارها و شاخصه‌های موجود تحت زبان و فرمان‌های لیسپ می‌باشند.
 رایگان برای کاربری تجاری و آموزشی.
 رعایت اصل اختصار: هیچ برنامه‌ای نباید طولانی‌تر از دستورهای مشترک لیسپ باشد.
 قابلیت فراگیری آسان: ساختار و صرف و نحو زبان بایستی در حد یادگیری یک کودک باشد.
  کارآمدی: راه حل ارائه شده می‌بایستی مولد برنامه‌هایی باشد که به لحاظ سرعت هم راستا با لیسپ باشند. برنامه‌های کیو آی اغلب سریعتر بودند.
 دارا بودن ویژگی‌های یک زبان برنامه‌نویسی تابعی. در واقع در چهارچوب این اصل دکترتراور خصوصیتهایی را به برنامه اضافه نمود که عبارتند از: مدیریت فهرستهای الگو محور، تایپ ایستا، دستورهای اجرایی و برنامه‌های کاربردی نسبی.
  نبود هیچ عضوی از هاسکل یا ام‌ال که موجب بقای آن در آینده خواهد بود.
 دقت محاسبه ای: بدین معنا که برآورکننده نیازهای روز برنامه نویسان بوده و برخلاف لیسپ که فاقد ساختارهای زبان‌های خارجی و گرافیکی بود، این نرم‌افزار با دربرداشتن ویژگی‌های منحصربه‌فرد خود به ابزار مدیریتی قدرتمندی تبدیل شده‌است.
  قابلیت اعمال تغییرهای متنوع ساختاری توسط کاربر. بدین منظور کیو آی با بهره‌مندی از دو سطح s-expression و m-expression این امکان را برای کاربر فراهم می‌آورد تا در صورت نیاز ساختار صرفی برنامه را برای هدف مورد نظر خود تغییر دهد.
 امنیت و خوش ساختاری: کیو آی به لحاظ ساختاری کاملاً مستند بوده و به صورت آنلاین می‌توان به اسناد رسمی آن دستیابی پیدا کرد.

معماری (ساختار) 
مبنای کار کیو آی استفاده از مفهوم منطقی بندهای متوالی است که از آن برای تعریف انواع استفاده می‌کند. به بیان دیگر کیو آی با بهره‌مندی از اصول و فرامین تعریف شده در این مفهوم، سیستم‌های تایپ گسترده را با کتابخانه‌های لیسپ مرتبط نموده و با این فرایند ویژگی بسیار قدرتمندی را برای این زبان فراهم می‌آورد. در واقع توالی حاصله از طریق ارتباطهای مجازی باعث ایجاد نظامی منسجم در محیط کیو آی شده که از آن برای کدگذاری دستورهای مورد نظر استفاده می‌نماید.

چک کردن تایپ 
تایپ ایستا در کیو آی انتخابی می‌باشد که جهت فعال‌سازی آن از (tc +) و برای غیرفعال کردن آن از (tc -) استفاده می‌شود. سیستم تایپی با شناسایی نمادها، متغیرها، رشته‌ها، شماره‌ها و کاراکترها به عنوان انواع ابتدایی به بررسی موارد موجود در چرخه می‌پردازد. توابع در این برنامه به وضوح با عنوان امید (Hope) تایپ می‌شوند. حرف A نیز به صورت اختصار برای نوع به کار می‌رود.

منابع 

 ویکی‌پدیای انگلیسی

خانواده زبان برنامه‌نویسی لیسپ
زبان‌های برنامه‌نویسی
زبان‌های برنامه‌نویسی آموزشی
زبان‌های برنامه‌نویسی اعلانی
زبان‌های تابعی