دنیای تکنولوژی و هوش مصنوعی

دنیای تکنولوژی و هوش مصنوعی

دنیای تکنولوژی و هوش مصنوعی

دنیای تکنولوژی و هوش مصنوعی

۱۷ مطلب در آبان ۱۳۹۸ ثبت شده است

  • ۰
  • ۰

گویش برنامه نویسی جاوا (JAVA) در 23 مه 1995 (برابر با 2 خرداد ماه 1374) از سوی جیمز گاسلینگ (James Gosling) پباده سازی شده‌است. جاوا به مدرک وب سایت دارای اعتبار Tiobe از سال 2001 همواره تحت عنوان اولی یا این که دومی لهجه برنامه‌نویسی جهان مطرح بوده میباشد. در تصویر تحت درصد جایگاه کسب گردیده این گویش را فی مابین همگی گویش‌های برنامه‌نویسی در طی 18 سال اخیر مشاهده میکنید.

 

تا جایی که به جاوا مربوط می‌گردد، همگی چیز از اوایل ده سال 1990 ابتدا شد، یعنی وقتی که کمپانی سان مایکروسیستمز (Sun Microsystems) استارت به گسترش ورژن بهتری از ++C کرد که بتواند به سادگی پرتابل شود، برای اشخاص مبتدی و تازه کار مناسب باشد و به رئیس خود کار خاطر بپردازد. پژوهش ها این موسسه سبب به رفتار یک گویش به طور کاملً نو شد که اسم آن از بین آبادی‌ها اسم پیشنهادی در اتاق گردهمایی معرفیش تعیین شد. امروزه لوگوی جاوا به طور فنجان قهوه‌ای که از آن بخار می‌دمد، به علامت جهانی برنامه‌نویسی تبدیل شده‌است. در واقع دیگر کسی نمی‌داند که رابطه برنامه‌نویس‌ها با کافئین سابق‌خیس میباشد؛ یا این که ارتباطشان با جاوا که امروزه مترادف و هم معنی با قهوه میباشد.

 


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

 

جاوا چه میباشد؟
جاوا یک گویش برنامه‌نویسی چندمنظوره و شی‌گرا میباشد که تا حدودی متعددی به C و ++C شباهت داراست؛ البته به کارگیری از آن سهل وآسان‌خیس میباشد و قابلیت و امکان ایجاد برنامه‌هایی قادر با آن موجود هست. ولی تعریفی که کمپانی سان مایکروسیستمز در سال 2000 ارائه نموده است، شاید از تعریف و تمجید فوق گویاتر باشد:

 

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

 

به‌دنبال هرکدام از مختصات فوق را به نحوه مستقل‌ای گزینه باز نگری قرار می دهیم:

 

جاوا یک لهجه بی آلایش میباشد
جاوا در بالا بر پایه ی گویش‌های C و ++C و با حذف بعضی خصوصیت‌هایی که امکان سردرگم کننده داشتند مدلسازی شد. از گزاره این خصوصیت‌ها می‌قدرت به اشاره‌گرها، پیاده‌سازی چندباره وراثت و لود بیش تر از حد عملگرها اشاره نمود که در جاوا حذف شدند. یکی خصوصیت‌هایی که در C++/C وجود نداشت؛ البته جزو خصوصیت‌های اساسی جاوا به شمار میاید، قابلیت و امکان بازیافت خاطر (garbage-collection) میباشد که به صورت خود کار شی ءها و آرایه‌های بی استعمال را حذف میکند.

 

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


جاوا یک گویش مبنی بر کانال میباشد
کتابخانه پهناور کانال در جاوا منجر شده‌است که قابلیت و امکان عمل با پروتکل در اختیار گرفتن انتقال/پروتکل وب (TCP/IP) و پروتکل‌های کانال مانند HTTP (پروتکل انتقال ابرمتن) و FTP (پروتکل انتقال پوشه) معمولی‌خیس شود و همینطور وظیفه تولید اتصال‌های کانال آسوده‌خیس گشته میباشد. به علاوه برنامه‌های جاوا میتوانند از روش کانال TCP/IP، از روش URLها، به اشیاء دسترسی داشته باشند و این دسترسی به به عبارتی آسانی دسترسی روی سیستم فولدر محلی میباشد.

 

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

 

جاوا یک لهجه مستحکم میباشد


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

 

جنبه دیگری که موجب استحکام جاوا می شود، این میباشد که رینگ‌ها به جای عبارت‌های عدد درست که در آن 0 برابر «اشتباه» و مقادیر غیر صفر برابر با «صحیح» می‌باشند، می بایست توسط عبارت‌های بولی در اختیار گرفتن شوند. به عنوان مثال برخلاف C، در جاوا رینگ‌هایی مانند عبارت تحت

 

++while (x) x

مجاز نیستند؛ چون این رینگ ممکن میباشد در جایی که انتظار می‌رود متوقف نشود. به جای آن می بایست عبارت‌های بولی صریحی مانند ذیل

;++while (x!= 10) x

استعمال شود، یعنی رینگ تاهنگامیکه x برابر با 10 شود، اجرا خواهد شد.

جاوا یک لهجه امن میباشد
برنامه‌های جاوا در دور و بر‌های کانال‌بندی گردیده/ توزیع یافته آیتم به کارگیری قرار می گیرند. ازآنجاکه برنامه‌های جاوا میتوانند روی پلتفرم‌های متعدد کانال اجرا شوند، امن ساختن این پلتفرم‌ها در قبال کدهای مخرب که موجب توسعه ویروس‌ها، سرقت داده ها کارت‌های بانکی یا این که اجرای اعمال خرابکارانه میگردند، امری دارای اهمیت میباشد. خصوصیت‌هایی که موجب استحکام لهجه جاوا میگردند دربرگیرنده ترک اشاره‌گرها می باشند که به یاروهمدم خصوصیت‌های امنیتی مانند نوع امن sandbox جاوا و کدگذاری کلید همگانی عمل مینمایند. این دو مدل از خصوصیت‌ها در کنار هم از تأثیر ویروس‌ها و دیگر کدهای خطرناک روی پلتفرم‌های مشکوک خودداری می نمایند. جاوا از دید تئوریک امن میباشد؛ ولی در کار زخم‌پذیری‌های امنیتی مختلفی شناسایی و آیتم سوءاستفاده قرار گرفته میباشد. در سود در حین‌های گذشته، کمپانی سان مایکروسیستمز و اکنون کمپانی اوراکل همواره مبادرت به تکثیر به‌روزرسانی‌های امنیتی برای جاوا مینمایند.

 

 


جاوا یک گویش سوای معماری میباشد


کانال‌ها موجب اتصال پلتفرم‌هایی با معماری متعدد ریزپردازنده‌ها و سیستم‌های استدلال میشوند. نمی‌اقتدار انتظار داشت که جاوا راهبرد‌های یگانه پلتفرم را تولید نماید و انتظار داشته باشد که‌این راهبرد‌ها از سوی تمامی گونه های پلتفرم‌هایی که بخشی از کانال میباشند ادراک شود. در ازای جاوا راهبرد‌های بایت‌کد غیر وابسته از پلتفرم ساخت می‌نماید که تعبیر آن برای هر پلتفرم (از روش پیاده‌سازی JVM) سهل وآسان میباشد.

 

جاوا یک لهجه پرتابل میباشد
عدم تعلق به معماری موجب پرتابل شدن جاوا شده‌است. با این حالا پرتابل بودن جاوا چیزی بالاتر از جدا بودن راهبرد‌های بایت‌کدها از پلتفرم میباشد. مثلا در حیث بگیرید که اندازه گونه عدد درست روی پلتفرم‌های گوناگون یکسان خواهد بود. برای مثال یک جور عدد درست 32 بیتی، صرف‌لحاظ از این که روی پلتفرم‌های با رجیسترهای 16 بیتی، 32 بیتی یا این که 64 بیتی پردازش شود؛ در هر درحال حاضر به طور نشانه‌دار بوده و 32 بیت از یاد را اشغال مینماید. کتابخانه‌های جاوا نیز به پرتابل بودن آن امداد میکنند. این کتابخانه‌ها در مورد ها ضروری، گونه های داده‌ای را ارائه میکنند که به روشی تا حد قابلیت و امکان پرتابل، کد جاوا را به امکان‌های یگانه پلتفرم متصل می‌سازد.

