theme wordpress
زبان برنامه نویسی

معرفی و آموزش زبان برنامه نویسی جولیا Julia

معرفی زبان برنامه نویسی Julia

جولیا یک زبان تخصصی جهت انجام محاسبات عددی می باشد. مهمترین ویژگیهای آن سادگی در نصب، یادگیری و کاربری، سرعت بالا در انجام محاسبات  و توانمندی های بروز و گسترده در کاربردهای متنوع آمار، ریاضات و محاسبات مهندسی میباشد. این زبان قابلیتهای سطح پایین مانند محاسبات ریاضی پایه بر اعداد (صحیح و اعشاری) و اجرای حلقه های تکرار را با سرعت و دقت بالا (قابل مقایسه با C یا Fortran) انجام میدهد و توانایی های سطح بالایی مانند عملیات ریاضی پیشرفته بر بردارها و ماتریسها، پردازش موازی و ارائه سرویس بر روی شبکه را پشتیبانی می کند. نحوه کمپایل آن JIT مخفف (Just in Time) میباشد. به این معنا که برگرداندن کدها به زبان ماشین در زمان اجرا و توسط LLVM مخفف (Low-Level Virtual Machine) انجام می شود. از جمله ویژگیهای مهم این زبان پشتیبانی از عبارات ریاضی (Expressions) بصورت یک شیئ داخلی است. این زبان برنامه نویسی مورد حمایت دانشگاه MIT می باشد و پروفسور Alan Edelman استاد ریاضی پیشرفته این دانشگاه از مدیران فعال پروژه زبان برنامه نوسی Julia است. بعلاوه یکی از وجوه تمایز زبان برنامه نویسی متن باز (open source) بودن میباشد، بنابراین کلیه کدهای کمپایلر از طریق سورس جولیا در اختیار عموم  قرار دارد. جهت دسترسی به آخرین اطلاعات به آدرس سایت رسمی مراجعه نمایید. جهت اطلاع از نحوه استفاده از زبان برنامه نویسی Julia در دانشگاه MIT به پروژه متن باز Julia for Numerical Computation in MIT Courses مراجعه نمایید. جهت سهولت در کد نویسی و دریافت آخرین پکیج ها بهتر است برنامه نویسی را در محیط Juno انجام دهید.

مقایسه سرعت اجرا توابع منتخب نسبت به زبان C ، (کمتر بهتر است)

Fortran
gcc 4.8.2
Julia
۰.۳.۷
Python
۲.۷.۹
R
۳.۱.۳
Matlab
R2014a
Mathe-
matica
۱۰.۰
JavaScript
V8 3.14
Java
۱.۷
fib ۰.۵۷ ۲.۱۴ ۹۵.۴۵ ۵۲۸.۸۵ ۴۲۵۸.۱۲ ۱۶۶.۶۴ ۳.۶۸ ۰.۹۶
parse_int ۴.۶۷ ۱.۵۷ ۲۰.۴۸ ۵۴.۳۰ ۱۵۲۵.۸۸ ۱۷.۷۰ ۲.۲۹ ۵.۴۳
quicksort ۱.۱۰ ۱.۲۱ ۴۶.۷۰ ۲۴۸.۲۸ ۵۵.۸۷ ۴۸.۴۷ ۲.۹۱ ۱.۶۵
mandel ۰.۸۷ ۰.۸۷ ۱۸.۸۳ ۵۸.۹۷ ۶۰.۰۹ ۶.۱۲ ۱.۸۶ ۰.۶۸
pi_sum ۰.۸۳ ۱.۰۰ ۲۱.۰۷ ۱۴.۴۵ ۱.۲۸ ۱.۲۷ ۲.۱۵ ۱.۰۰
rand_mat_stat ۰.۹۹ ۱.۷۴ ۲۲.۲۹ ۱۶.۸۸ ۹.۸۲ ۶.۲۰ ۲.۸۱ ۴.۰۱
rand_mat_mul ۴.۰۵ ۱.۰۹ ۱.۰۸ ۱.۶۳ ۱.۱۲ ۱.۱۳ ۱۴.۵۸ ۲.۳۵

