منظور من اجرای ASP.NET Core بر روی Full Dot Net Framework نیست. با توجه به پشتیبانی اضافه کردن Assemblyهای کامپایل شده برای Full Dot Net Framework بدون کامپایل مجدد در Dot Net Core 2 که شامل نزدیک به 70% از Nuget Packageهای موجود میشود ( حتی مواردی پیچیده چون Web API OData و NQuery )، میتوان پروژه را روی Dot Net Core 2 پیش برد و در صورت لزوم Dllهای Dot Net Full را ارجاع زد. نتیجه حتی از اجرای ASP.NET Core بر روی Full Dot Net Framework نیز بهتر است، بابت مزیتهای ذاتی طراحی Dot Net Core
فقط کسانی که نیاز به استفاده از WCF یا .NET Remoting یا Com Interop دارند، تحت تاثیر این تصمیم قرار میگیرند.
Can reference existing .NET Framework libraries. The best thing is no recompile required, so this includes existing NuGet packages. Of course, this will only work if the consumed libraries use APIs that exist in .NET Standard. However, our extensive API surface results in 70% of all NuGet packages to be API compatible with .NET Standard 2.0.
اشتراکها
کتابخانه trianglify
اشتراکها
خبرنامه ماهیانهی NET Annotated.
Want to learn about the latest and greatest in the 64-bit Visual Studio 2022? Join Scott Hanselman and Visual Studio product team as they take Visual Studio 2022 for a spin.
00:00 Intro
00:39 Why you should care about Visual Studio 2022?
02:20 Performance improvements in Visual Studio 2022
04:39 Why 64-bit now?
08:00 IntelliCode, type less code more
11:35 Hot reload for C++
13:47 New for WPF and WinForms (Hot Reload, Design time data, XAML
20:27 Profiling .NET apps in Visual Studio 2022
23:19 Cross platform apps with WSL and CMake in Visual Studio 2022
26:07 Testing your .NET app on Linux
28:00 Easily create CI/CD pipelines using GitHub actions with Visual Studio 2022
30:40 Balloon drop!
Rust، یک زبان برنامه نویسی است که به دلیل ایمنی و عملکرد مشهور است و مفهوم مالکیت را برای مدیریت مؤثر حافظه معرفی میکند. با رعایت مجموعهای از قوانین زمان کامپایل، توسعه دهندگان Rust میتوانند مشکلات مربوط به حافظه را کاهش داده و کد خود را بهینه کنند. این مقاله، قوانین مالکیت، مشکلاتی را که حل میکند و مثالهای مختلفی را برای نشان دادن کاربرد آن، بررسی میکند.
قوانین مالکیت
مالکیت در Rust به جلوگیری از چندین مشکل مدیریت حافظه کمک میکند، از جمله:
هر مقدار در Rust دارای یک متغیر مرتبط به نام مالک آن است
به مثال زیر توجه کنید:
در این مورد، s1 یک اشارهگر است که در stack قرار دارد؛ در حالیکه مقدار "Rust" در heap قرار میگیرد.
طبق قوانین مالکیت:
تلاش برای ارجاع به s1 پس از خارج شدن آن از scope، منجر به خطا میشود؛ زیرا مقدار آن از heap حذف شده و دیگر وجود ندارد.
مالکیت منحصر بهفرد (در هر لحظه فقط یک مالک میتواند وجود داشته باشد)
اگر برای انتقال s1 به s2 از کد زیر استفاده کنید:
Rust بهطور خودکار مقدار s1 را به s2 منتقل میکند و اطمینان حاصل میکند که تنها یک مالک در یک زمان حضور دارد.
Cloning Values
اگر بخواهیم بجای جابجایی مقدار، آن را تولید/نمونهسازی مجدد (cloning) کنیم، میتوانیم با فراخوانی متد ()clone اینکار را انجام دهیم:
اکنون s2 کپی خود را از مقدار s1 دارد.
Primitive Data و Cloning
در Rust، دادههای اولیه بهطور کامل در stack ذخیره میشوند و بهطور پیش فرض clone میشوند. نمونه سازی مجدد این انواع، ارزان است و تفاوتی بین clone و moving وجود ندارد.
پاس دادن Variables به Functions
ارسال یک متغیر به یک تابع، همان تأثیری را دارد که یک متغیر را به متغیر دیگری اختصاص میدهیم. به عنوان مثال، اگر s1 را به یک تابع ارسال کنیم، مالک جدید رشته p1 است ( p1 نام آرگومان تابع است). برای رفع هرگونه خطایی که ممکن است به این دلیل ایجاد شود، میتوانیم s1 را clone کرده و به تابع ارسال کنیم.
سیستم مالکیت Rust، یک راه قدرتمند را برای مدیریت حافظهی در زمان کامپایل فراهم میکند و از مشکلات رایج مرتبط با حافظه جلوگیری میکند. با درک و پیروی از قوانین مالکیت، میتوانید کد ایمنتر و کارآمدتری را در Rust بنویسید.
قوانین مالکیت
- هر مقدار در Rust دارای یک متغیر مرتبط به نام مالک آن است.
- در هر لحظه فقط یک مالک میتواند وجود داشته باشد.
- وقتی مالک از scope خارج میشود، مقدار مرتبط حذف میشود.
مالکیت در Rust به جلوگیری از چندین مشکل مدیریت حافظه کمک میکند، از جمله:
- Memory/resource leaks
- Double free
- Use after free
هر مقدار در Rust دارای یک متغیر مرتبط به نام مالک آن است
به مثال زیر توجه کنید:
let s1 = String::from("Rust");
طبق قوانین مالکیت:
- s1 مالک دادههای ذخیره شدهی در heap است.
- هنگامیکه s1 از scope خارج شود، دادههای آن نیز پاک میشوند.
تلاش برای ارجاع به s1 پس از خارج شدن آن از scope، منجر به خطا میشود؛ زیرا مقدار آن از heap حذف شده و دیگر وجود ندارد.
اگر برای انتقال s1 به s2 از کد زیر استفاده کنید:
let s2 = s1;
Cloning Values
اگر بخواهیم بجای جابجایی مقدار، آن را تولید/نمونهسازی مجدد (cloning) کنیم، میتوانیم با فراخوانی متد ()clone اینکار را انجام دهیم:
let s2 = s1.clone();
Primitive Data و Cloning
در Rust، دادههای اولیه بهطور کامل در stack ذخیره میشوند و بهطور پیش فرض clone میشوند. نمونه سازی مجدد این انواع، ارزان است و تفاوتی بین clone و moving وجود ندارد.
پاس دادن Variables به Functions
ارسال یک متغیر به یک تابع، همان تأثیری را دارد که یک متغیر را به متغیر دیگری اختصاص میدهیم. به عنوان مثال، اگر s1 را به یک تابع ارسال کنیم، مالک جدید رشته p1 است ( p1 نام آرگومان تابع است). برای رفع هرگونه خطایی که ممکن است به این دلیل ایجاد شود، میتوانیم s1 را clone کرده و به تابع ارسال کنیم.
سیستم مالکیت Rust، یک راه قدرتمند را برای مدیریت حافظهی در زمان کامپایل فراهم میکند و از مشکلات رایج مرتبط با حافظه جلوگیری میکند. با درک و پیروی از قوانین مالکیت، میتوانید کد ایمنتر و کارآمدتری را در Rust بنویسید.
As I promised last week in my post about the STL changes in VS14 CTP1 , here are tables listing the implementation status of C++11/14 Core Language/Standard Library features