جاوا یک لهجه با تلاش بالا میباشد
خصوصیت تفسیری بودن جاوا موجب شده‌است کارایی بالایی داشته باشد که در اکثر موردها بیشتراز حد کفایت میباشد. جاوا در خصوص نرم افزار‌های با سعی بسیار بالا از کامپایل درجا (just-in-time) به کارگیری میکند یعنی راهبرد‌های بایت‌کد تعبیروتفسیر گردیده را محاسبه میکند و دستورهای تعبیر گردیده با بسامد بالا را به راهبرد‌های یگانه پلتفرم کامپایل مینماید. سعی‌های بعدی برای تعبیر این راهبرد‌های بایت‌کد موجب اجرای به عبارتی راهبرد‌های یگانه پلتفرم می‌گردد و بنابراین سعی قابل انعطاف‌افزار را افزایش می بخشد.

جاوا یک لهجه یک‌سری نخی (multithread) میباشد
جاوا برای افزایش عملکرد برنامه‌هایی که تعدادی وظیفه را به یک باره اجرا مینمایند، از مضمون‌ اجرای تعدادی نخی پشتیبانی میکند. برای مثال برنامه‌ای که رابط گرافیکی استفاده کننده (GUI) را رئیس می کند و در همین درحال حاضر درانتظار محل ورود از یک اتصال کانال میباشد، از نخ (thread) دیگری به جای نخ GUI برای این انتظار به کارگیری می‌نماید. به این ترتیب رابط گرافیکی برنامه همچنان پاسخگو میباشد. ابتکارهای همگام‌سازی جاوا به نخ‌ها اذن می دهد که داده‌ها را سوای هیچ تأثیر مخربی میان خویش مبادله نمایند.

 

معرفی بهترین زبان های برنامه نویسی(آپدیت)

 

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

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

ریشه‌های پیدایش جاوا
جاوا از سوی تیمی در کمپانی سان مایکروسیستمز به رهبری جیمز گاسلینگ پیشرفته و در سال 1995 منتشر شد. این لهجه متعاقباً از سوی کمپانی اوراکل خریداری شده‌است.

انگیزه اصلی خالقان جاوا این بوده که زبانی را تولید نمایند که بتوانند آن را روی کاربردهای مصرفی اجرا نمایند. این طراحان می‌توانسته‌اند دنیایی را تصور نمایند که در آن کدها روی یخچال فریزر یا این که دستگاه توستر اجرا می شوند، یعنی آن چه که امروز به اسم وب شی ءها میشناسیم. ما صرفا در طی سال‌های اخیر دستگاه‌هایی ساخته‌ایم که چنین قابلیت و امکان‌هایی داشته باشند و از این رو بایستی اظهار کرد که‌این طراحان نخستین بسیار از روزگار خویش جلوتر بوده‌اند. انگیزه پباده سازی این لهجه سبب ساز به چنین معماری برای آن شده‌است. یک کدام از شعارهای مهم لهجه برنامه جاوا چنین میباشد: «یک توشه بنویس، تمامی جا اجرا کن». به بیان دیگر شما با جاوا میتوانید کدی بنویسید که آن را برای اجرای روی هر دسته دستگاهی کامپایل نمائید.

البته نکته جذاب این میباشد که جاوا به جهت این خصوصیت خویش دوستداشتنی نشده میباشد؛ بلکه از مزیت فناوری نوظهوری که در به عبارتی نصفه‌های ده سال 90 میلادی ظهور یافت و رخ عالم را دگرگون ایجاد فایده گرفت؛ خواسته ما فناوری اینترنت میباشد. جاوا این قابلیت و امکان را داشت که با آن می شد برنامه‌هایی به اسم applet نوشت. این اپلت‌ها برنامه‌های کوچکی بودند که میشد باطن مرورگرهای اینترنت آن‌ها‌را اجرا کرد. با رویش خیره‌کننده اینترنت جاوا نیز سوار این موج شد و به یک گویش برنامه‌نویسی بسیار دوست داستنی تبدیل شد. به این ترتیب علی‌رغم این که قصد اول طراحان این گویش چیز دیگری بود؛ البته اکثری از اینترنت نرم افزار‌ها به گویش جاوا نوشته شدند.

حقیقت این میباشد که طراحان اول گویش برنامه‌نویسی تا حدود متعددی ذیل تأثیر گویش‌هایی مانند C و ++C بوده‌اند و جاوا نیز شباهت‌های فرمان زبانی متعددی با این لهجه‌ها دارااست. خالقان جاوا از این لهجه‌ها تحت عنوان مثال‌ای برای انجام امور به کار گیری کردند و از این رو خصوصیت‌های خاصی وجود داشتند که طراحان جاوا قصد نداشتند در جاوا آنان‌را پیاده‌سازی نمایند، زیرا پیش از اینً اثبات گردیده بود که در C و C++ موجب بروز مشکلاتی می گردند.

 

ورژن‌های متفاوت جاوا


کمپانی سان مایکروسیستمز، کیت گسترش قابل انعطاف‌افزاری (JDK) شماره 1.0 جاوا را در سال 1995 منتشر نموده است. این JDK ابتدا برای گسترش نرم افزار‌های دسکتاپ و اَپلت (applet) گزینه به کار گیری قرار گرفت. متعاقباً جاوا برنامه‌نویسی دستگاه‌های گوشی و سرورهای تجاری را نیز درین کیت میسر ایجاد. ذخیره‌سازی تمامی کتابخانه‌ها در یک JDK منفرد منجر گردیده که‌این کیت بسیار پهناور‌خیس از حد مطلوب برای توزیع شود. ولی می بایست این نکته را در لحاظ داشته باشید که توزیع قابل انعطاف‌افزارها در ده سال 1990 بوسیله CD های اندازه کوچک و یا این که از روش سرعت‌های تحت کانال رخ می‌گرفته میباشد. از‌آن‌جا‌که اکثر وقت ها بسط‌دهندگان به همگی API ها نیاز نداشتند (یک گسترش‌دهنده نرم افزار‌های دسکتاپ به تدریج به API های سرورهای تجاری نیاز پیدا میکند) کمپانی Sun این ایراد توزیع را با تقسیم جاوا به سه ورژن حل کرد. این ورژن‌ها نهایتاً به اسم JAVA SE، JAVA EE و JAVA ME نامیده شدند که درپی هرکدام را توضیح داده‌ایم.

پلتفرم جاوا، ورژن استاندارد (Java SE)- این ورژن از جاوا برای گسترش نرم افزار‌های سمت کلاینت که روی رایانه‌های رومیزی اجرا میگردند، و اپلت‌ها که روی مرورگرهای اینترنت اجرا میشوند، پباده سازی شده‌است.
پلتفرم جاوا ورژن انترپرایز (Java EE)- این ورژن از جاوا بر مبنای JAVA SE پباده سازی گردیده و به صورت انحصاری برای بسط نرم افزار‌های سرور با گرایش سازمانی به کار گیری می گردد. نرم افزار‌های سمت سرور دربرگیرنده سرولت‌ها (Servlet) میشود که برنامه‌های جاوای شبیه اپلت می باشند؛ ولی به جای کلاینت روی سرور اجرا میشوند. سرولت‌ها از API Java EE Servlet به کارگیری مینمایند.
پلتفرم جاوا، ورژن میکرو (Java ME) – این ورژن از جاوا بر مبنای JAVA SE پباده سازی شده‌است. این پلتفرم برای توسعه و گسترش میدلت‌ها (MIDlet) استعمال می‌گردد که برنامه‌های جاوایی می باشند که روی دستگاه‌های اطلاعاتی تلفن همراه اجرا می شوند. ایکس‌لت (Xlet) ها نیز برنامه‌های جاوایی می باشند که روی دستگاه‌های مونتاژی اجرا می شوند.
JAVA SE پلتفرم اصلی جاوا میباشد و پلتفرم‌های دیگر بر مبنای آن پباده سازی گردیده‌اند.

مروری بر پلتفرم جاوا
جاوا هم یک گویش برنامه‌نویسی و هم پلتفرمی برای اجرای کد جاوای کامپایل شده‌است. این پلتفرم به صورت عمده مشتمل بر JVM میباشد؛ البته دور و اطراف اجرایی را نیز مشتمل بر می گردد که از اجرای JVM روی پلتفرم‌های زیرساختی مستقر پشتیبانی می کند. JVM خویش مشتمل بر تعدادی جزء برای بار گذاری، تأیید و اجرای کد جاوا میباشد. در تصویر پایین نحوه اجرای یک کد جاوا روی این پلتفرم را مشاهده می کنید.