دریافت کمپایلر Julia

کمپایلر جولیا به هیچ وجه برنامه بزرگ و حجیمی نیست، در حقیقت تمام آنچه شما برای برنامه نویسی به این زبان احتیاج دارید حدود ۳۰ مگابایت میباشد که به صورت رایگان از طریق صفحه دانلود پایگاه رسمی این زبان در دسترس است. در صفحه مذکور گزینه های مختلفی جهت دریافت به کاربر نشان داده میشود. نسخه Nightly Build آخرین تغییرات این زبان را شامل میشود اما اگر بخواهید یک نسخه قابل اعتماد داشته باشید بهتر است Current Release را دریافت نمایید.

همچنین در صورتی که به دنبال یک محیط کامل برنامه نویسی با تمام امکانات متداول مانند دیباگ، مدیریت فایل ها، نشان گذاری و …. میباشد Juno IDE+Julia  را انتخاب نمایید که به دلیل حجم بالاتر زمان بیشتری برای دانلود نیاز دارد.

 در چند دقیقه زبان برنامه نویسی جولیا julia را فراگیرید!

این زبان: ** مانند زبان لیسپ “هومویکُنیک” (homoiconic) است، به این معنا که کدهای برنامه نیز داده هایی از برنامه به شمار میروند، که امکان تولید کدهای برنامه نویسی پویا (meta-programming) را به برنامه نویس میدهد. ** در تعریف توابع بسیار قوی و انعطاف پذیر میباشد، که امکان تعریف رُویه های (methods) و عملگرهای محاسباتی جامع (generic) برای ساختارهای داده متفاوت را فراهم می آورد. ** دارای قابلیت های سطح پایین کنترلی و محاسباتی است، که سرعت اجرا را تا حد زبانهای سی یا فرترن افزایش میدهد و ** ساده برای یادگیری و استفاده میباشد. که آنرا به سرعت به جایگزینی برای زبانهای محاسباتی مانند متلب، متمتیکا و … یا گزینه ای جایگزین با سرعت بالاتر برای پِیتون و زبانهای اسکریپتی مشابه تبدیل می نماید این آموزش کوتاه بر اساس نسخه ۱۸ اکتبر ۲۰۱۳ تهیه شده است. !=#

#=! توضیحات یک خطی با کاراکتر # آغاز می شوند: !=#

#=! توضیحات چند خطی با “#=” آغاز می گردند و با “=#” خاتمه می یابند: !=#

#=! #################################################### ## ۱- داده های پایه #################################################### !=#

#=! کدهای جولیا داده هایی از نوع عبارت میباشند، بنابراین همه چیز در این زبان عباراتی قابل تفسیر توسط جولیا است. !=#

#=! انواع مختلفی از اعداد وجود دارد: !=#

#=! اعداد صحیح: !=#

#=! اعداد اعشاری: !=#

#=! اعداد مختلط: !=#

#=! اعداد کسری: !=#

#=! کلیه عملگرهای محاسباتی در دسترسند: !=#

#=! حاصل تقسیم دو عدد صحیح همیشه از نوع اعشاری است: !=#

#=! جهت محاسبه بخش صحیح یک تقسیم تابع div در دسترس است: !=#

#=! ^ عملگر توان است نهxor دودویی!: !=#

#=! اولویت بندی محاسبات با استفاده از پرانتز: !=#

#=! عملگرهای دودویی: !=#

#=! نه دودویی: !=#

#=! و دودویی: !=#

#=! یا دودویی: !=#

#=! xor دودویی: !=#

#=! حرکت دودویی به راست بدون علامت: !=#

#=! حرکت دودویی به راست: !=#

#=! حرکت دودویی به چپ: !=#

#=! میتوانید از تابع bits جهت چاپ نمای دودویی یک عدد استفاده نمایید: !=#

#=! داده های منطقی از انواع اصلی میباشند: !=#

#=! عملگرهای منطقی و رابطه ای: !=#

