بسیاری از زبانشناسان اعتقاد دارند که زبان طبیعی فرد بر نحوه تفکر آنها تاثیر میگذارد. آیا این مفهوم در مورد زبانهای کامپیوتر صدق میکند؟ برنامه نویسانی که که در انواع مختلفی از زبانهای برنامهنویسی کار میکنند، اغلب راهحلهای کاملا متفاوتی برای حل مشکلات ارائه میدهند. به عنوان مثال، دانشمندان کامپیوتر ساختار goto را حذف کردهاند تا برنامههایی به شکل ساختاریافته تر(structured programs) را دنبال کنند.
این جملات چه ربطی به فلاتر و دارت دارد؟ در واقع کمی به آن مربوط است. تیم اولیه فلاتر بیش از دوازده زبان را ارزیابی کرد و دارت را انتخاب کرد، چون با روشی که آنها رابط کاربری را میساختند هماهنگی داشت.
دارت دلیل بزرگی است که توسعه دهندگان فلاتر را دوست دارند.
در اینجا لیستی سریع از ویژگی های دارت آورده شده است که مجموع آن،دارت را برای فلاتر ضروری می داند:
- دارت Ahead Of Time ( تمام کدها در یک زمان قبل از رسیدن به سیستم عاملی که آنها را اجرا میکند ترجمه می شوند) است که با کد سریع ، قابل پیش بینی و بومی تدوین می شود ، که به شما امکان می دهد تقریباً همه فلاتر در دارت نوشته شود. این نه تنها فلاتر را سریع می کند ، بلکه تقریباً همه چیز (از جمله همه ویدجت ها) قابل شخصی سازی است.
-
دارت همچنین می تواند JIT (Just In Time) باشد که برای چرخه های توسعه بسیار سریع مناسب است (مثل بارگیری مجدد ویدجت stateful در حالت hot reload ).
-
دارت ایجاد انیمیشن ها و انتقال های المان ها را با سرعت 60 فریم در ثانیه آسان تر می کند. دارت می تواند تخصیص اشیا و جمع آوری زباله( garbage collection) را بدون قفل شدن انجام دهد. و مانند جاوا اسکریپت ، دارت از scheduling و حافظه مشترک (و در نتیجه قفل شدن) جلوگیری می کند. از آنجا که برنامه های فلاتر در کد نیتیو کامپایل می شوند ، نیازی به پل زدن کند بین محیط ها نیست نیست (به عنوان مثال JavaScript به زبان نیتیو). همچنین بسیار سریعتر راه اندازی می شوند.
-
دارت به فلاتر اجازه می دهد تا از نیاز به یک زبان لایه بندی اعلانی جداگانه مانند JSX یا XML یا یک سازنده رابط بصری جدا جلوگیری کند ، زیرا خواندن و تجسم لایه ای برنامه با دارت آسان است با وجود همه چیدمان در یک زبان و در یک مکان، فراهم کردن ابزار پیشرفته که چیدمان را شکل میدهد، آسان است.
- توسعه دهندگان دریافته اند که یادگیری دارت آسان است زیرا دارای ویژگی هایی است که برای کاربران از هر دو زبان استاتیک و زبان پویا آشناست.
همه این ویژگی ها فقط مختص دارت نیستند ، اما ترکیبی از آنها به هدف لذت بخشی برخورد می کند که باعث می شود دارت به طور منحصر به فردی برای اجرای فلاتر قدرتمند باشد. بسیار دشوار است که تصور کنیم فلاتر بدون دارت به همان اندازه قدرتمند میبود.
ادامه این مقاله در مورد بسیاری از ویژگی های دارت (از جمله کتابخانه های استاندارد آن) که آن را به بهترین زبان برای اجرای فلاتر تبدیل می کند ، با عمق بیشتری می پردازد.
کامپایل و اجرا
[اگر در مورد موضوعاتی از قبیل زبانهای استاتیک در مقابل زبانهای پویا ، ;کامپایل AOT و JIT و ماشینهای مجازی اطلاعاتی دارید ، می توانید از این بخش صرف نظر کنید.]
به طور تاریخی، زبانها به دو گروه تقسیم شدهاند: زبانهای استاتیک (به عنوان مثال، Fortran و C، که در آن متغیرها به صورت ایستا تایپ میشوند)، و زبانهای پویا (به عنوان مثال، اسمالتاک یا جاوا، که در آن نوع متغیری میتواند در زمان اجرا تغییر کند). زبانهای ایستا معمولا برای تولید کد به زبان نیتیو(یا کد مونتاژ)برای ماشین هدف تهیه میشوند که در زمان اجرا به طور مستقیم توسط سختافزار اجرا میشوند. زبانهای دینامیک به وسیله مفسر، بدون تولید کد زبان ماشینی، اجرا شدند.
البته سرانجام اوضاع بسیار پیچیده تر شد. مفهوم ماشین مجازی (VM) رایج شد ، که در واقع فقط یک مفسر پیشرفته است که از یک ماشین سخت افزار در نرم افزار تقلید می کند. یک ماشین مجازی انتقال زبان به سیستم عامل های سخت افزاری جدید را آسان تر می کند. در این حالت ، زبان ورودی یک ماشین مجازی اغلب یک زبان میانی است. به عنوان مثال ، یک زبان برنامه نویسی (مانند جاوا) به یک زبان میانی (bytecode) کامپایل می شود و سپس بر روی ماشین مجازی (JVM) اجرا می شود.
علاوه بر این ، اکنون کامپایلرهای just-in-time (JIT) وجود دارد. یک کامپایلر JIT در حین اجرای برنامه اجرا می شود و در حال کامپایل است. کامپایلرهای اصلی که در هنگام ایجاد برنامه (قبل از اجرا) اجرا می شوند ، اکنون AOT نامیده می شوند.
هنگامی که کامپایل aot در طول توسعه انجام میشود، همواره در چرخههای توسعه کندتر (زمان بین ایجاد تغییر در یک برنامه و توانایی اجرای برنامه برای دیدن نتیجه تغییرات)منجر میشود.اما تدوین AOT منجر به برنامه هایی می شود که می توانند با پیش بینی بیشتر و بدون مکث برای تجزیه و تحلیل در زمان اجرا ، اجرا شوند. برنامه های کامپایل شده AOT نیز سریعتر شروع به اجرا می کنند (زیرا قبلاً کامپایل شده اند).
در مقابل، کامپایل JIT، چرخههای توسعه بسیار سریعتری را ارایه میدهد، اما میتواند منجر به اجرای کندتر یا نامنظم گردد. به طور خاص، کامپایلرهای JIT زمان شروع کمتری دارند، زیرا زمانی که برنامه شروع به اجرا میکند، کامپایلر JIT میتواند قبل از اجرا کد تحلیل و کامپایل شود. مطالعات نشان دادهاند که اگر این فرآیند بیش از چند ثانیه طول بکشد، بسیاری از مردم اپ را رها میکنند.
این پایان اطلاعات پس زمینه است. آیا ترکیب مزایای کامپایل AOT و JIT بسیار جذاب خواهد بود؟ ادامه مطلب را دنبال کن 🙂
کامپایل و اجرای دارت
قبل از کار بر روی Dart، اعضای تیم دارت کار خود را روی کامپایلرهای پیشرفته و ماشینهای مجازی انجام دادند، هم برای زبانهای پویا (مثل موتور v8 برای جاوا اسکریپت و Strongtalk برای Smalltalk)و هم برای زبانهای استاتیک (مانند کامپایلر Hotspot برای جاوا). آنها از این تجربه برای انعطاف پذیری غیرمعمول دارت در نحوه کامپایل و اجرای آن استفاده کردند.
Dart یکی از معدود زبان هایی است که مناسب کامپابل هر دوی AOT و JIT است. پشتیبانی از هر دو نوع کامپایل، مزایای قابلتوجهی را برای دارت و (به خصوص) فلاتر فراهم میآورد.
کامپایل JIT در طول توسعه با استفاده از کامپایلری که واقعا سریع است استفاده می شود. سپس ، هنگامی که برنامه ای برای انتشار آماده است ، AOT کامپایل می شود. در نتیجه ، با کمک ابزارهای پیشرفته و کامپایلرها ، دارت می تواند بهترین ها را از هر دو جهان ارائه دهد: چرخه های توسعه بسیار سریع و زمان اجرای سریع و راه اندازی.
انعطاف پذیری دارت در کامپایل و اجرا در اینجا متوقف نمی شود. به عنوان مثال ، دارت می تواند به دنیای JavaScript کامپایل شود ، پس قابلیت اجرا توسط مرورگرها را دارد. این امکان استفاده مجدد از کد را بین برنامه های تلفن همراه و برنامه های وب فراهم می کند. توسعه دهندگان گزارش کرده اند که بیش از 70٪ استفاده مجدد از کد را بین برنامه های تلفن همراه و وب خود را انجام داده اند. از دارت می توان با استفاده از کامپایل در کد نیتیو یا با کامپایل در JavaScript و استفاده از آن با node.js بر روی سرور نیز استفاده کرد.
در نهایت، دارت یک حافظه مجازی مستقل ارایه میکند که خود زبان دارت را به عنوان زبان میانجی خود استفاده میکند (اساسا به عنوان مترجم عمل میکند)
دارت را می توان با کارآیی AOT یا JIT کامپایل کرد ، تفسیر کرد یا به زبان های دیگر منتقل کرد. کامپایل و اجرای دارت نه تنها انعطاف پذیر نیست ، بلکه به طور خاصی سریع است.
در قبسمت بعدی مثالی از این ارائه میشود که چگونه سرعت کامپایل میتواند یک عامل برتری مهم باشد.