JVM دربرگیرنده یک مولفه (کامپوننت) classloader، verifier بایت‌کد و یک مفسر و کامپایلر در جا برای بار گذاری، تأیید و اجرای یک پوشه کلاس میباشد.
در بخش فوقانی نمودار فوق یکسری از فولدر‌های کلاس برنامه را مشاهده می کنید که یکی آن ها به اسم پوشه کلاس اصلی نامیده شده‌است. برنامه جاوا دست‌کم بایستی یک پوشه کلاس اصلی داشته باشد که اولیه کلاسی میباشد که بار گذاری، تأیید و اجرا خواهد شد.

JVM لود کلاس را به مولفه classloader می‌سپارد. Classloader فولدر‌های کلاس را از منابع متعدد مانند سیستم‌های فولدر، کانال‌ها و فولدر‌های فشرده بار گذاری می کند. این مولفه، JVM را از مسائل و خطاها مربوط به بار گذاری کلاس بر حذر می دارد.

یک پوشه کلاس لود گردیده در خاطر محافظت می شود و به طور یک شی ساخت گردیده از کلاس Class اکران می یابد. هنگام بار گذاری، bytecode verifier راهبرد‌های متعدد بایت‌کد را باز‌نگری می کند تا مطمئن شود که دارای اعتبار می‌باشند و امنیت را به مخاطره نمی‌اندازند.

چنانچه بایت‌کد فولدر کلاس دارای اعتبار نباشد، JVM خاتمه مییابد. در غیر این فیس مولفه مفسر آن، بایت‌کد را یک به یک به راهبرد‌ها تعبیروتفسیر می کند. در‌این فرآیند تعبیر و تفسیر، راهبرد‌های بایت‌کد شناسایی گردیده و راهبرد‌های ساکن هم اندازه آن ها اجرا می شوند.

بعضی توالی‌های راهبرد‌های بایت‌کد بیش از سایر موردها تکرار می شوند. هنگامی مفسر این حالت را تشخیص می دهد، کامپایلر درجای JVM به اسم JIT این توالی‌های بایت‌کد را به کد ساکن کامپایل مینماید تا سریع‌خیس اجرا شوند.

در حین اجرا، مفسر معمولاً با درخواستی برای اجرای بایت‌کد فولدر کلاس دیگر مواجه می گردد که بدین برنامه یا این که یک کتابخانه وابستگی دارااست. در چنین مواقعی classloader فولدر کلاس را لود می‌نماید و bytecode verifier بایت‌کد پوشه کلاس لود گردیده را پیش از اجرا تأیید مینماید. همینطور در حین اجرا نیز راهبرد‌های بایت‌کد ممکن میباشد از JVM بخواهند که یک فولدر را گشوده نماید، چیزی را روی کاغذ اکران دهد، صدایی تولید نماید یا این که وظیفه دیگری انجام دهد که مستلزم همیاری با پلتفرم مستقر میباشد. درین موردها JVM با استعمال از رابط ساکن جاوا (JNI) که یک پل فناوری برای تعامل با پلتفرم ساکن برای اجرای وظایف میباشد این فعالیت را انجام می دهد.

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

دسته دینامیک
در حالتی‌که تا به امروز تجربه عملی برنامه‌نویسی داشته باشید، با مضمون‌ متغیر آشنا میباشید. در گویش‌های با گونه دینامیک مانند روبی یا این که جاوا اسکریپت می‌اقتدار متغیری را سوای این که دسته داده ذخیره گردیده‌اش معلوم باشد، اعلان کرد. این متغیر از دسته دینامیک میباشد و مقدار آن میتواند هر چیزی مانند یکی، پاراگراف و یا این که غیره باشد.

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

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

چه لهجه‌هایی از جاوا مشتق گردیده‌اند؟
بعضی گویش‌ها مانند اسکالا (Scala) و گرووی (Groovy) وجود دارا‌هستند که برای اجرا روی JVM پباده سازی گردیده‌اند و یا این که لهجه‌هایی می باشند که برای اجرا روی فضا جاوا پیشرفته‌اند. همینطور ممکن میباشد بعضا اشخاص داعیه نمایند که لهجه C# تا حدود متعددی پایین تأثیر جاوا پیشرفته میباشد. گویش سی شارپ مایکروسافت بعداز جاوا گسترش یافت و به صورت مختص به مقدار متعددی از جاوا الهام گرفته میباشد. سی شارپ موجب بعضی بهبودها در جاوا نیز شده‌است و از این رو این دو گویش به صورت متقابل بر هم تأثیرگذار بوده‌اند.

جاوا چه تفاوتی با جاوا اسکریپت دارااست؟
هیچ ارتباط فنی در میان جاوا و جاوا اسکریپت نیست. جاوا اسکریپت از سوی نت اسکیپ (Netscape) در ده سال 90 میلادی پیشرفته میباشد و در بالا LiveScript نامیده می شد. وقتی که نت اسکیپ رویت کرد هیچ کس از LiveScript به کارگیری نمی‌نماید و جاوا محبوبیت روزافزونی دارااست، اسم آن را به جاوا اسکریپت تغییر و تحول اعطا کرد تا بتوانند از این موج محبوبیت جاوا سود‌مند شوند. در واقع این ایده برنده بود و جاوا اسکریپت نیز دوست داستنی شد؛ البته از منظر فنی هیچ ارتباط‌ای دربین این دو نیست و فقطً دارنده تشابه اسمی میباشند. شاید فقط مشابهت فنی فی مابین جاوا و جاوا اسکریپت را در‌این بدانیم که هر دو آن ها امر زبانشان را از گویش برنامه‌نویسی C گرفته‌اند. به همین ادله در شرایطی که با جاوا آشنا باشید، در‌این حالت یادگیری جاوا اسکریپت سهل خواهد بود و برعکس.

  • behnam behnam
  • ۰
  • ۰

ابزار ساخت بازی Game Builder توسط گوگل معرفی شد. با استفاده از آن خواهید توانست بدون نیاز به داشتن دانش برنامه‌نویسی، از طریق درگ اند دراپ عناصر مختلف، بازی‌های ویدیویی جذاب درست کنید

 

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

مشکل این روش، نیاز به یادگیری برنامه‌نویسی و سپس کار با ابزارهای ساخت بازی حرفه‌ای است. گیمرها، اعم از سخت‌پسند یا غیر سخت‌گیر، دوست دارند وقت آزاد خود را به وسیله اجرای یک بازی پر کنند و تمایلی به یادگیری برنامه‌نویسی ندارند. Area 120 متعلق به گوگل، ابزار ساخت بازی Game Builder را برای این گیمرها ایجاد کرده است. با استفاده از آن بدون نیاز به داشتن دانش برنامه‌نویسی و کار با ابزارهای حرفه‌ای ساخت بازی‌های ویدیویی قادر خواهید بود از طریق درگ اند دراپ عناصر مختلف، یک بازی جدید برای خود ایجاد کنید!

در ابزار ساخت بازی Game Builder علاوه بر امکان ساخت دنیای منحصربه‌فرد بازی ویدیویی خود، می‌توانید نحوه تعامل گیمر با عناصر مختلف که معمولا از طریق کدنویسی مشخص می‌شود را نیز تعیین کنید. این ابزار بازی‌سازی از طریق طرح یک سری پرسش، به گزینه‌های ایده‌آل شما برای یک بازی ویدیویی خوب پی‌ می‌برد.

آن دسته از کاربرانی که با زبان برنامه‌نویسی جاوااسکریپت آشنایی دارند، قادر خواهند بود به وسیله کدنویسی قسمت‌هایی از بازی، آن را حرفه‌ای‌تر کرده و دقیقا به شکل دلخواه در بیاورند. خوشبختانه ابزار ساخت بازی Game Builder رایگان است. برای استفاده از این بازی‌ساز به وب سایت Steampowered مراجعه کنید.

منبع :ubergizmo

  • behnam behnam
  • ۰
  • ۰

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

 

امروز مایکروسافت در جدیدترین اقدامش برای گسترش اپلیکیشن های خود، ابزاری را برای توسعه برنامه های ویندزو فون، در اختیار کاربران قرار داد. نسخه بتای Windows Phone App Studio در حال حاضر در دسترس است و این امکان را فراهم می کند تا هرکسی، بدون کوچکترین دانش برنامه نویسی، از طریق وب اقدام به ساخت اپلیکیشن برای ویندوز فون کند. در واقع این ابزار مجموعه ای از قالب های آماده است که به کاربر اجازه می دهد با ترکیب کردن متن، عکس و … برنامه مورد نظر خود را ایجاد کند.

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

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

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