#=! مقایسه ها میتوانند زنجیره ای باشند: !=#

#=! رشته ها با ” تعریف میشوند: # Strings are created with ” “This is a string.” کاراکترها ها با ‘ مشخص میشوند: !=#

#=! رشته ها مانند آرایه ای از کاراکترها قابل اندیس گذاری میباشند: !=#

#=! البته این روش برای رشته های با کد گذاری UTF8 مناسب نمی باشد. !=#

#=! کاراکتر $ عبارات julia را در داخل یک رشته بیان میکند: !=#

#=! روش جایگزین جهت تعریف قالب های چاپی برای رشته ها استفاده از ماکرو @printf میباشد: !=#

#=! تولید خروجی قابل چاپ ساده می باشد: !=#

#=! #################################################### ## ۲- متغییرها و انواع مجموعه ها #################################################### !=#

#=! پیش از اعلان متغییر میتوانید به آن مقدار بدهید: !=#

#=! حاصل ارجاع به متغییر قبل از مقدار دهی، تولید خطی می باشد: !=#

#=! اسامی متغییرها با یک حرف آغاز میشوند و بعد از آن میتوان ترکیبی از حروف، اعداد، زیرخط و علامت تعجب داشت: !=#

#=! بعلاوه در نامگذاری متغییر ها، میتوان از کاراکترهای با کدینگ UTF8 نیز استفاده کرد: !=#

#=! این امکان در انجام محاسبات ریاضی میتواند راهگشا باشد: !=#

#=! قراردادهای نامگذاری در زبان جولیا: اسامی متغییرها با حروف کوچک نوشته شود و کلمات با زیر خط ‘_’ تفکیک گردند. اسامی انواع داده ها، و کلمات مندرج در اسم ها بدون زیرخط با حروف بزرگ آغاز میشوند. اسامی توابع و ماکروها با حروف کوچک و بدون زیرخط انتخاب گردند. در صورتی که تابع امکان تغییر پارامتر خود را داشته باشد، نام تابع به علامت تعجب ‘!’ خاتمه یابد. !=#

#=! آرایه ها مقادیر مرتب شده ای از داده ها را نگه میدارند، اندیس گذاری در جولیا از ۱ آغاز میگردد: !=#

#=! مقادیر آرایه های یک بعدی می توانند با داده های جدا شده با کما ‘,’ مشخص گردند: !=#

#=! مقادیر آرایه های دوبعدی در ردیف های جدا شده با نقطه کما ‘;’ و مقادیر فاصله دار درج میگردند: !=#

#=! توابع push! و append! به انتهای یک لیست داده می افزایند: !=#

#=! pop! از آخرین عضو لیست را حذف میکند: !=#

#=! به یاد داشته باشید که اندیسها در جولیا از ۱ شروع میشوند، نه ۰: !=#

#=! یک راه سریع برای استخراج آخرین عضو، استفاده از اندیس end میباشد: !=#

#=! میتوانیم اعضاء لیست را به سمتی شیفت نماییم: !=#

#=! توابعی که اسامی آنها به علامت تعجب ختم میگردد، مقدار پارامترهای خود را تغییر میدهند: !=#

#=! حاصل ارجاع به اندیسهای خارج از بازه آرایه، تولیذ خطا میباشد: !=#

#=! خطا های تولید شده در جولیا، نام فایل و شماره خط منبع خود را به همراه دارند، لذا همیشه امکان رجوع به فایل کد و بررسی آن وجود دارد. !=#

#=! میتوانید یک توالی از اعداد را تبدیل به آرایه نمایید: !=#

#=! میتوان از توالی عددی به عنوان اندیس برای استخراج قسمتی از یک آرایه استفاده کرد: !=#

#=! تابع splice! اندیس دلخواهی از یک آرایه را حذف میکند: !=#

#=! تابع append! اعضاء دو لیست را ملحق مینماید: !=#

#=! تابع in وجود یک عضو را در لیست بررسی میکند: !=#

#=! length تعداد عضوهای لیست را محاسبه میکند: !=#

