کامپایلهای اتمی کیوت
-
[quote author="Mohsen" date="1356973261"]p{direction:rtl;text-align:right}. اشکالی نداره در عوض کلی تجربه بدست آوردی. گزینه نصب نمیخواد. همون حالت installer ساده بساز که فقط نصب کنه.
در آینده فکر کنم بدرد بخور بشه.[/quote]p{direction:rtl;text-align:right}. حجم تمام باینریها خیلی خیلی زیاده! شاید بهتر باشه این امکان رو به کاربر بدیم که خودش انتخاب کنه دقیقاً کدوم کتابخونهها رو میخواد. یه مقدار هم واسه خودم میخوام. چون وقتی برنامهای رو میخوام تحویل بدم خودم دوست دارم کیوت روی سیستم موقع نصب بریزم. واسهٔ همهٔ کامپیوترهای یه سازمان هم نیازی نیست مثلاً OpenGL و QtQuick و مخصولاً QtWebkit نصب بشه. یک بیستم این سایز برای اجرای برنامهها کافی خواهد بود. چند تا گزینه میذارم که بهشکل دستهای گزینههای دیگه رو انتخاب میکنه. مثلاً سه نوع نصب (مثل ویژوال استودیو) الان وارد فاز دوم کامپایل شدم. با ویژوال استودیو ۲۰۱۲ و کتابخانهٔ ANGLE به همین شکل میخوام کامپایل کنم. اما نمیدونم سویچهای بهینهسازی MSVC چطوریان.
[quote author="Mohsen" date="1356973261"]p{direction:rtl;text-align:right}. یه ایده ای برای آیندش از ministro در necessitas گرفتم که اگه پیاده بشه خوبه.
اینکه یه آبجکت به برنامه نویس بدی که یک manifest تنظیم کنه برای پروژه و همراه برنامه کامپایل بشه. بعد برنامه که میخواد اجرا بشه تو چک کنی ببینی که لایببری اون ورژن روی سیستم موجود هست یا نه. اگر نبود دانلود بشه.
در آینده فکر کنم بدرد بخور بشه.[/quote]p{direction:rtl;text-align:right}. چطور؟ یه چیزی مثل build key ؟ الان مگه نیست؟
-
p{direction:rtl;text-align:right}. فکر کنم چیزی که تو ذهن منه با کاری که تو داری انجام میدی متفاوته. انگار من اشتباه برداشت کردم از برنامت.
چیزی که من فکر میکردم این بود که تو میخوای یه redistributable package درست کنی و این پکیج popular بشه و برنامه نویس ها برنامشون رو مطابق اون deploy کنن و اگر رو یه سیستم نصب بود، دیگه نیازی به دانلود مجدد اونا نباشه. خوب مسلما برای اینکار نیاز هست که تمام باینری ها نصب بشن. اون ایده ای هم که گفتم بر اساس این نظریه بود. (البته برای سیستم 32 بیتی باینری های 64 بیت لازم نیست. به عبارتی پکیج در 2 نسخه 32 و 64 برای هر سیستم عامل ارائه میشه)
منظورم build key نیست. این یه کنترلیه که توسط برنامه تو که رو سیستم نصب شده انجام میشه. فقط یه آبجکت رو سورس attach میشه که برنامه کنترل کننده تو رو صدا میکنه و اطلاعات مانیفست رو بهش پاس میده. کنترل کننده مانیفست رو بررسی میکنه میبینه که مثلا لایببرری های 5.1 نیاز هست. میگه اینا رو سیستم نصب نیست میخواهید دانلود بشه؟ کاربر میگه بله یا خیر. یا اینکه میبینه لایبرری های 5 نیازه، مسیر لایبرری های مورد نیاز رو میده و پروژه لاببرری هارو از اونجا میخونه.
@
QApplication::setLibraryPaths();
@
یا
qtconfig.ini -
p{direction:rtl;text-align:right}. برای اینکه نیازی نباشه هر برنامه ای با خودش 20mb اضافه حمل کنه. با اینکه portable بودن کیوت خودش یک مزیته ولی برنامه های کوچیک کمی با حجم فایل ها مشکل دارن. وگرنه خوب همونطور که برنامه رو تولید کرده، همون فایل هارو هم کنار برنامه میفرسته دیگه! کاری که الان انجام میشه.
از طرفی برنامه های بزرگتر این rp رو با خودشون به کامپیوتر ها میبرن. -
[quote author="Mohsen" date="1356982980"]p{direction:rtl;text-align:right}. برای اینکه نیازی نباشه هر برنامه ای با خودش 20mb اضافه حمل کنه. با اینکه portable بودن کیوت خودش یک مزیته ولی برنامه های کوچیک کمی با حجم فایل ها مشکل دارن. وگرنه خوب همونطور که برنامه رو تولید کرده، همون فایل هارو هم کنار برنامه میفرسته دیگه! کاری که الان انجام میشه.
از طرفی برنامه های بزرگتر این rp رو با خودشون به کامپیوتر ها میبرن.[/quote]p{direction:rtl;text-align:right}. آقاجان خوب اصلا DLL فلسفهش همین بوده دیگه. اون واسط اضافی که برای مانیفست رو بررسی میکنه رو نفهمیدم. چه نیازی هست به اون؟. چرا لینک مستفیم نکنن برنامهها؟
-
p{direction:rtl;text-align:right}. ببین فرض کن که تو یه برنامه میذاری واسه دانلود که فقط یه exe هست.
من میام دانلودش میکنم اجراش میکنم. یه پیغام میاد که این برنامه به rp نیاز داره از لینک زیر دانلودش کنید. من میرم اونو دانلود میکنم نصب میکنم برنامه کار میکنه.
فردا یه برنامه دیگه دانلود میکنم. اجراش میکنم. حالا دیگه rp نصبه ولی اون ورژن از dll هایی که این برنامه باهاش کامپایل شده رو نداره (اینا تو مانیفست مشخص شده: ورژن dll ها، dll هایی که استفاده شده + مشخصات اضافی.. کامپایلر و اینا)
پیغام میاد که این برنامه به چند فایل اضافی نیاز داره. دانلود بشه؟ میگم yes. فقط core و gui دانلود میشه.
دوباره فرداش یه برنامه دیگه میگیرم که webkit توش استفاده شده. پیغام میاد این برنامه به فایل اضافی نیاز داره دانلود شه؟ میگم yes. وبکیت دانلود میشه در کنار core و gui قرار میگیره و پکیج کاملتر میشه. تو بعضی موارد حتی برنامه واسط هم update میشه اگه نسخه جدیدترش باشه. (مثلا میخوایم سرور دانلود رو عوض کنیم) -
p{direction:rtl;text-align:right}. نه! اشتباه متوجه شدی. ببین برنامه واسط اون گوشه هست. تو به برنامه نویس یه lib یا یه snippet میدی که تو برنامش میچسبونه. برنامش رو مثل همیشه کامپایل میکنه. وقتی که برنامه اجرا میشه اون کدی که تو بهش دادی اول از همه اجرا میشه و با برنامه واسط تو ارتباط برقرار میکنه. متوجه شدی؟ این یه مدل هست که خیلی جاها پیاده سازی شده. اگه با necessitas کار کرده باشی متوجه میشی که چی میگم.
-
[quote author="Mohsen" date="1357036399"] وقتی که برنامه اجرا میشه اون کدی که تو بهش دادی اول از همه اجرا میشه[/quote]
p{direction:rtl;text-align:right}. نمیتونه. چون زمان لینک مشخص کردی که به باینریهای کیوت و چیزای دیگه لینک کنه. قبل از اجرای هر کدی تمام پیشنیازها توسط لودر سیستمعامل بارگذاری میشه. اگر موفق بود تازه شروع میکنه به اجرای کد برنامه. در غیر این حالت باید کتابونهها لود و آنلود بشن. که در حالت کلی اصلاً ایدهٔ خوبی نیست.
-
[quote author="Mohsen" date="1357054965"]p{direction:rtl;text-align:right}. starter چطوره؟ برای برنامه اصلی environment ست کنه و اونو اجرا کنه؟[/quote]
p{direction:rtl;text-align:right}. این منطقی تره. میشه یه فایل bat نوشت که این کار رو انجام بده. اما آیا باز هم نیازی هست؟ من نیازی نمیبینم مگر در صورتی که نسخه های متعدد از کیوت روی یک ماشین بخواد نصب بشه و یا با معماری های متعدد بخواد استفاده بشه
-
-
[quote author="Mohsen" date="1357057019"]p{direction:rtl;text-align:right}. چیزی که من بهش فکر میکنم اینه که کیوت مثل ویژوال استودیو نیست که 2 سال 1 بار یا مثلا سالی 1 بار بخواد یه sp بده. کیوت همیشه در حال توسعه هست. حالا برنامه ها همشون باید صبر کنن تا یه rp جدید بیاد؟ و کاربر اونو نصب کنه؟[/quote]
p{direction:rtl;text-align:right}. نه دیگه! ببین کیوت از روش semantic versioning پیروی میکنه. تا زمانی که نسخهٔ ماژور عوض نشه backward compatibility تضمین شده هست. یعنی فرقی نداره برنامه نویس با کیوت ۴٫۶ کد نوشته باشه یا ۴٫۷ در هر صورت همهٔ نسخههای سری چهار برای اجرای برنامهش کافی خواهد بود. وقتی نسخهٔ revision عوض میشه حتا چیز جدیدی هم به API اضافه نمیشه. فقط باگها برطرف شدن و یا الگوریتمهای داخلی بهتر شدن.
-
[quote author="Mohsen" date="1357136732"]p{direction:rtl;text-align:right}. اون واسه backward شدنه ولی تو همون 4 هم در طول مدت فانکشن اضافه شد. حالا نمیدونم به هرحال اینم ایده من بود.[/quote]
p{direction:rtl;text-align:right}. منظورم اینه که کسی که یه سری برنامههایی رو مثلاً با کیوت ۴٫۵ استفاده میکنه لازم نیست بعد از آپدیتهای متعدد حتا تا ۴٫۸ نگران اجرای برنامههاش باشه. همهچیز بهخوبی کار خواهد کد. در واقع از لحاظ productivity تا زمانی که کاربر برنامهٔ جدیدی رو نصب نکرده، لازم نیست حتا آپدیت کنه. سریهای ماژور خیلی دیر به دیر آپدیت میشن. شاید حدود هر پنج-شش سال یکبار.
p{direction:rtl;text-align:right}. میشه یه آپدیتر برای کیوت نوشت. اما دردسرها و مشکلات خاص خودش رو خواهد داشت. ایدهٔ خوبییه. ولی سرور میخواد، پشتیبانی دائمی میخواد...