منبع : theverge

  • behnam behnam
  • ۰
  • ۰

چند روز قبل شایعاتی به گوش رسید مبنی بر اینکه گوگل می خواهد شاخه ای از زبان برنامه نویسی اپن سورس اپل یعنی سوئیفت (Swift) را به خدمت بگیرد، البته مشخص نبود آیا این کمپانی تغییرات خاص خودش را در آن اعمال می کند یا خیر تا اینکه «کریس لتنر» خالق سوئیفت به شفاف سازی ماجرا پرداخت:

افراد زیادی در گوگل از سوئیفت استفاده می کنند و به همین دلیل به یکپارچگی و اجماع نیاز داریم، بنابراین تصمیم گرفتیم موضوع را علنی کنیم.

 

ظاهراً گوگل کپی ویژه ای از این کد را می خواهد تا بتواند تغییراتی را در آن اعمال نموده و به مخزن رسمی سوئیفت اضافه نماید. همین حالا هم در مخزن رسمی سوئیفت بخش تازه ای به نام «ساپورت فیوشا» (Fuchsia Support) ایجاد شده و یکی از توسعه دهندگان مطرح گوگل به نام «زک بولینگ» که چند سال قبل «آبجکتیو C» را به اندروید پورت کرد هم این موضوع را تأیید کرده است.

 

از طرفی، سیستم بازبینی کد گوگل هم می تواند نمونه ای از اپلیکیشن نوشته شده با سوئیفت برای سیستم عامل فیوشا را به شما نشان دهد که هنوز اجرا نمی شود، اما به محض اعمال تغییرات مورد نظر گوگل در سوئیفت قابل اجرا خواهد بود.

ردپای اکثر زبان های برنامه نویسی در فیوشا دیده می شود

توسعه سیستم عامل جدیدی به نام فیوشا (Fuchsia) توسط گوگل بر هیچکس پوشیده نیست، اما نکته مبهم اینجاست که هیچکس نمی داند این OS چه استفاده ای دارد و جایگزین چه چیزی می شود. هسته این سیستم عمدتاً با استفاده از زبان های C و ++C نوشته شده و رابط کاربری آن هم بر پایه Dart است، اما ردپای زبان های دیگری مانند Go، پایتون، Rust و حالا سوئیفت هم در آن دیده می شود.

گفتنیست قابلیت کامپایل کردن اپ های سوئیفت برای اجرا روی فیوشا بدین معنا نیست که تمامی اپلیکیشن های iOS روی سیستم عامل جدید گوگل پورت می شوند، چون اپل فقط از سورس اصلی سوئیفت استفاده می کند و مابقی پلتفرم iOS کاملاً بسته است، بنابراین توسعه دهندگان از بیرون پلتفرم به کتابخانه ها دسترسی ندارند.

 

یکی از احتمالات این است که گوگل، فیوشا را به عنوان پلتفرم پایه و همه کاره برای اپلیکیشن ها توسعه می دهد تا هسته اصلی برنامه را به زبان دلخواه خود (Go، سوئیفت، Rust، جاوا اسکریپت و غیره) بنویسید و سپس UI اختصاصی را برای پلتفرم های مختلف (اندروید، iOS، فیوشا، لینوکس، ویندوز و وب) به آن اضافه کنید.

در مجموع، خوره های برنامه نویسی در دوران هیجان انگیزی به سر می برند و شاید اکنون بهترین زمان باشد تا به توسعه اپلیکیشن روی بیاورید.

  • behnam behnam
  • ۰
  • ۰

اپل به تازگی استارتاپ کانادایی «Buddybuild» را تصاحب کرده که در زمینه ابزارهای توسعه نرم افزار برای برنامه نویسان تخصص دارد. این خرید اپل به توسعه دهندگان اپلیکیشن های اپ استور کمک می کند که راحت تر برنامه های خود را توسعه دهند.

خبر این خرید اپل دیروز اعلام شده البته در حال حاضر مبلغی که اپل برای خرید استارتاپ مذکور پرداخته، مشخص نشده. قرار است کارمندان استارتاپ کانادایی به گروه مهندسان Xcode بپیوندد.  Xcode مجموعه ای از ابزارهای توسعه نرم افزار است که برنامه نویسان می توانند با استفاده از آن برای محصولات اپل، از جمله آیفون، کامپیوترهای مک و اپل واچ اپلیکیشن تولید کنند.

کمپانی Buddybuild در چه زمینه ای فعالیت می کرد؟

بر اساس اطلاعات پروفایل لینکدین Buddybuild در سال 2015 در ونکووِر تأسیس شده و 40 کارمند در آن مشغول به کار بوده اند. این استارتاپ اخیراً به ارزشی معادل 7.6 میلیون دلار دست یافته بود.

 

 

کمپانی یاد شده در بیانیه خود اعلام کرده بود: «ما همیشه به این که یک شرکت کانادایی هستیم افتخار می کنیم و از حضور در ونکووِر خرسندیم،؛ [شهری که] میزبان توسعه دهندگان و مهندسان با استعداد است».

بر اساس ادعای پیشین این استارتاپ، Buddybuild تنها پلتفرم یکپارچه موبایل را ساخته است. بدین ترتیب ابزار آنها برای تیم های برنامه نویسان، تغییر کدها در پروژه های بزرگ را بسیار ساده می کند.

چه اتفاقی برای سایر خدمات این کمپانی در حوزه اندروید خواهد افتاد؟

با این حال برنامه نویسانی که از ابزارهای نرم افزای این کمپانی برای ساخت اپ های اندروید استفاده می کردند، پس از 10 اسفند ماه سال جاری قادر به استفاده از آن نخواهند بود.

 

همچنین مسئولان این کمپانی در بیانیه ای اعلام کرده اند که از این پس مشتری جدیدی را برای خدمات خود نخواهند پذیرفت و خدمات به مشتریان رایگان نیز از 10 اسفند ماه پایان خواهد یافت.

اپل ادعا می کند که همواره تلاش کرده توسعه دهندگان نرم افزارهای مبتنی بر سخت افزارهای خود را راضی نگه دارند. به نظر می رسد تصاحب استارتاپ یاد شده، کمپانی ساکن کوپرتینو را به این هدف نزدیک تر نماید.

پیشنهاد می کنیم اگر در مورد خریدهای احتمالی آتی اپل کنجکاو هستید، مطلب دیجیاتو در مورد لیست خرید های آتی اپل را مطالعه نمایید.

  • behnam behnam
  • ۰
  • ۰

تیم کوک اخیرا در جریان سخنرانی برای دانشجویان به اهمیت یادگیری برنامه نویسی و اثرات مخرب شبکه های اجتماعی پرداخته است.

در سال های اخیر شبکه های اجتماعی از فیسبوک و توییتر گرفته تا اینستاگرام چنان تاثیر عمیقی را بر زندگی کاربران داشته اند که حتی موسس سابق فیسبوک نیز نسبت به اثرات مخرب آنها به ویژه روی کودکان هشدار داده اند.

روز  گذشته تیم کوک، مدیرعامل اپل نیز طی سخنرانی برای داشجویان Harlow College بریتانیا به این مساله اشاره کرد:

من بچه ندارم اما برای برادزاده ام محدودیت هایی قائل شده ام و ترجیح می دهم او در شبکه های اجتماعی حضور نداشته باشد.

برادرزاده کوک به زودی 13 ساله می شود و مدیرعامل اپل اعلام کرده که پس از پردخت هزینه های دانشگاه او قصد دارد داراییش را صرف امور خیریه کند.

به هر حال سن قانونی برای افتتاح حساب در فیسبوک 13 سال است و باید دید این نوجوان خود چه تصمیمی دارد. هرچند بسیاری عقیده دارند که تعداد کاربران زیر 13 سال این شبکه اجتماعی بالغ بر 7.5 میلیون نفر است.

تیم کوک

البته کوک تنها کسی نیست که شبکه های اجتماعی را به باد انتقاد می گیرد و سال گذشته حتی پاپ فرانسیس نیز خواستار دوری از زندگی غیر واقعی شد که در شبکه های اجتماعی به تصویر کشیده می شود.

کوک در بخش دیگری از سخنرانی خود تاکید کرد که اگر قرار است بین یادگیری یک زبان خارجی یا برنامه نویسی یکی را انتخاب کنید بهتر است گزینه دوم را دنبال کنید:

می دانم که ممکن است برخی با نظر من موافق نباشند اما  برنامه نویسی زبانی جهانی است که می توانید از طریق آن با 7 میلیارد نفر صحبت کنید.

او عقیده دارد که در حال حاضر برابری جنسیتی در موسسه های آموزش علوم کامپیوتر وجود ندارد اما با آموزش برنامه نویسی در سنین پایین می توان به این مهم دست پیدا کرد.

  • behnam behnam
  • ۰
  • ۰

بر اساس گزارش موسسه Redmonk زبان برنامه نویسی سوئیفت اپل برای اولین بار توانسته در آخرین سه ماهه جاری میلادی، به لیست 10 زبان برتر برنامه نویسی راه یابد.

موسسه مذکور که در زمینه تحلیل های مرتبط با توسعه دهندگان نرم افزار فعالیت می کند، از سال 2011 تاکنون در دوره های 3 ماهه اقدام به انتشار لیست زبان های برنامه نویسی محبوب می نماید. بر اساس گزارش این موسسه زبان سوئیفت از ابتدای معرفی تاکنون بیشترین میزان رشد استفاده در بین برنامه نویسان را داشته است.

بنا بر این گزارش، پیشرفت یاد شده برای زبانی که تنها حدود 4 سال از معرفی آن می گذرد، چشمگیر است. در رده بندی اخیر سوئیفت موفق شده نزدیک به زبان شیء گرای آبجکتیو-سی قرار بگیرد. البته جلو زدن از این زبان برای سوئیفت کار مشکلی است، ولی در آینده، چندان هم دور از ذهن به نظر نمی رسد.

محور افقی میزان محبوبیت زبان ها در GitHub و محور عمودی میزان محبوبیت در Stack Overflow را نشان می دهد. برای مشاهده نمودار در اندازه بزرگتر روی آن کلیک کنید.

موسسه Redmonk اطلاعات آماری خود را از کاربران وبسایت های محبوب توسعه دهندگان  GitHub و Stack Overflow تهیه کرده. در واقع اطلاعات کدها از GitHub و اطلاعات مرتبط با بحث های برنامه نویسان از Overflow به دست آمده و از ترکیب این موارد، آمار مذکور حاصل شده است.

البته در عین حال Redmonk اشاره کرده که این روش نشان دهنده اطلاعات آماری دقیقی از استفاده فعلی از زبان های برنامه نویسی نیست. ولی می تواند ارتباط بین بحث های مرتبط با زبان های برنامه نویسی و میزان استفاده از آنها را نشان دهد و میزان پتانسیل آینده پذیرفته شدن آنها (از سوی برنامه نویسان) را نمایان کند.

به عبارت دیگر ممکن است میزان استفاده از  زبان های برنامه نویسی متفاوت با این رتبه بندی باشد، ولی آمار به دست آمده از GitHub و Stack Overflow می تواند به ما نشان دهد که برنامه نویسان در حال گرایش به سمت کدام زبان ها هستند. در ادامه می توانید لیست ده زبان برنامه نویسی برتر را مشاهده نمایید:

1- جاوا اسکریپت

2- جاوا

3- پایتون

4- PHP

5- #C

6-  ++C

7- CSS

8- Ruby

9- C

10- سوئیفت مشترکاً با آبجکتیو-سی

  • behnam behnam
  • ۰
  • ۰

در این جلسه از آموزش می‌خواهیم از برنامه‌ی اکلیپس یا به عبارتی از IDE اکلیپس برای نوشتن برنامه‌های جاوا استفاده کنیم. IDE مخفف: Integrated Development Environment است. در واقع IDE‌ ها تمام ابزارهای مورد نیاز برای برنامه نویسان را به طور منظم فراهم می‌کنند تا برنامه نویسان فقط روی نوشتن و طراحی برنامه تمرکز کنند و خود را درگیر مسائل جزئی مثل کامپایل کردن برنامه نکنند.

سلسله مطالب آمورش جاوا

 برای هریک از زبان‌های برنامه نویسی، IDE های بسیار زیادی وجود دارد و می‌توان با همه‌ی آن‌ها برنامه را به درستی نوشت و اجرا کرد. اما از میان تمام IDE ها معمولا همیشه یک IDE از بقیه سرتر و بهتر است. به عنوان مثال برای زبان برنامه نویسی #C (سی شارپ) بهترین IDE، ویژوآل استودیو است. برای زبان جاوا هم IDE های زیادی وجود دارد که معروف‌ترین و محبوب‌ترین آن‌ها عبارت اند از:

  • اکلیپس (eclipse)
  • اوراکل نِت بینز (Oracle NetBeans)
  • جِت برینز اینتلیج آی دیا (Jetbrains Intellij Idea)

اکلیپس یک IDE اُپن سورس (Open Source) و مبتنی بر پلاگین (Plug-in)، و بسیار مناسب برای تولید برنامه‌های مدرن جاوا (JavaEE) است. زیرا از آنجایی که جاوا ای ای مجموعه‌ای از تکنولوژی ها است، بنابراین پلاگین‌های مختلفی برای تکنولوژی‌های مختلف تولید شده است و به راحتی می‌توان آن‌ها را از اینترنت دانلود و به اکلیپس اضافه کرد. ممکن است در ذهن شما این سوال به‌وجود بیاید که پلاگین چیست!؟ پلاگین‌ها (افزونه‌ها) برنامه‌های کوچکی هستند که توسط شرکت‌های مختلف تولید می‌شوند و با نصب آن‌ها روی یک برنامه، می‌توان قابلیت‌های جدیدی را به آن برنامه اضافه کرد. به عنوان مثال، ADT یکی از پلاگین‌های معروف برای توسعه‌ی اندروید روی اکلیپس است. متاسفانه اکلیپس دارای باگ‌های فراوانی است و علت آن هم هسته اکلیپس نیست، بلکه باگ‌هایی است که در پلاگین‌های آن موجود است. بنابراین تا می‌توان باید سعی کرد از پلاگین‌هایی که توسط شرکت‌های معتبر تولید شده‌اند استفاده کرد.

 نت بینز یک IDE حرفه‌ای و به اصطلاح همه فن حریف است. این IDE توسط شرکت اوراکل نوشته شده است و می‌توان به جز جاوا، برای زبان‌های برنامه‌نویسی دیگری هم مثل: PHP, C++, Groovy و ... نیز استفاده کرد. در این IDE هم مانند اکلیپس می‌توان پلاگین‌هایی را اضافه کرد. اما بسیاری از سرویس‌ها به صورت داخلی در این IDE پیاده‌سازی شده‌اند. به عنوان مثال وب سرور Apache Tomcat (آپاچی تامکت) به صورت داخلی در این IDE پیاده‌سازی شده است و دیگر نیازی نیست تا به صورت جدا گانه این وب سرور را دانلود و نصب کنیم. اما یکی از ویژگی‌های مهم این IDE، این است که ابزارهای بسیار حرفه‌ای برای طراحی رابط گرافیکی کاربر دارد و یکی از مشکلات بزرگ برنامه نویسان جاوا را حل کرده است.

 آخرین IDE‌ای که در مورد آن صحبت می‌کنیم، Jetbrains Intellij Idea است، که معنی "تند مغزها؛ ایده هوشمند" را دارد. این IDE یکی از بهترین ویرایشگر‌ها برای زبان برنامه نویسی جاوا است که دارای هوش فوق العاده‌ای است. اما با توجه به تجربیات شخصی و مطالعاتی که بنده در این زمینه داشتم، این IDE اصلا مناسب برای برنامه‌های مدرن جاوا (JavaEE) نیست و صرفا برای برنامه نویسی جاوا نسخه‌ی استاندارد آن و برنامه نویسی وب در جاوا می‌توان از آن استفاده کرد. همچنین این IDE همانند اکلیپس و نت بینز امکان اضافه کردن پلاگین را دارد.

باتوجه به بررسی‌های فوق، ما برای این دوره‌ی آموزشی، بهترین، محبوب‌ترین و ساده‌ترین IDE، یعنی اکلیپس را انتخاب می‌کنیم. در ادامه‌ی این آموزش، ما نحوه‌ی دانلود این IDE را آموزش می‌دهیم.

 برای دانلود اکلیپس باید به سایت اکلیپس مراجعه کنید. بعد از وارد شدن به سایت اکلیپس، با نمایی مشابه تصویر زیر مواجه می‌شوید:

01eclipse01 f18a6

همانطور که در تصویر فوق با یک بیضی سبز رنگ مشخص شده است، بر روی دکمه DOWNLOAD کلیک کنید تا وارد صفحه‌ی زیر شوید:

01eclipse02 93cd4

بعد از اینکه روی دکمه DOWNLOAD کلیک کردید، کمی صفحه را به پایین اسکرول کنید. همانطور که در تصویر فوق مشاهده می کنید، گزینه‌ای که با یک مستطیل قرمز رنگ مشخص شده را انتخاب کنید تا وارد صفحه‌ی زیر شوید:

01eclipse03 a3c0a

دوباره به همان صورتی که در تصویر فوق، با یک مستطیل قرمز رنگ مشخص شده است، نوع سیستم عامل خودتان را انتخاب کنید تا وارد صفحه‌ی زیر شوید:

 01eclipse04 18b87

همانطور که در تصویر فوق با یک بیضی سبز رنگ مشخص شده است، بر روی دکمه‌ی دانلود کنید تا وارد صفخه‌ی زیر شوید:

01eclipse05 97994

در صفحه فوق، کمی منتظر بمانید تا دانلود شروع شود. پیشنهاد می‌شود که از نرم افزار‌های مدیریت دانلود مثل IDM برای دانلود استفاده کنید.

در جلسه‌ی بعدی ما نحوه‌ی استفاده از اکلیپس را آموزش می‌دهیم.

تهیه شده درزومیت

  • behnam behnam
  • ۰
  • ۰

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

ما در این دوره آموزشی، زبان برنامه نویسی جاوا را از ابتدا و از صفر آموزش می‌دهیم. یعنی این دوره آموزشی هیچ پیش نیازی ندارد. تمرکز ما در این دوره روی نسخه استاندارد جاوا، یعنی Java SE است. جاوا زبانی بسیار گسترده و دارای تکنولوژی‌های بسیار زیادی است. ما در این دوره آموزشی قرار هست وارد این دنیای بزرگ شویم و مقدمات جاوا و در کل برنامه نویسی را یاد بگیریم.

ابتدا در مورد تاریخچه جاوا، ویژگی‌ها و بازار کار این زبان برنامه نویسی در ایران و خارج از کشور صحبت می‌کنیم.

نکته: توجه داشته باشید که مفاهیم ابتدایی بسیار مهم هستند و شما باید این مفاهیم را یاد بگیرید. تصور کنید روزی شما به یک برنامه نویس حرفه‌ای جاوا تبدیل شده‌اید. اما نمی‌دانید که جاوا در چه سالی بوجود آمده و توسط چه کسی ساخته شده و اصلا هدف از ساخت جاوا چه بوده!؟ بنابراین چند آموزش ابتدایی این دوره آموزشی که خیلی وارد مبحث کد نوشتن نمی‌شوند را به خوبی یاد بگیرید و سَر سَری از این مطالب عبور نکنید.

سپس در مورد متغیر‌ها، کلاس و متُد و نحوه به کارگیری آنها در جاوا صحبت می‌کنیم. بعد با حلقه‌های تکرار، دستورات شرطی آشنا می‌شویم و کم کم وارد مفاهیم پیشرفته‌تری مثل برنامه نویسی شی گرا می‌شویم. شی گرایی مبحث بسیار گسترده‌ای است و ما در این دوره آموزشی، شی گرایی را به طور کامل یاد می‌گیریم و درک می‌کنیم.

تا اینجای کار ما با برنامه نویسی آشنا شده‌ایم و از اینجا به بعد وارد مفاهیم سخت‌تر برنامه نویسی، مثل کنترل خطا و استثناها در برنامه، برنامه نویسی چند نخی، آشنایی با سیستم فایل، جنریک‌ها، کاراکترها و رشته‌ها، اَنوتیشِن و ... می‌شویم و بعد در آخر هم نگاهی گذرا به مفاهیم گرافیک در جاوا خواهیم داشت.

سخن آخر اینکه، برنامه نویسی هم مانند هر کاره دیگری نیاز به علاقه، پشت کار و اراده ای محکم و پولادین دارد. اگر می‌خواهید در این رشته موفق شوید، از همین ابتدای کار، این دوره آموزشی را با شور و شوق آغاز کنید. اگر با اراده و با گذشتن از کارهای غیر ضروری و وقت گذاشتن روزانه (در ابتدای کار حدودا دو ساعت در روز) برنامه نویسی را شروع کنید، مطمئنا در پایان این دوره آموزشی به یک برنامه نویس Java SE کار حرفه‌ای تبدیل می‌شوید و آماده‌ برای ورود به دنیای JavaEE هستید.

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

سایر منابعی که ما برای این دوره آموزشی استفاده کرده‌ایم:

  • کتاب برنامه نویسی جاوا از مهندس احمدرضا صدیقی
  • کتاب آموزش مبانی کامپیوتر و برنامه نویسی به زبان C++
  • استفاده از سایر آموزش‌های ویدیویی مثل آموزش‌های شرکت لیندا به اضافه‌ی تجربه شخصی خودم در برنامه نویسی جاوا.

طی روزهای پیش رو با آموزش جاوا از زومیت همراه ما باشید.

تهیه شده درزومیت

  • behnam behnam
  • ۰
  • ۰

بر اساس تعاریف جدید برنامه‌نویسی سطح پائین و برنامه‌نویسی سیستم یکی نیستند و این دو مفهوم به اشتباه یکسان فرض شده‌اند.

ترکیب دو ایده‌ی برنامه‌نویسی سطح پائین (کار با جزئیات سخت‌افزاری و پیاده‌سازی ماشین) و طراحی سیستم (ساخت و مدیریت یک مجموعه‌ی پیچیده از مؤلفه‌های مرتبط) به نظر غیرضروری می‌رسد؛ اما این قضیه تا چه اندازه صحیح است؟ و از تعریف مجدد سیستم‌ها به چه نتیجه‌ای می‌توان رسید؟

دهه‌ی ۱۹۷۰: پیشرفت اسمبلی

برای درک تکامل اصطلاح برنامه‌نویسی سیستم بازگشت به منشأ سیستم‌های کامپیوتری مدرن ضروری است. دقیقا مشخص نیست چه کسی این عبارت را اختراع کرده است اما بر اساس پژوهش‌ها تلاش‌های جدی برای تعریف سیستم‌های کامپیوتری تقریبا از اوایل دهه‌ی ۷۰ آغاز شده است. در مقاله‌ای با نام زبان‌های برنامه‌نویسی سیستم به این تعریف اشاره شده است:

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

۱. مسئله‌ی قابل حل ماهیت گسترده‌ای دارد و شامل تعداد زیادی مسائل فرعی و متنوع است.

۲. از برنامه‌ی سیستمی برای پشتیبانی از برنامه‌های کاربردی و نرم‌افزاری دیگر استفاده می‌شود اما درعین‌حال می‌تواند بسته‌ی کاملی از برنامه‌ها هم باشد.

۳. برنامه‌ی سیستمی برای تولید پیوسته طراحی شده است نه به عنوان راه‌حلی یک جا برای حل یک مشکل در برنامه‌ها

۴. برنامه‌ی سیستمی از نظر تعداد و انواع ویژگی‌های تحت پشتیبانی به صورت پیوسته در حال تکامل است.

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

این تعریف تا حدودی قابل قبول است. سیستم‌های کامپیوتری معمولا دارای مقیاس گسترده و کاربرد طولانی هستند و به مرور زمان تغییر می‌کنند. البته با این که این تعریف بیشتر توصیفی است اما چشم‌انداز اصلی آن جداسازی زبان‌های سطح پائین از زبان‌های سیستمی است (برای مثال مقایسه‌ی اسمبلی با فرترن).

زبان سیستم

هدف از زبان برنامه‌نویسی سیستم فراهم کردن زبانی است که بتوان بدون نگرانی در مورد دستکاری بیت‌ها از آن استفاده کرد و درعین‌حال به کدی دست یافت که عملکرد آن از کدهای دستی بهتر باشد. چنین زبانی باید اختصار و خوانایی زبان‌های سطح بالا را با بازدهی فضا و زمان و دسترسی به امکانات سیستم‌عامل و ماشین زبان اسمبلر را ترکیب کند. زمان طراحی، نوشتن و اشکال‌زدایی باید بدون تحمیل سربار بر منابع سیستمی به حداقل برسند. پژوهشگرهای CMU زبانی به نام BLISS (زبانی برای برنامه‌نویسی سیستم) را منتشر کرده‌اند که به این صورت تعریف می‌شود:

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

مؤلفان، زبان پیاده سازی را بالاتر از اسمبلی و پائین‌تر از زبان طراحی می‌دانند

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