#=! چندتایی ها تغییر ناپذیرند: !=#

#=! تعداد زیادی از توابع لیستی را میتوان بر چندتایی ها نیز فراخواهند: !=#

#=! میتوانید چندتایی را باز کنید و عضوهای آنرا متغییرها نسبت دهید: !=#

#=! چندتایی حتی بدون پرانتز ساخته میشود: !=#

#=! مقدار یک چندتایی با تنها یک عضو، با مقدار آن عضو برابر نیست: !=#

#=! ببینید مبادله مقادیر چقدر آسان است: !=#

#=! واژه نامه ها (کلکسیون، دیکشنری یا آرایه انجمنی) مجموعه از از، نگاشت ها میباشند: !=#

#=! در واژه نامه ها کلید هر مقدار یک واژه است: !=#

#=! ابزار رجوع به واژه ها در واژه نامه، آوردن کلیدواژه در کروشه است: !=#

#=! تابع keys یک KeyIterator برای استخراج کلیه مقادیر واژه نامه تولید میکند: !=#

#=! توجه داشته باشید که کلید واژه ها در واژه نامه، مرتب نیستند. !=#

#=! تابع values یک ValueIterator برای استخراج کلیه مقادیر واژه نامه تولید میکند: !=#

#=! بررس وجود یک مقدار در واژه نامه با استفاده از توابع in وhaskey !=#

#=! سعی در استخراج مقدار با کلیدواژه نامعتبر از واژه نامه تولید خطا مینماید: !=#

#=! جهت ممانعت از تولید خطا در استخراج واژه ها میتوان از تابع get با تعیین یک مقدار پیشفرض استفاده کرد: !=#

#=! برای تعریف مجموعه ای از مقادیر نامرتب و غیر تکراری از ساختار Set استفاده نمایید: !=#

#=! تولید Set از مجموعه از از مقادیر: !=#

#=! افزودن مقدار به Set: !=#

#=! بررسی وجود مقدار در Set: !=#

#=! توابعی برای محاسبه اشتراکات، محاسبه اختلافات و ملحق نمودن Set ها وجود دارد: !=#

#=! #################################################### ## ۳- ساختارهای کنترلی #################################################### !=#

#=! یک متغییر تعریف میکنیم: !=#

#=! یک ساختار تصمیم در جولیا به صورت زیر است، فاصله گذاری های ابتدای خطوط تنها جنبه تزیینی دارند: !=#

#=! ساختار حلقه ای for داده های قابل شمارش (آرایه، توالی عددی، Set، دیکشنری و رشته) را تکرار میکند: !=#

#=! ساختار تکرار while، تا زمانی که شرط آن درست باشد، ادامه می یابد. !=#

#=! اداره کردن استثنا: !=#

#=! #################################################### ## ۴- توابع #################################################### !=#

#=! عبارت function یک تابع جدید تعریف میکند: توابع مقدار حاصل از اجرا آخرین خط دستورات خود را باز میگردانند: !=#

#=! میتوانید تابعی تعریف کنید که تعداد متغییری از پارامترهای ورودی را دریافت نماید: از دستور return در هر جا از تابع میتوان جهت برگشت استفاده کرد: !=#

#=! … اسپلت نام دارد، از اسپلت برای تعریف توابع استفاده نمودیم، از اسپلت میتوان در فراخوانی توابع هم استفاده نمود، در چنین شرایطی، اسپلت آرایه با چندتایی را به لیستی از مقادیر ورودی مبدل میکند: !=#

#=! توابع را میتوان با پارامترهای اختیاری دارای مقدار پیش فرض تعریف نمود: !=#

#=! میتوان به پارامترهای تابع را با واژه مشخص تعریف نمود، به این ترتیب در هنگام فراخوانی تابع پارامترها فاقد ترتیب بلکه دارای واژه میباشند (به کاربرد ; در تعریف تابع توجه شود) : !=#

#=! میتوانید از پارامترهای ترتیبی و واژه گذاری شده در کنار هم برای تریف تابع بهره برید: !=#