در اینجا مؤلفان، زبان پیاده‌سازی را بالاتر از اسمبلی و پائین‌تر زبان طراحی می‌دانند. بر اساس پژوهش‌های قبلی، طراحی و پیاده سازی سیستم هرکدام زبان مجزایی دارند. آخرین مدخل مربوط به برنامه‌نویسی سیستم را می‌توان در یک متن آموزشی در مورد یادگیری برنامه‌نویسی سیستم مشاهده کرد که در ‍۱۹۷۲ نوشته شده است.

اما تعریف دقیق برنامه‌نویسی سیستم چیست؟

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

در اولین روزهای اختراع کامپیوتر، مردم با دستورالعمل‌های ابتدایی بین دو حالت On و Off با کامپیوتر ارتباط برقرار می‌کردند. خیلی زود مردم به دنبال دستورالعمل‌های پیچیده‌تر رفتند. برای مثال می‌خواستند خروجی این مسأله را در کامپیوتر ببینند: X=30*Y؛ با توجه به این که Y=10 در نتیجه X کدام است؟ کامپیوترهای کنونی بدون برنامه‌های سیستمی قادر به درک چنین زبانی نیستند.

برنامه نویسی سیستممبانی برنامه‌نویسی سیستم

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

دهه‌ی ۱۹۹۰: ظهور اسکریپت‌نویسی

در دهه‌ی ۷۰ و ۸۰ اغلب پژوهشگرها برنامه‌نویسی سیستم را نقطه‌ی مقابل برنامه‌نویسی اسمبلی می‌دانستند. در آن دوره ابزار خوبی برای ساخت سیستم‌ها وجود نداشت (البته هیچ اطمینانی از وجود Lisp در میان این زبان‌ها وجود ندارد هیچ کدام از منابع به Lisp اشاره نکرده‌اند، با این حال ماشین‌های Lisp وجود داشتند).

در اواسط دهه‌ی ۹۰، با ظهور زبان‌های اسکریپت‌نویسی داینامیک تغییرات عمده‌ای در زبان‌های برنامه‌نویسی رخ داد. بهبود سیستم‌های اسکریپت‌نویسی مثل Bash، زبان‌هایی مثل پرل (۱۹۸۷)، Tcl ، پایتون (۱۹۹۰)، Ruby ، PHP  و جاوا اسکریپت (۱۹۹۵) به توسعه‌ی برنامه‌نویسی کمک کرد. این تغییرات در مقاله‌ی تأثیرگذار اوسترهاوت با عنوان  اسکریپت نویسی: برنامه‌نویسی سطح بالای قرن بیست‌ویک (۱۹۹۸) به اوج خود رسیدند. به موج حاصل از این تغییرات دوگانگی اوسترهاوت بین زبان‌های برنامه‌نویسی سیستمی و زبان‌های اسکریپت‌نویسی گفته می‌شود.

زبان‌های اسکریپت‌نویسی برای وظایفی متفاوت با زبان‌های برنامه‌نویسی سیستمی طراحی شده‌اند و همین مسأله ریشه‌ی تفاوت‌های بنیادی این دو زبان است. زبان‌های برنامه‌نویسی سیستمی برای تولید ساختارهای داده‌ای و الگوریتم‌ها از ابتدایی‌ترین عناصر کامپیوتری مثل کلمات حافظه طراحی شده‌اند.

مقاله‌های مرتبط:

در مقابل، زبان‌های اسکریپت‌نویسی برای چسباندن طراحی شده‌اند: مجموعه‌ای از مؤلفه‌های قدرتمند دارند و در اصل برای اتصال این مؤلفه‌ها با یکدیگر در نظر گرفته شده‌اند. زبان‌های برنامه‌نویسی برای کمک به مدیریت پیچیدگی، Strongly Typed یا وابسته‌ی زیاد به نوع هستند؛ مفهومی که در مقابل Weakly Typed یا وابسته کم به نوع قرار می‌گیرد. به این معنی که باید نوع متغیرها، ورودی‌ها و خروجی‌‌ها توابع و... دقیقا تعیین شوند و کامپایلر پیش از اجرای کدها و رسیدن به مرحله‌ی اجرای Runtime و بیلد، این مورد را بررسی می‌کند. در حالی‌که زبان‌های اسکریپت‌نویسی Typeless (بدون نوع) هستند. برای مثال می‌توان از تعریف متغیر بدون نوع در آن‌ها استفاده کرد و کامپایلر تمام کارها را برعهده دارد. از این‌رو برای ساده‌سازی روابط بین مؤلفه‌ها و توسعه‌ی سریع برنامه‌ها از آن‌ها استفاده می‌شود. گرایش‌های جدید از جمله ماشین‌های سریع‌تر، زبان‌های اسکریپت‌نویسی بهتر، اهمیت فزاینده‌ی واسطه‌های کاربری گرافیکی و معماری‌های مؤلفه‌ای و رشد اینترنت به شدت کاربرد زبان‌های اسکریپت‌نویسی را بالابرده‌اند.

در سطح تخصصی اوسترهاوت اسکریپت‌نویسی و سیستم را در راستای محورهای Type Safety (ایمنی نوع) و دستورالعمل به ازای هر عبارت مقایسه کرده است. Type Safety یا ایمنی نوع به قابلیت یا ویژگی یک زبان برنامه‌نویسی برای جلوگیری یا کاهش رخ دادن Type Errors یا خطاهای ناشی از عدم تطابق نوع گفته می‌شود. برای مثال تعریف متغیری از نوع اعشاری و به کارگیری آن به جای اعداد صحیح، منجر به وقوع یک Type Error می‌شود. اوسترهاوت در سطح طراحی بر نقش‌های جدید هر کلاس زبانی تأکید می‌کند: برنامه‌نویسی سیستم برای ساخت مؤلفه‌ها و اسکریپت‌نویسی برای چسباندن آن‌ها به یکدیگر درنظر گرفته می‌شوند.

نمودار اوسترهاوت

مقایسه‌ی زبان‌های برنامه‌نویسی بر اساس سطح و درجه‌ی Typing آن‌ها (زبان‌های سطح بالاتر دستورالعمل‌های ماشین بیشتری را برای هر عبارت زبانی اجرای می‌کنند) زبان‌های برنامه‌نویسی سیستم مثل C از نوع قوی و سطح متوسط هستند (۵ تا ۱۰ دستورالعمل به ازای هر عبارت). زبان‌های اسکریپت‌نویسی مثل Tcl از نوع ضعیف و سطح بالا هستند (۱۰۰ تا ۱۰۰۰ دستورالعمل به ازای هر عبارت).

تقریبا در همین زمان بود که زبان‌های موسوم به Garbage Collected به محبوبیت رسیدند. Garbage Collection، زباله‌روبی یا بازیافت حافظه، نوعی مدیریت حافظه‌ی خودکار است. در طی این فرآیند فضایی از حافظه‌ی کامپیوتر که قبلا درگیر نگهداری داده‌ی موردنیاز یک برنامه‌ی کامپیوتری بوده است و اکنون آن برنامه دیگر نیازی به این داده ندارد، آزاد می‌شود و برای ذخیره‌ و نگه‌داری داده‌ی جدید مورد استفاده قرار می‌گیرد.

در این دهه جاوا و #C به غول‌های برنامه‌نویسی که امروزه می‌شناسیم تبدیل شدند. با این حال این دو زبان از ابتدا در گروه زبان‌های برنامه‌نویسی سیستمی قرار نگرفتند و از آن‌ها برای طراحی تعداد زیادی از بزرگ‌ترین سیستم‌های نرم‌افزاری دنیا استفاده شده است. اوسترهاوت به طور آشکار توضیح می‌دهد که در دنیای اینترنت کنونی از جاوا برای برنامه‌نویسی سیستم استفاده می‌شود.

دهه‌ی ۲۰۱۰: مرزها محو می‌شوند

از دهه‌ی گذشته مرز بین زبان‌های اسکریپت‌نویسی و زبان‌های برنامه‌نویسی سیستمی در حال محو شدن است. شرکت‌هایی مثل Dropbox توانستند سیستم‌های مقیاس‌پذیر و بزرگی را روی پایتون توسعه دهند. از جاوا اسکریپت برای تبدیل UI-های پیچیده و بلادرنگ (Real-Time) در میلیاردها صفحه‌ی وب استفاده شده است. طبقه‌بندی تدریجی در پایتون، جاوا اسکریپت و دیگر زبان‌های اسکریپت‌نویسی شدت پیدا کرد و به این صورت گذار از کد اولیه به کد تولید تنها با اضافه کردن اطلاعات نوع ایستا امکان‌پذیر شد.

درعین‌حال منابع انبوه مهندسی برای زبان‌های ایستا (مثل جاوا اسکریپت) و زبان‌های پویا (مثل LuaJIT از Lua یا V8 جاوا اسکریپت و PyPy پایتون) وارد کامپایلرهای JIT شدند و آن‌ها را به رقیب عملکردی سیستم‌های زبان‌های برنامه‌نویسی سیستمی (C++، C) تبدیل کردند. سیستم‌های توزیع‌شده و بزرگی مثل اسپارک در اسکالا نوشته شدند. زبان‌های برنامه‌نویسی جدید مثل جولیا و سویفت هم محدودیت‌هایی را برای زبان‌های زباله‌روب (Garbage Collector) به وجود آوردند.

هیئتی به نام برنامه‌نویسی سیستم در سال ۲۰۱۴ و بعد از آن، شامل بزرگ‌ترین مغزهای زبان‌های برنامه‌نویسی کنونی از جمله بیجارن استروستراپ (خالق ++C)، روب پایک (خالق Go)، آندری آلکساندرسکو (توسعه‌دهنده‌ی D) و نیکو ماتساکیس (توسعه‌دهنده‌ی Rust). زبان برنامه‌نویسی سیستم در سال ۲۰۱۴ را این گونه توصیف می‌کنند:

  • نیکو ماستاکیس: برنامه‌نویسی سیستم مانند نوشتن برنامه‌های سمت کلاینت است، یعنی دقیقا نقطه‌ی مقابل GO قرار می‌گیرد. در این برنامه‌ها تأخیر بالایی وجود دارد و همین‌طور پیش‌نیازهایی مثل امنیت بالا و پیش‌نیازهای دیگر وجود دارند که در سمت سرور ارائه نمی‌شوند.
  • بیجارت استروستراپ: برنامه‌نویسی سیستم از کار با سخت‌افزار سرچشمه گرفته است که بعد از آن پیچیدگی برنامه‌ها افزایش یافت. در برنامه‌نویسی سیستم با این پیچیدگی‌ها سروکار دارید، پس اگر با مشکلاتی مثل محدودیت منابع روبه‌رو شدید، بدانید در قلمروی برنامه‌نویسی سیستم قرار گرفته‌اید. محدودیت‌ها تعیین می‌کنند زبان، برنامه‌نویسی سیستم است یا خیر. آیا حافظه‌ رو به اتمام است؟ آیا زمان شما رو به پایان است؟
  • راب پایک: وقتی برای اولین بار GO را معرفی کردیم آن را یک زبان برنامه‌نویسی سیستم خواندیم و البته متأسفانه افرادی به اشتباه تصور کردند این زبان برای نوشتن سیستم عامل طراحی شده است. به عقیده‌ی ما این زبان مخصوص نوشتن سرور است یا می‌توان گفت یک زبان زیرساخت ابری است. بر اساس یک تعریف دیگر به برنامه‌نویسی که در کلود اجرا شود برنامه‌نویسی سیستم گفته می‌شود.
  • آندری آلکساندرسکو: من چند تست برای تعریف برنامه‌نویسی سیستم اجرا کردم. زبان‌های برنامه‌نویسی سیستم باید امکان نوشتن تخصیص‌گر حافظه را بدهند. در این زبان باید قادر به ساخت یک شماره در اشاره‌گر باشید زیرا عملکرد سخت‌افزار به این صورت است.

جاوا اسکریپت

رابطه‌ی برنامه‌نویسی سیستم با عملکرد بالا چیست؟ با محدودیت‌های منابع و کنترل سخت‌افزاری چطور؟ یا زیرساخت ابری؟ به‌طورکلی به نظر می‌رسد زبان‌هایی مثل C ،C++ ،Rust و D از نظر سطح انتزاع و خلاصه بودن از ماشین متمایز می‌شوند. این زبان‌ها جزئیات سخت‌افزار مثل تخصیص حافظه یا قالب و مدیریت دقیق منابع را نمایش می‌دهند.

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

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

امروز: بنابراین برنامه‌نویسی سیستم چیست؟

اغلب به برنامه‌نویسی سطح پائین، برنامه‌نویسی سیستم می‌گویند (با اشاره به جزئیات ماشین)؛ اما معنی سیستم چیست؟ با بازگشت به تعریف ۱۹۷۲ می‌توان گفت:

۱.مسئله‌ی قابل حل، ماهیت گسترده‌ای دارد و شامل تعداد زیادی مسائل فرعی و متنوع است.

۲. از برنامه‌ی سیستمی برای پشتیبانی از برنامه‌های کاربردی و نرم‌افزاری دیگر استفاده می‌شود اما درعین‌حال می‌تواند بسته‌ی کاملی از برنامه‌ها هم باشد.

۳. برنامه‌ی سیستمی برای تولید پیوسته طراحی شده است نه به عنوان راه‌حلی یک جا برای حل مشکلی در برنامه‌ها.

۴. برنامه‌ی سیستمی از نظر تعداد و انواع ویژگی‌های تحت پشتیبانی به صورت پیوسته در حال تکامل است.

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

به نظر می‌رسد این گزینه‌ها بیشتر به مشکلات مهندسی نرم‌افزار اشاره دارند (پیمانه‌ای بودن، قابلیت استفاده‌ی مجدد، تکامل کد) تا مشکلات عملکردی سطح پائین. این یعنی هر زبان برنامه‌نویسی که حل این مشکلات را در اولویت قرار دهد یک زبان برنامه‌نویسی سیستمی است! البته این گزینه‌ها برای تعریف یک زبان برنامه‌نویسی سیستمی کافی نیستند؛ بنابراین می‌توان گفت زبان‌های برنامه‌نویسی پویا یا داینامیک از زبان‌های سیستمی دور هستند.

سی پلاس پلاس

اما مفهوم دقیق این تعریف چیست: زبان‌های تابعی مثل Ocaml و Haskell بیشتر از زبان‌های سطح پائین مثل C یا ++C به سیستم وابسته هستند. هنگام آموزش برنامه‌نویسی باید اصول برنامه‌نویسی تابعی مثل ارزش ثبات، تأثیر سیستم‌های نوع غنی در بهبود طراحی واسطه و استفاده از توابع مرتبه بالاتر را درنظر گرفت. مدارس باید برنامه‌نویسی سیستم و سطح پائین را آموزش دهند.

بنابراین آیا تفاوتی بین برنامه‌نویسی سیستم و مهندسی نرم‌افزار وجود دارد؟ پاسخ منفی است اما مشکل اینجاست که مهندسی نرم‌افزار و برنامه‌نویسی سطح پائین اغلب اوقات به صورت مجزا تدریس می‌شوند. با این حال اغلب کلاس‌های مهندسی نرم‌افزار معمولا بر شعار نوشتن واسطه‌ها و تست‌های مناسب جاوا متمرکز هستند، به همین دلیل لازم است روش طراحی سیستم با توجه به محدودیت‌های زیاد منابع آموزش داده شود.

بهتر است به جای عبارت برنامه‌نویسی سیستم از برنامه‌نویسی سطح پائین استفاده شود

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

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

به طور خلاصه بهتر است به‌جای عبارت برنامه‌نویسی سیستم از برنامه‌نویسی سطح پائین استفاده کرد. اهمیت طراحی سیستم‌های کامپیوتری به عنوان یک رشته یا زمینه به خاطر نام آن نیست؛ بنابراین جداسازی این دو مفهوم، طراحی زبان برنامه‌نویسی را شفاف می‌کند و دیدگاه‌های مشترکی را نسبت به این دو حوزه به وجود می‌آورد: چگونه می‌توان سیستمی را حول محور ماشین یا برعکس طراحی کرد؟

بیشتر بخوانید:

۸ رویکرد اوبونتو که باعث تغییر و بهبود لینوکس شدند

زبان برنامه‌نویسی جاوا 13؛ ابزاری برای بهره‌وری بیشتر برنامه‌نویسان

پایتون محبوب‌ترین زبان برنامه‌نویسی ۲۰۱۹ لقب گرفت

میت 30 و میت 30 پرو هواوی با سیستم عامل اندروید معرفی می‌شوند

امکان مشاهده دمای پردازنده گرافیکی به ویندوز 10 اضافه خواهد شد

منبع WILLCRICHTON

  • behnam behnam