معمولا در صورتی که شما فایل های DWG ,DXF داشته باشید که بخواهید از نقاط آنها یک فایل مختصاتی تهیه کنید ، لند یا اتوکد ابزارهای برای تهیه خروجی فایل نقطه ندارند .
در واقع شما این امکان را ندارید که بخواهید از نقاط موجود در فایل Cad
برای مقاصد خود ( بطور مثال : ایجاد منحنی میزان ) استفاده کنید
چاره چیست ؟
ID گرفتن دستی نقاط و سپس ایجاد یک فایل نقاط از آنها ؟ قطعا این روش برای
چند نقطه مشکلی ندارد ، اما اگر تعداد نقاط زیاد باشد ، کاری بسیار طاقت
فرسا خواهد بود.
یکی از روش های دیگر استفاده از نرم افزاری مثل MicroSurvey می باشد آما در اینجا برنامه ای نوشتیم که این کار به سادگی فقط با یک کلیک انجام میدهد .
ترسیم منحنی و اشکال مختلف، بخش لاینفک بسیاری از کارهای علمی هستند. در بسیاری از موارد، می توان با یک شکل مناسب، به اندازه چندین پاراگراف و حتی چندین صفحه، مفهوم را به مخاطب منتقل نمود. نرم افزار متلب، در کنار قابلیتهای فراوانی که دارد، یکی از قوی ترین هسته های گرافیکی را برای ترسیم و مدیریت انواع منحنی ها و شکل ها دارا می باشد. توانایی استفاده از این امکانات نرم افزار متلب، یکی از ارکان کاربری آن می باشد. در این مطلب، در در آینده در مطالبی مشابه، نحوه کار با توابع ترسیم و گرافیکی متلب را مورد بررسی قرار خواهیم داد.
در اینجا قصد داریم، نمودار مربوط به تابع زیر را در متلب ترسیم نماییم:
فرض کنید که بازه تغییرات متغیرهای x و y ، هر دو بین 2- و 2 باشد. به این منظور تعریف می کنیم:
>> x=-2:0.2:2;
>>
y=-2:0.2:2;
برای ترسیم منحنی های سه بعدی، می بایست تمام نقاط موجود در بردار x، با تمام نقاط موجو در بردار y ترکیب شوند و مقدار تابع در نقطه به دست آمده، محاسبه شود. برای این منظور، از تابع meshgrid به صورت زیر استفاده می کنیم:
>> [X,Y]=meshgrid(x,y);
حال مختصات بعد سوم را به صورت زیر محاسبه می کنیم:
>> Z=exp(-(X.^2+Y.^2));
داده های مورد نیاز برای ترسیم انواع منحنی های سه بعدی، آمده شده اند. می توانیم با فراخوانی دستورهای مربوطه، منحنی های مختلفی را ترسیم نماییم. نمونه ای از دستورهای قابل اجرا بر روی داده های به دست آمده، به همراه نمودارهای مربوط به هر دستور، در ادامه آمده اند:
دستور mesh:
این دستور برای ترسیم نمودارهای شبکه ای (اسکلتی) سه بعدی به کار می رود. برای اجرای این دستور این عبارت را وارد می کنیم:
>> mesh(X,Y,Z);
دستور surf:
این دستور برای ترسیم نمودارهای سه بعدی سطحی (اسکلت به همراه سطح رنگی) به کار می رود. برای اجرای این دستور این عبارت را وارد می کنیم:
>> surf(X,Y,Z);
دستور contour:
این دستور سطح کانتوری مربوط به داده های سه بعدی را ترسیم می کند. هر چند نمودار به دست آمده پس از اجرای این تابع، یک نمودار دو بعدی است، اما برای ترسیم آن، می بایستی داده های سه بعدی ایجاد شده باشد. همچنین می توانید از دستورهای meshc و surfc برای ترکیب این نوع از نمودار با نمودارهای mesh و surf اسفتفاده نمایید. برای فراخوانی تابع contour این عبارت را وارد می کنیم:
>> contour(X,Y,Z);
چندی پیش در اینترنت گشت و گذر می کردم که مطلب جالبی در مورد مایکروسافت و سرورهای که داره برخورد کردم.این سرور ها برای من جالب بود.احتمالا برای شما هم جذاب باشه !!!!؟؟؟؟
دانش > فناوری اطلاعات - غول دنیای نرمافزار بهتازگی فاز اول مرکز دادههایش را در شیکاگو افتتاح کرده و امیدوار است پس از تکمیل، آن را به قلب موتورجستجوی بینگ تبدیل کند.
در پست های قبلی در مورد زبان برنامه نویسی لیسپ توضیحات داده شد.در اینجا قصد داریم چند برنامه مفید و پرکار برد اپلود کنیم.امیدوارم مورد پسند دوستان عزیز قرار گیرد
تاریخچه Visual LISP
با اینکه چند سالی میشود که لیسپ به تاریخ پیوسته و جای آن را «ویژوآل لیسپ» پر کرده ولی هنوز هستند اکثریت کاربران اتوکدی که هنوز با LISP و یا Visual LISP آشنایی چندانی ندارند.لیسپ زبان اختصاصی شرکت اتودسک برای آسان تر کردن مجموعه عملیات های مشابه و تکراری با کمک دستورات و کدهای از قبل تعریف شده میباشد که کاربر را یاری میدهد تا در ترسیمات خود دستورات و عملکردهای سفارشی مختص به خود را تهیه کند.با پیشرفت کردن و متنوع تر شدن دستورات و امکانات اتوکد فقدان یک زبان برنامه نویسی قوی برای عملکردهای پیچیده تر احساس شد. یکی دیگر از عوامل مهم در مهاجرت از LISP به Visual LISP عدم امکانات محافظت از برنامه های نوشته شده در LISP برای جلوگیری از کپی برداری های غیر مجاز از برنامه ها بوده است.در این مرحله بود ماکروسافت نرم افزار VB معروف خود را تحت عنوان جدیدی به نام VBA (مخفف Visual Basic Application) عرضه کرد و زمینه خوبی برای استفاده این زبان برنامه نویسی که در واقع نسخه غیر مستقل VB شناخته میشد را در بسیاری از نرم افزارهای دیگر از جمله مجموعه office و همچنین مجموعه نرم افزارهای خانواده Autodesk فراهم شد.
VBA ای که در خانواده اتودسک به کار گرفته شد مجهز به مجموعه کدهایی برای استفاده از دستورات و فرمانهای اتوکد به همراه استفاده از متغیرهای سیستمی با امکان استفاده از پنچره های محاوره ای متداول برنامه نویسی میباشد.و اما لیسپ:با اینکه VBA امروزه بسیار قویتر و مجهز تر از LISP میباشد ولی هنوز شاهد ابتکارهای بسیار جالبی با کدهای قدیمی لیسپ هستیم.چرا که این برنامه ساده تر سالهای سال تنهای ابزار برای نشان دادن مهارت برنامه نویسان اتوکد بوده و سخت است که به زودی به بوته فراموشی سپرده شود.و اینچنین است که هنوز با جستجوی کلمه LISP در موتور جستجوی گوگل بیش از 14 ملیون نتیجه را می یابیم و سایتهای بسیار بزرگ و معروفی که نسبت به آرشیو کردن مجموعه های ارزشمند LISP همچنان فعال هستند را میینیم
/span>>/>>/>>/>
شاید برای شما پیش اومد باشه که بخواهید یک سری مختصات از فایل ترسیمی داشته باشید. مسلما برای گرفتن مختصات از روشهای سنتی مثل فرمان ID نیاز به زمان بیشتری خواهید داشت.که با این برنامه سرعت بی نظیر به کارتان می توانید بدهید.(کاربردها:پیاده کردن نقاط اکس مسیر و ............)
با این فایل می تونید همزمان که از نقاط ID می گیرید اونو مستقیم به فرمت GSI داخل یه فایل بریزید و فایل هم به راحتی به توتال انتقال بدید! طرز کارشم خیلی راحته!از منوی Tools > Load Aplication فایل لیسپ رو لود میکنیدبعدش توی خط فرمان تایپ میکنید TPF بعد از اون از ما می خواد که نام فایل رو بنویسید. توجه داشته باشید که فقط نام رو بنویسید و از نوشتن پسوند خودداری کنید چون اتوماتیک فایل ساخته شده پسوند GSI میگیره.بعد از نام فایل اینتر می کنید. حال از ما سوال میکنه که می خواید پیشوند نقاط چی باشه. با نوشتن حرف C و اینتر کردن از این مرحله صرف نظر می کنید! سوال بعدی این هست که شماره نقاط از چه شماره ای شروع بشه که می تونید عدد ۱رو بزنید و اینتر کنید.بعد از این کار پیام Selection Piont روی خط فرمان ظاهر میشه که با کلیلک کردن بر روی نقاط مخصات اون نقطه به صورت GSI ذخیره میشه.نکات :
لازم به زدن دستور ID نمی باشد.
-2با کلیلک کردن بر روی یک نقطه نرم افزار منتظر نقطه ی بعدی می ماند و هر کلیک بر روی صفحهی Drawing یک مختصات فرض میشود و آن را ذخیره می کند پس مواظب باشید تا مختصات های تصادفی ذخیره نگردد!
-3بعد از کلیک کردن بر روی آخرین نقطه نرم افزار منتظر نقطهی بعدی می باشد که شما با زدن کلیدEnter به آن خاتمه می دهید.
-4در بعضی مواقع Osnap غیر فعال می گردد که شما باید آن را فعال کنید./span>>/>>/>>/>
خیلی اوقات پیش میاد که ترسیماتی به دستم میرسه که اصولی کار نشده و نمیدونم چرا پر از نقطه های اضافی هست. این نقطه ها در ترسیماتی که قراره GIS Ready بشه مشکلات زیادی ایجاد میکنه. علاوه بر این ترسیم شما رو خیلی آماتور نشون میده!پاک کردن این نقاط اگر زیاد هم باشند و در لایه های مختلف هم باشند ممکنه خیلی خسته کننده باشه و احتمالا چند تایی هم از زیر دست شما در میره !ممکنه سعی کرده باشید این نقاط رو با کمک فیلتر ها مختلف انتخاب و حذف کنید ولی در کمال تعجب نتوانستید !دلیلش هم اینه که اصلا اینها نقطه نیستند بلکه خطوطی با طول صفر هستند که ظاهری شبیه نقطه دارند. برای حذف این شبهه نقاط میتوانید از لیسپ زیر استفاده کنید. در این لیسپ کلیه Line ها و Polyline های با طول صفر و کلیه متن های خالی و به طور کلی single-vertex ها رو پاک میکنه. این لیسپ کاری با نقاط واقعی نداره! ضمنا قبل از استفاده از این لیسپ مطمئن شوید که هیچ لایه ای قفل نباشه.>/>>/>/span>>/>
و چند لیسپ جالب دیگر
Kateb – کاتب – برای نگارش فارسی بدون مشکل در محیط برنامه اتوکد
TAREAF – برای گرفتن مساحت کلی چندین آبجکت به صورت همزمان
Tlen – برای گرفتن طول چندین آبجکت به صورت همزمان>/>>/>/span>>/>>/>>/>/span>>/>
برای دانلود کردن روی دانلود کلیک نمایید، بعد از باز کردن فایل ها آنها را درون فولدر Support اتوکد کپی نمایید و برای اجرای آنها به وسیله Load Application آنها را Load کرده سپس نام آنها را تایپ نمایید.>/>>/>/span>>/>>/>>/>/span>>/>
حجم : >/>>/> 5KB/span>>/>>/>>/>/span>>/>>/>>/>(دانلود)/span>>/>
این فایل لیسپ با گرفتن زاویهی یک خط .. یک تکست رو به همون زاویه میچرخونه در بعضی موارد کاربرد داره(دانلود)
این برای entity هاست(دانلود)
لیسپ لیسپ یک زبان برنامهنویسی رایانه است که در سال ۱۹۵۸ به وسیلهٔ جان مککارتی ابداع شدهاست. این زبان، مانند زبان برنامهنویسی پرولوگ، بیشتر برای برنامهنویسی هوش مصنوعی مورد استفاده قرار میگیرد. با توجه به اینکه زبان لیسپ از نحو سادهای برخوردار است، تجزیه و پیادهسازی آن نسبتاً با سهولت انجام میشود.
متن برنامههای لیسپ عموماً از نمادها و لیستهایی از نمادها تشکیل میشود و بدین خاطر است که این زبان لیسپ (مخفف پردازش لیست) نامیده شدهاست. یکی از ویژگیهای جالب زبان لیسپ این است که خود برنامههای لیسپ نیز لیست هستند و بنا بر این، میتوان با برنامهها به عنوان دادهها رفتار کرد و یا دادهها را به عنوان برنامه ارزیابی نمود.
لیسپ دارای گویشهای مختلفی است که بعضی از آنها دارای قابلیتهای شیءگرا نیز هستند. از این میان میتوان به کامن لیسپ اشاره کرد.
در ابتدا لیسپ به عنوان علامتگذاری و نمادسازی ریاضیات و برای برنامههای کامپیوتری ابداع شد.زبان لیسپ به سرعت مورد توجه برنامه نویسان از جمله برای تحقیقات علمی هوش مصنوعی قرار گرفت.لیسپ یکی از ابتدائی ز بانهای برنامه نویسی میباشد،ودر علوم کامپیوتر بر بسیاری از تفکرات و ایدهها پیشگام بود.لیسپ شامل ساختمان دادهٔ درخت،مدریت نگهداری اتوماتیک،برنامه نویسی پویا،برنامه نویسی شی گرا و کامپایلر مستقل میباشد.
نام لیسپ از زبان پردازش لیسپ گرفته شدهاست.لینک لیست یکی از قسمتهای اصلی ساختمان دادهٔ زبان لیسپ است و سورس کد لیسپ از لیستها ساخته شدهاست و میتواند به عنوان ساختمان داده عمل کند.پیشرفت و توسعهٔ سیستم ماکرو به برنامه نویسان اجازه میدهد تا ترکیبهای جدید ویا حتی حیطهٔ زبانهای برنامه نویسی ویژهای را ایجاد کرده و در زبان لیسپ تعبیه کنند. قابلیت تبادل کدها و دادهها به زبان لیسپ قابلیت تشخیص ترکیبها را میدهد،همهٔ کدهای برنامه به صورت عبارتهای نمادین یا لیستهای پرانتز گذاری شده نوشته شدهاند.
یک تابع میتواند توسط خودش ویا توابع دیگر فراخوانی شود ویا طبق قواعد نحوی نوشتن یک لیست و استفاده از اول نام عملگرها و پیروی کردن از قواعد آرگومانها ایجاد شود.به عنوان مثال تابع fدارای 3 آرگومان میباشد و به صورت مقابل توانائی فراخوانی را دارد و مورد استفاده قرار میگیرد:
(f x y z)
زبان برنامه نویسی لیسپ توسط جان مک کارتی در سال 1958 در حالی که در مؤسسهٔ فناوری ماساچوست (MIT) بود ابداع شد.مک کارتی طرح خودش را در یک مقالهٔ مرتبط با انجمن ماشین آلات کامپیوتری در سال 1960 منتشر کرد.طرح وی در ابتدا به صورت «بخش اول:توابع بازگشتی از دید عبارتهای نمادین و محاسبهٔ آنها توسط ماشین» ارائه شد و بخش دوم آن هیچگاه منتشر نشد.وی نشان داد که با یک تعداد ساده و کمی از عملگرها و علمتگذاری توابع میتوان یک زبان تورینگ کامل برای الگوریتمها ایجاد کرد. زبان پردازش اطلاعات اولین زبان هوش مصنوعی بود. از سال 1955 یا 1956 و پیش از آن ایدههای بسیاری بر زبان لیسپ وارد شد از جمله پردازش لیست و توابع بازگشتی که در زبان لیسپ به کار برده شد. ثبتهای اصلی مک کارتی به صورت عبارتهای غیر نمادین که خواستار تفسیر کردن و برگرداندن به عبارتهای نمادین بود.به عنوان مثال عبارت غیر نمادین car[cons[A,B]] معادل عبارت نمادین (car (cons A B)بود که در زبان لیسپ به کار گرفته شده بود.برنامه نویسان به سرعت عبارت نمادین را انتخاب و عبارتهای غیر نمادین را ترک کردند.
لیسپ برای اولین بار توسط استفان راسل روی یک کامپیوتر IBM 704 اجرا شد. راسل مقالهٔ مک کارسی را مطالعه کرد و دریافت که توابع لیسپ میتوانند در کد ماشین اجرا شوند. این نتیجه از مطالعه و دریافت راسل نشان میدهد که مفسر لیسپ میتوانست برای اجرای برنامههای لیسپ و ارزیابی صحیح عبارت لیسپ استفاده شود.
دو زبان اسمبلی به عنوان دو عملیات اصلی و ابتدائی تجزیه و جدا کردن عناصر اصلی لیست برای IBM 704 شد.این دو زبان اسمبلی car (مضمون آدرس ثبات) و cdr (محتوای کاهش میزان ثباتها) نسخهٔ لیسپ هنوز ازcar وcdr برای عملیاتی که اولین عنصر در یک لیست و باقی ماندهٔ لیست را برمیگرداند،استفاده میکند.
اولین کامپایلر تکمیل شدهٔ لیسپ،در سال 1962توسط تام هارت و مایک لوین در MIT اجرا شد، این کامپالر معرفی شده مدل لیسپ با کامپایلر نحوی در هر کامپایل و ترجمهٔ توابع میتواند به طور رایگان در هم بیامیزد.
زبان به کار گرفته شده در ثبت هارت و لوین نسبت به کدهای ابتدائی مک کارتی به شیوهٔ لیسپ مدرن و جدید نزدیک تر میباشد.
پیوستن به هوش مصنوعی:
بعد از شروع لیسپ ، لیسپ به انجمن تحقیقاتی هوش مصنوعی پیوست ، خصوصا به سیستمهای PDP ، زبان لیسپ به عنوان پیاده ساز طرح کوچک زبان برنامه نویسی استفاده میشود که مبنایی برای سیستم معروف هوش مصنوعی SHRLU بود.
در سال 1970 تحقیقات علمی هوش مصنوعی به شاخههای تجاری انشعاب پیدا کرد که کارایی سیستم لیسپ موجود در این زمینه یک روند رو به رشد شد.
لیسپ یک سیستم مشکل برای اجرا، مهارت کامپایلر و سخت افزار ذخیره کننده را در سال 1970 دارا باشد. بازیابی عادی حافظه ، توسط دانشجوی فارغالتحصیل MIT ( دانیل ادوارد ) گسترش داده شده ،که برای اجرای لیسپ روی سیستمهای محاساتی ساخته شده بود اما راندمان آن هنوز یک مشکل بود. برای رهبری ماشین لیسپ: سخت افزار اختصاصی برای اجرای محیط لیسپ و برنامههای آن استفاده میشود. پیشروی در هردو سخت افزار کامپیوتر و فناوری کامپایلر از ماشینهای لیسپ از کار افتاده الهام گرفته شدهاست.
طی شک کوشش بزرگ نسخههای بیشماری از زبان لیسپ را در یک زبان واحد متمرکز و متحد کردند(نسخههای برجسته و قابل ملاحظهای شامل: اینترلیسپ ، مک لیسپ ، متالیسپ ، و فرانزلیسپ) زبانهای جدید (لیسپ عمومی و مشترک ) در اصل یک زیر مجموعهٔ سازگاری از نسخههای تعویض شده بود. در سال 1994 ، ANSI یک لیسپ عمومی و مشترک استاندارد منتشر کرد. لیسپ عمومی و مشترک زبان برنامه نویسی فناوری اطلاعات ANSI X3.226-1994 در آن زمان فروشگاههای جهانی برای لیسپ خیلی کوچکتر از المان بود.
ترکیب و معنا شناسی:
لیسپ یک عبارت جهتدار است ، برخلاف بیشتر زبانهای دیگر ، بین عبارتها و جملهها تمایز و فرقی وجود ندارد . همهٔ کدها و دادهها به عنوان عبارتها نوشته شدهاند – زمانی که یک عبارت ارزیابی میشود یک مقدار ( یا یک لیستی از مقادیر) را میسازد ، که آن هم در داخل عبارات دیگر جاسازی میشود.
مقالهٔ 1958 مک کارتی دو نوع از ترکیبها را معرفی کرد: عبارت نمادین Sexps هم نامیده میشود ، که بازتابی از نمایش داخلی کدها و داده هاست و عبارت غیر نمادین هرگز مورد توجه قرار نگرفت و تقریبا همهٔ زبانها امروزه از عبارات نمادین استفاده میکنند.
استفاده از پرانتزگذاریها تفاوت بسیار آشکار و مشهودی میان لیسپ و دیگر زبانهای برنامه نویسی ایجاد کردهاست . اسم مستعار LISP از Lost In Stupid Parenthese و یا Lost of Irritating Supper fluous parenthese گرفته شدهاست . هرچند ترکیب عبارتهای نمادین مسئولی برای توان لیسپ است ، این ترکیب به شدت با قاعده و منظم است.
هرچند ترکیبات لیسپ به نمادگذاری قدیمی محدود نشدهاند میتواند به سبکهای دیگر توسعه پیدا کند. تکیه روی عبارتها ، قابلیت انعطاف پذیری زیادی به زبان میدهد ، زیرا توابع لیسپ به صورت لیست نوشته شدهاند ، آنها دقیقا مانند دادهها میتوانند پردازش شوند، این قابلیت اجازه میدهد برنامههای لیسپ به سادگی و راحتی نوشته شوند و به نسبت برنامههای دیگر به راحتی اداره شوند . (برنامه نویسی غیر نمادین)بسیاری از نسخههای زبان لیسپ با عناصر جدا شده توسط فاصلههای سفید و پرانتزگذاری شدهها نوشته میشود. برای مثال (1 2 f00 ) یک لیست است که عنصرهای آن سه اتم هستند ( اتم: کوچکترین عضو لیست ) : این مقادیر 1 و 2 و F00 هستند. این مقادیر ضمنا دارای نوع دادهای خاصی هستند ، مثلا این لیست دارای دو عدد صحیح 1 و 2 و یک نوع دادهٔ ویژهٔ لیسپ که یک Symbol یا نماد نامیده میشود.
همچنین یک لیست خالی () به عنوان یک اتم ویژهٔ صفر و یا پوچ معرفی شدهاست. موجودیت یک لیسپ از اتم و لیست تشکیل میشود. عباتها به عنوان لیست نوشته شدهاند ، استفاده کردن از ثبتهای پیشوندی ، عناصر ابتدایی در لیست نامی از یک شکل تابع ، عملگرها ، ماکروها و یا اپراتورهای ویژهاست.
آرگومانها باقیماندههایی از لیستها هستند ، برای مثال تابع list آرگومانها را به عنوان یک لیست بر میگرداند ، بنابراین عبارت (list ‘1 ‘2 ‘foo) ارزیابی میشود و حاصل این ارزیابی لیست (1,2,foo) میباشد.
نیازی به ارزیابی کردن اعداد نیست چون ارزیابی عدد 1 عدد 1 میشود.آرگومانهای مثال قبل از اعداد هستند یعنی آرگومانهای ویژه که این آرگومانها از ارزیابی کردن آرگومانها جلوگیری میکنند چون مقادیر آنها مشخص است.هر عبارتی که بیان میشود قبل از اینکه با عبارات دیگر پیوست داده شود به صورت بازگشتی ارزیابی میشود.
(list(1 2 (list(3 4)))) در این مثال حاصل اررزیابی به صورت لیست (1,2(3,4)) میباشد ،توجه کنید این لیست دارای 3 آرگومان میباشد ، لیستها میتوانند به صورت تو در تو باشند . اپراتورهای حسابگر به صورت همسان رفتار میکنند.
حاصل عبارت (+1 2 3 4 ) عدد 10 میباشد. عبارت معادل عبارت بالا به صورت 1+2+3+4 میباشد که از نشانگذاری میان وندی استفاد شدهاست. اپراتورهای حسابگر در زبان لیسپ variadic(n-ary) که زبان لیسپ توانایی پذیرفتن هر تعداد آرگومان را داراست.
عملگرهای ویژه ساختمان کنترل لیسپ را آماده میکنند. برای مثال ، اپراتور ویژه if سه آرگومان میپذیرد،اگر اولین آرگومان صفر و یا خالی باشد دومین آرگومان ارزیابی میشود و در غیر این صورت هٔرگومان سوم بررسی میشود . بنابر این if(nill(list 1 2 “foo”)(list 3 4 “bar”) که تنها آرگومان (list 3 4 “bar”) بررسی میشود.
عبارتهای لاندا(Lambda) :
دیگر عبارتهای ویژه لاندا میباشد که برای وصل کردن متغیرها به مقادیرشان که درون یک عبارت ارزیابی میشوند استفاده میشود. این عملگر همچنین برای ایجاد کردن توابع هم استفاده میشود. آرگومانهای درون لاندا یک لیستی از آرگومانها هستند و عبارت ارزیابی توابع میباشند. مقادیر بازگشتی مقادیری از عبارت قبلی که ارزیابی شدهاند هستند.
عبارت (Lambda(arg)(+arg1)) زمانی که این تابع به کار برده میشود به صورت یک تابع ارزیابی میشود و وظیفهٔ این تابع معرفی کردن یک آرگومان و اتصال دادن آرگومان به arg و در نهایت برگرداندن یک عدد بزرگتر از آرگومان قبلی میباشد عبارتهای لاندا خیلی متفاوت با نام تابع رفتار نمیکند بنابراین اگر در عبارت (Lambda(arg)(+arg1))5->6 عدد 5 را وارد کنیم خروجی آن 6 میشود. اتمها : در نسخهٔ اصلی لیسپ دو نوع دادهٔ ابتدایی وجود دارد: اتمها و لیستها یک لیست یک رشتهٔ منظم و محدودی از عناصر میباشد ، که هر عنصر در درون خودش یکی از این اتمها و یا لیستها را دارد و یک اتم یک عدد یا یک نماد میباشد.
در اصل یک نماد یک رقم منحصر به فرد میباشدو به عنوان یک رشتهٔ عددی در سورس کد نوشته شده و هر دو به عنوان یک نام متغیر و یک رقم دادهای در پردازش نمادین استفاده میشود برای مثال list(foo(BAR 1)2) شامل سه عنصر : Symbol foo و list(BAR 1) و عدد 2 میباشد. تفاوت اصلی بین اتمها و لیستها این است که اتمها تغییر ناپذیر و منحصر به فرد میباشند. دو اتم که دقیقا به یک صورت و به یک روش در یک شی نوشته شده باشد در مکان متفاوتی در سورس کد ظاهر میشوند، هر لیست یک شی مجزا میباشد و به خاطر اینکه مستقل از دیگر لیست هاست و از دیگر لیستها به وسیلهٔ مقایسهٔ عملگرها مشخص میشود.
Consها و لیستها:
یک لیست لیسپ یک لینک لیست جداست، هر ذره از این لیست یک Cons نامیده میشود و از دو اشاره گر که Car و Cdr نامیده میشوند ترکیب شدهاست این دو اشاره گر به ترتیب معادل دو فیلد Data و Next در مقالهٔ لینک لیست میباشد.
Car -> Data Cdr -> Next
بسیاری از ساختمان دادهها میتوانند ترکیبهایی از خانههای Cons را داشت باشند ، یکی از این ساختمان دادههای ابتدایی لیست مخصوص نامیده میشود ، یک لیست مخصوص هر دو نماد لیست خالی nill و یا خانهها Cons را داراستکه در هر یک از این خانهها هر اشاره گر Car به یک داده اشاره میکند (که ممکن است این اشاره گر Cons به یک لیست اشاره کند) و یک اشاره گر Cdr به یک لیست مخصوص دیگر اشاره میکند. اگر یک Cons داده به سر یک لینک لیست برده شود سپس اشاره گر Car آن به اولین عنصر از لیست و اشاره گر Cdr آن به انتهای یک لیست اشاره میکند به همین دلیل عملکرد Car و Cdr را به ترتیب first و rest هم نامیده میشود.
ارایهٔ لیست عبارت نمادین:
نمایش پرانتزگذلری عبارت نمادین ساختمان لینک لیست . چندین راه برای نمایش لیست یکسان به عنوان یک عبارت نمادین وجود دارد . یک خانه (Cons ) میتواند به صورت نشان گذاری جفت نقطه گذاری شده نوشته شود به عنوان مثال (a.b) که در آن a یک Car و b یک Cdr است. یک لیست مخصوص بلند ممکن است به صورت یک نشان گذاری جفت نقطه گذاری شده نوشته شود .(a.(b.(c.(d.nill))))
طبق قرارداد کوتاه شدهٔ عبارت بالا به صورت (a b c d ) در نمادسازی لیست میباشد یک لیست مخصوص ممکن است در یک ترکیبی از دو صورت (a b c.d) نوشته شود . برای سیستمی از سه Cons که آخرین Cdr آن d است.
دستورالعملهای پردازش لیست:
لیسپ دستورالعملهای زیادی را برای دستیابی و کنترل لیستها فراهم میکند . لیستها میتوانند مستقیما با پردازهٔ لیست ایجاد شوند .لیست هر تعدادی از آرگومانها را میپذیرد و تعدادی از آرگومانها را بر میگرداند.
(list 1 2 ‘a 3 ); Output : (1 2 a 3 ) (list 1 ‘(2 3) 4 ); Output : (1 (2 3) 4)
به این دلیل راهی که لیستها ایجادمی شوند از جفتهای Cons (Car,Cdr) پردازهٔ Cons میتواند برای اضافه کردن یک عنصر به جلوی یک لیست استفاده شود. توجه کنید که پردازهٔ Cons در هدایت و به کار بردن آرگومانهای لیست نامتقارن است ، بدین دلیل روشهای لیستها ایجاد میشوند.
(Cons 1 ‘(2 3)); Output: (1 2 3 ) (Cons ’(1 2) ‘(3 4)) Output : ((1 2) 3 4)
پردازهٔ Oppend دو یا چند لیست را با هم ادغام میکند و یک لیست واحد ایجاد میکند زیرا لیست لیسپ یک لینک لیست است و پیچیدگی زمانی الحاق کردن لیستها از مرتبهٔ پیچیدگی زمانی O(n) میباشد.
ساختار اشتراکی: لیستهای لیسپ لینک لیستهای ساده میتوانند با یکی دیگر از لیستها در ساختمان مشترک باشند به عبارت دیگر دو لیست میتوانند دم یکسانی داشته باشندیا رشتهٔ پایانی از Consهای یکسانی داشته باشند مثلا:
(setf foo (list 'a 'b 'c)) (setf bar (cons 'x (cdr foo)))
لیست foo و bar به ترتیب به صورت (a b c) و (X b c ) هستند هرچند دم (b c ) در هر دو لیست ساختار یکسانی دارند ولی مانند هم نیستند، خانههای Cons اشاره گر به b و c در محل حافظهٔ یکسانی برای هردو لیست قرار دارد.
ساختار اشتراکی سریع تر از کپی کردن میتواند به صورت چشمگیری کارایی را بهبود بخشند. هرچند ، این مهارت میتواند متقابلا در راههای نامطلوب با عملکردهایی که تغییرات لیستهای گذشته روی آرگومانهای آن تاثیر بگذارد ، اثر کند.
تغییرات یک لیست از قبیل تغییر دادن C با یک goose روی دیگری نیز تاثیر میگذارد setf (third foo) 'goose) که این تغییر نتیجه را به صورت (a b goose) تغییر میدهد اما bar هم تغییر میکند (X b goose) که ممکن است یک نتیجهٔ غیر منتظره باشد.
زبانهای برنامه نویسی Lisp معمولا از یک خط دستور محاورهای استفاده میکنند،که میتواند با یک محیط پیچیدهٔ گسترش یافته ترکیب شود.کاربر اصطلاحات و دستورات را در خط دستور وارد کرده یا با رهبری IDE آنها را به سیستم Lisp میفرستد. Lisp دستورات را میخواند ، آنها را ارزیابی میکند و نتایج را چاپ میکند. به این دلیل است که خط دستور زبان Lisp به حلقهٔ Read-Eval-Print یا REPL معروف است.
نمونهٔ سادهای از عملیات REPL در زیر آمدهاست. این یک شرح سادهاست که بسیاری از المانهای Lispواقعی در آن نمیآید مانند ماکروها و کوئتها.
تابع read جملات متنی را به عنوان ورودی میپذیرد و آنها را به ساختار لیست تجزیه میکند. به عنوان مثال ، وقتی شما رشتهٔ (+ 1 2) را در اعلان تایپ میکنید، تابع read آن را به یک لیست پیوندی حاصل از 3 المان ترجمه میکند: علامت + ، عدد 1 و عدد 2 . خیلی اتفاق میافتد که لیست قسمت موثری از یک کد Lisp باشد که قابل ارزیابی است.به همین دلیل است که یک قطار از لیست به یک تابع نام عملگر مع میدهد.
تابع eval ساختار لیست را ارزیابی میکند و نوعی دیگر از ساختار را به عنوان نتیجه باز میگرداند.ارزیابی کردن لزوما تفسیر کردن معنی نمیدهد؛ بعضی سیستمهای Lisp هر عبارتی را به زبان ماشین تبدیل میکنند. خیلی ساده است؛ به هر حال؛ برای تعریف ارزیابی به عنوان تفسیر : برای ارزیابی یک لیست که نام تابع دارد ، eval ابتدا تمام آرگومانهای داده شده به cdr اش را ارزیابی میکند و سپس تابع را روی آن آرگومانها اعمال میکند.در این مثال ، تابع عمل جمع است و به آرگومانهای (1 2) اعمال میشود که نتیجه 3 است.این نتیجهٔ ارزیابی است.
این وظیفهٔ تابع print است که نتیجه را به کاربر نمایش دهد. برای نتیجهٔ سادهٔ 3 این کار ناقابل است. یک عبارت که با قسمتی از ساختار لیست ارزیابی میشود میاز دارد که print لیست را به حرکت در آورد و در خروجی به شکل یک عبارت S نمایش دهد.
برای اجرا کردن یک REPL در Lisp ، تنها لازم است که این سه تابع را اجرا کنید و یک تابع حلقه بی نهایت را.(به طور طبیعی اجرای eval پس از اجرای عملگرهای ویژهای مانند if پیچیده خواهد شد.)یک REPL ساده به خودی خود با یک خط کد انجام شد: (loop(print(eval(red))))
لیست در اصل تعداد کمی ساختار کنترلی دارد. منتها در تکامل و گسترش زبان تعداد زیادی به آن اضافه شدند.(عملگر اصلی شرایط در زبان Lisp که cond بود بعدا متشکل شد از ساختار if-then-else )
برنامه نویسان در نسخهٔ Scheme حلقهها را به صورت بازگشت دم( tail recursion ) بیان میکنند. موسسات متعارف علوم کامپیوتر Scheme بعضی دانشجویان را متعاقد میکند که تنها راه تکرار در زبان Lisp استفاده از بازگشت دم است؛ این اشتباه است. تمامی نسخههای متداول دیده شده از Lisp دارای ساختارهای الزامی برای تکرار هستند.درScheme دستور do به عنوان دستور حلقه پیچیدهٔ Lisp است. علاوه بر این مسالهٔ اصلی که شی گرایی را مهمتر از مسالهٔ فاعلی کرده این است که Scheme نیازهای ویژهای برای کارکردن با فراخوانی دم(tail calls )دارد، در نتیجه دلیل ترغیب Scheme به استفاده از بازگشت دم این است که روش صراحتا با تعریف خود زبان پشتیبانی میشود . در مقابل ، ANSI Common Lisp نیازی به بهینه سازی که معمولا به حذف فراخوانی دم گفته میشود ندارد. در نتیجه این حقیقت که بازگشت دم به عنوان یک جایگزین تصادفی برای استفاده از ساختارهای مبتنی بر تکرار ( مانند do dolist loop ) توصیه نمیشود تنها یک مسالهٔ برتری ادبی نیست ، ولی بالقوه یکی از کارآمدهاست ( بعد از این که این روش فقط به عنوان یک پرش ساده به کار نرفت) و به عنوان یک تصحیح برنامهاست .
بعضی از ساختارهای کنترلی Lisp عملگرهای ویژهای هستند ، هم ارز کلیدواژههای ترکیبی باقی زبانها. عباراتی که این عملگرها استفاده میکنند ظاهری شبیه فراخوانی تابع دارد، تفاوت اینجاست که آرگومانها ضرورتا نباید ارزیابی شوند یا در مورد تکرار شاید بارها ارزیابی شوند. در مقابل اکثر زبانهای برنامه نویسی ، Lisp به برنامه نویسان اجازه میدهد با خود زبان ساختاهای کنترلی را پیاده سازی کنند.ساختارهای کنترلی زیادی در ماکروهای Lisp پیاده سازی میشوند و برنامه نویسان میتوانند هر ماکرو را گسترش دهند ،برای آنانی که میخواهند بدانند چطور کار میکند.
هر دوی Lisp Commonو Scheme دارای عملگرهای کنترلی غیر محلی هستند.تفاوت این عملگرها یکی از عمیق ترین تفاوتها مابین این دو نسخهٔ زبان است. Scheme از ورودی مستمر با استفاده از روش call/cc پشتیبانی میکند ، که به برنامه اجازهٔ ذخیره ( و بعدا بازیابی کردن) یک عملیات ویژه را میدهد . Common Lisp از ورودی مستمر پشتیبانی نمیکند ولی از راههای زیادی برای انجام رهایی از تکرار پشتیبانی میکند.
آیا می دانید که کافئین (Caffeine) یک ماده شیمیایی وخوردنی است که به وفور در قهوه،شکلات وچای یافت می شود ونوعی داروی محرک به شمار می آید که موجب بی خوابی نیز می شود؟
تا به حال برایتان پیش آمده که بخواهید یک فیلم تماشا کنید،ام رایانه پس از مدت زمانی خودبه خود اسکرین سیور ویندوز را به نمایش در بیاورد ویا آن را به حالت آماده باش(Standby) ببرد؟
همان طور که می دانید در ویندوز تنظیماتی وجود دارد که باعث می شود تا در صورت عدم حرکت نشانگر ماوس ویا عدم فشردن کلیدهای صفحه کلید،پس از مدت زمان مشخصی اسکرین سیور ویندوز فعال شود ویا حتی سیستم عامل به حالت اماده باش درآید.گاهی اوقات هنگام مشاهده یک فیلم این مشکل پیش می آید چرا که نه ماوس تکان می خورد ونه کلیدی فشار داده می شود که روش های مختلفی برای رهایی از این مشکل وجود دارد.یکی از این روش ها حرکت ماوس در فواصل زمانی مختلف است و روش دیگر نیزغیر فعال کردن این تنظیمات هنگام مشاهده فیلم !اما هیچ کدام ازاین روش ها کار منطقی نیست چرا که برای حرکت ماوس باید فردی مدام کنار رایانه بنشیند و را ماوس تکان بدهد وبرای فعال وغیرفعال سازی این قابلیت نیز باید مدت زمانی ازوقت خود را تلف کند! پیشنهاد ما به شما برای رهایی از این مشکل خوراندن کافئین به رایانه است !!!!!!!
نرم افزار Caffeine قادر است رایانه شما را همیشه بیدار و سرحال نگه دارد و به راحتی این مشکل را رفع کند.این نرم افزار که حجم ان بسیار کم وحدود 40 کیلوبایت است ونیاز به نصب هم ندارد،می تواند با شبیه سازی فشرده شدن کلیدهای صفحه کلید،در هر 59 ثانیه یک بار کلید از صفحه کلید بطور مجازی فشار دهد وموجب شود تا رایانه شما به خواب نرود.
پس اگر می خواهید بدون دردسر فیلم ببینید یا رایانه خود را روشن بگذارید وفایلی را از اینترنت دانلود کنیدبا کمک کافئین می توانید مطمئن باشید که رایانه شما بیدار است وبه انجام کار محول شده ، توسط شما می پردازد.برای دانلود این برنامه به سایت زیر مراجعه کنید:
نرم افزار معروف Google Earth که نسخه جدید آن چند وقتی هست عرضه شده و البته برای کاربران ایرانی قابل دسترس نمی باشد را آماده کرده ایم تا دریافت نمائید. نسخه 5 از این نرم افزار که قابلیت های جدیدی در نمایش کره زمین از فضا دارد و می تواند تصاویر به روز شده از زمین را نمایش دهد. این تصاویر که از ماهواره ها دریافت می شوند برای مکان های مختلف در این کره خاکی در نظر گرفته شده است. در کشورهای مختلف اماکن مهم مشخص شده و شهرها همه در اختیار کاربر قرار دارد. به سادگی در این نرم افزار می توان شهر یا حتی منطقه ای خاص را جست و جو کرد و منتظر ماند تا موتور جست و جوی قدرتمند Google Earth آن را پیدا کند.
در نسخه جدید که قابلیت های سه بعدی کامل تر شده اند می توان تصاویر را از نزدیک و از کنار هم مورد بازبینی قرار داد . امکان جالب دیگری که در نسخه های جدید اضافه شده است نمایش کرات و جو است. به سادگی می توان با چرخیدن در ماه و خورشید و کهکشان های مختلف را با انواع جزئیات به تماشا نشست.
قابلیت های کلیدی Google Earth Pro 5.0 :
- تماشای زمین از فضا
- امکان عکس گرفتن از نقاط مختلف
- قابلیت زوم تا حدودی زیادی برای نمایش حتی منازل و اماکن
- قابلیت تماشای کهکشان ها و گشت و گذار در فضا
- پشتیبانی از GPS
- محیط سه بعدی و بهینه شده در نسخه جدید
- امکان جست و جو در این نرم افزار
- قابلیت نمایش تمامی موارد جغرافیایی
- سازگار با نسخه های مختلف ویندوز
لینکهای دانلود برنامه
جاوا، امروزه یکی از متداول ترین زبان های برنامه نویسی جهان است. این زبان از لحاظ ظاهری شباهت های زیادی به ++C دارد ولی در اصل می توان تفاوت های بنیادین زیادی را برای آنها بر شمرد. بر خلاف بسیاری دیگر از زبان های کامپایلری که سورس کد آنها پس از کامپایل شدن به باینری یک ماشین حقیقی ترجمه می شود، برنامه های جاوا پس از کامپایل شدن به باینری ماشینی به نام ماشین مجازی جاوا یا JVM ترجمه می شود. این کد باینری را بایت کد می گویند. ماشین مجازی جاوا عمدتا بصورت نرم افزاری پیاده سازی می شود ولی پیاده سازی های سخت افزاری یا ترکیبی (بیشتر به صورت کمک پردازنده) از آن نیز وجود دارد. استفاده از ماشین مجازی یک روش مدرن در زبان های برنامه نویسی محسوب می شود و مزایای زیادی دارد. ماشین مجازی جاوا می تواند امنیت اجرای برنامه ها را تضمین کند و حق دسترسی های مختلفی برای برنامه ها در نظر بگیرد. همچنین ماشین مجازی جاوا سازگاری اجرای برنامه های جاوا را تحت سیستم عامل های مختلف حفظ می کند. یک باور غلط در بین بسیاری از مردم این است که برنامه های نوشته شده به زبان جاوا کندتر از برنامه های نوشته شده به زبان های کامپایلری اجرا می شود، در حالی که سرعت اجرای یک برنامه جاوا کاملا بستگی به نحوه پیاده سازی ماشین مجازی دارد. ماشین های مجازی جدید جاوا معمولا از تکنیکی به نام کامپایل در زمان لازم یا JIT استفاده می کنند. در این روش در هنگام اجرای برنامه بایت کد ابتدا به کد باینری ماشینی حقیقی که بر روی آن اجرا می شود ترجمه می شود و سپس باینری ترجمه شده بر روی ماشین اصلی اجرا می شود. در این فرآیند ماشین مجازی می تواند بهینه سازی های خاص ماشین حقیقی را بر روی کد انجام دهد که در برخی موارد باعث می شود برنامه های جاوا حتی سریع تر دیگر زبان های کامپایلری اجرا شود.
تاریخچه
جاوا در مقایسه با سایر زبانها همچون ++C یا Basic یا Fortran زبان نسبتاً جدیدی است. شرکت سان میکروسیستمز (یا به اختصار سان) در سال 1991 یک پروژه تحقیقاتی به نام Green را آغاز کرد. هدف این پروژه ایجاد یک زبان جدید شبیه به ++C بود که نویسنده اصلی آن، جیمز گاسلینگ، آن را بلوط Oak می نامید. اما بعدها به دلایل مشکلات حقوقی نام آن به جاوا تغییر کرد. پروژه گرین به دلیل مشکلات بازاریابی در شرف لغو شدن بود تا اینکه گسترش وب در سال 1993 باعث نمایش تواناییهای وافر جاوا در این عرصه گشت. و به اینگونه بود که سان در می 1995 جاوا را رسما افتتاح کرد.
برنامههای جاوا و اپلتها
جاوا برای نوشتن انواع برنامههای کاربردی مناسب است. با جاوا میتوان انواع برنامههای زیر را نوشت:
* برنامههای تحت وب؛
* برنامهنویسی سیستمهای کوچک مانند موبایل، پاکت پیسی و ...؛
* برنامههای کاربردی بزرگ (Enterprise)؛
* برنامههای رومیزی (Desktop)؛
* و غیره.
قابلیت خاصی در جاوا وجود دارد بنام اپلت. اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامه نویسان قرار میدهند که دیگر زبانهای برنامه نویسی فاقد آن هستند.[نیاز به ذکر منبع] البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است.
از خاصیتهای جاوا در برنامههای بزرگتر نسبت به زبانهایی مثل سیشارپ، میتوان موارد زیر را نام برد:*[1]
1 - سیستم عامل:
هر چقدر زبانهای .net قوی باشند تنها بر روی پلت فرم ویندوز اجرا میشوند و برخی ویندوز را سیستم عامل غیر قابل اعتمادی در برنامه نویسی Enterprise می دانند.[نیاز به ذکر منبع] ولی جاوا از این نظر انتخابی خوب است. (هنوز پروژه mono به نتایج پایانی خود نرسیده)
2- قابلیت حمل: جاوا بر روی پلتفرمهای گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 cpu برای پردازش.
3- جاوا بیشتر از یک زبان است: جاوا فقط یک زبان نیست و انجمنهایی متشکل از بزرگان صنایع و برنامهنویسان زیادی مشغول به توسعه و ایجاد استانداردهای جدید و به روز هستند.
تکنولوژیهای اصلی جاوا در حال حاضر
* برنامهنویسی برای سیستمهای رومیزی (J2SE) که از نسخهی ۵ به بعد، به Java SE تغییر نام داده است
* برنامهنویسی سمت سرور (J2EE) که از نسخهی ۱.۵ به بعد، به JAVA EE 5 تغییر نام داده است.
* برنامهنویسی برای سیستمهای موبایل و رایانههای کوچک (J2ME) که آخرین نسخهی آن به Java Platform,Micro Edition تغییر نام داده است.
نمونههایی از برنامههای جاوا
در زیر نمونهای از برنامهای که در جاوا نوشته شده است را میآوریم:
public class Test{
public static void main(String[] args){
System.out.println("HelloWorld!");
//sample method
{
{
توزیعهای جاوا
در حال حاضر چهار توزیع کننده عمده جاوا وجود دارند:
سان میکروسیستمز: توزیع کننده اصلی جاوا و مبدع آن می باشد. در اکثر موارد هنگامی که گفته میشود جاوا منظور توزیع سان می باشد. تاکنون 7 توزیع از این شرکت ارائه شده اند. جاوا 1.0 - 1.1 - که به جاوا 1 مشهورند. جاوا 1.2 – 1.3. 1.4 و 1.5 که به جاوا 2 مشهورند اخیرا نیز توزیع 1.6 از جاوا با کدرمز ماستانگ به صورت آزمایشی منتشر شده است. قابل ذکر است توزیعهای جاوا بر روی اکثر سیستم عاملها مانند ویندوز، یونیکس و سولاریس، لینوکس و موارد مشابه عرضه شده است.
GNU Java یا gcj کمپایلر کدباز جاوا می باشد. این توزیع از سوی موسسه نرم افزارهای آزاد منتشر شده و فعلا تنها در سیستم عاملهای لینوکس قابل استفاده است. این کمپایلر توانایی ایجاد کد اجرایی (در مقابل بایت کد توزیع سان) را داراست.
مایکروسافت J# این در حقیقت یک توزیع جاوا نیست. بلکه زبانی مشابه می باشد که توسط مایکروسافت و در چارچوب .net ارائه شده است. انتظار اینکه در سیستم عاملی غیر از ویندوز هم اجرا شود را نداشته باشید.
AspectJ این نیز یک زبان مجزا نیست. بلکه یک برنامه الحاقی می باشد که امکان برنامه نویسی Aspect Oriented را به جاوا می افزاید. این برنامه توسط بنیاد برنامه نویسی جلوه گرا و به صورت کد باز ارائه شده است.
نقاط ضعف
مهمترین ایرادی که برنامه نویسان سایر زبانها به زبان جاوا می گیرند سرعت اجرایی بسیار پایین جاوا است. یک برنامه جاوا به صورت بایت کد می باشد و باید در ماشین مجازی جاوا اجرا گردد. به همین دلیل سرعت اجرای پایینی را در مقابل زبانهای قدرتمندی همچون ++C دارد. به صورت دیگر یک برنامه C به طور متوسط تا 10 برابر سریعتر از برنامه مشابه جاوا اجرا میگردد. جاوا علی رغم شیء گرا بودن در بخشی از قسمتها برای ایجاد انعطاف بیشتر یا بازاریابی بهتر برخی اصول شی گرایی را نادیده گرفته است. از جمله این قسمتها قابلیت بازتابش Reflection می باشد. هدف اصلی بازتابش این است که استفاده مجدد از کدها و گسترش کدهای موجود و مهمتر از همه نوشتن برنامههای الحاقی آسان گردد ولی این مهم با زیر پا گذاشتن بعضی اصول ممکن شده است. برای نمونه با کمک بازتابش به راحتی میتوان متدهای خصوصی دیگر کلاسها را فراخوانی کرد! زبان جاوا در مقابل زبانی مثل ++C ساده تر و یادگیری ان آسانتر است. این آسانتر بودن به سادگی به دست نیامده است بلکه با حذف بسیاری از موارد که باعث قدرتمند تر بودن زبان ++C بودهاند ایجاد شده است. مهمترین این موارد اشاره گرها و وراثت چندگانه بودهاند که در زبان جاوا یافت نمی شوند. از آنجایی که جاوا زبانی با عدم وابستگی به بستر می باشد پس استفاده از توابع سیستم عامل را در برنامه نمی پذیرد. به همین صورت نمیتوان از واسطهای برنامه نویسی غیر از جاوا در آن استفاده نمود.
پاسخ برنامهنویسان جاوا به ایرادات
سرعت پایین برنامههای جاوا در محیطی که اجرا میشوند ملاک کارایی نبوده زیرا در محیط وب مسئلهای که سرعت را کند میسازد، شبکه بوده و ابتدا باید سربار شبکه را از روی برنامهها برداشت. از طرف دیگر در برنامههای رومیزی هم در JDK 5.0 و 6.0، بهینه سازی بسیاری بوجود آمده که این مسئله باعث شده که در آخرین تست کارایی که انجام شده یک برنامه جاوا در محدودهی 0.8 تا 1.3 همان برنامه در ++C کارایی داشته باشد که 1.3 آن مربوط به بخش واسط کاربری و سرعت 0.8 آن مربوط به بسته تخلیه حافظه میشده که هیج الگوریتمی نتوانست از الگوریتم Garbage Collector جاوا پیشی بگیرد. همچنین سال ۱۹۹۹ در مقالهای آقای Lutz Prechelt به این مسئله را ثابت کردند که تجربه برنامهنویسی که برنامهای را مینویسد از انتخاب زبانی که برنامه برروی آن نوشته میشود در کارایی تاثیر بیشتری دارد و این بدان معناست که کارایی یک برنامه را برنامهنویس مشخص میکند و نه زبان برنامهنویسی( ایشان در همان مقاله از زبان جاوا استفاده نمودند تا ذهنیت بد را از بین ببرند)
حذف اشارهگرها در جاوا به دلیل مشکلاتی بوده که آنها در طول تاریخشان بوجود آوردهاند، اگرچه این موارد در برنامههای سیستمی لازم بنظر میرسد ولی در محیطهای تحتوب که بستر اصلی جاوا هستند میتوانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامههای سیستمی دارند داشته باشند و باعث میشود که توجه برنامهنویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاسپذیری برنامه به تنظیم اشارهگرها معطوف گردد.
وجود وراثت چندگانه در زبانی مانند ++C، باعث ایجاد مشکلات اساسیای میگردید که اکثر برنامهنویسان ++C از آن دوری میکرده و هنوز هم میکنند. ولی قابلیت چندریخته شدن یک کلاس از لحاظ شی گرایی بسیار مهم بوده و بنابراین توجیهی برای وجود وراثت چندگانه را فراهم مینمود. در جاوا با وارد شدن مفهومی به نام واسط برنامهسازی (Interface)، دیگر نیازی به وجود وراثت چندگانه احساس نشد و بنابراین از زبان جاوا حذف گردید. در حال حاضر اکثر طراحان برنامهها حتی به این نتیجه رسیدهاند که وراثت تکی هم باعث ایجاد مشکل بوده و تا آنجایی که میشود باید از Composition استفاده نمود و در تمامی کتابهای طراحی که از سال ۲۰۰۰ به این طرف چاپ شده به آن اشاره نمودهاند.
از ابتدای بوجود آمدن جاوا، کتابخانه JNI - Java Native Interface در آن وجود داشته که قابلیت فراخوانی و دستکاری برنامههایی در ++C و ... را میداده که از نمونههای آن میتوان به Jtwain که یک بستهایست که از کتابخانههای ویندوز برای اسکن عکس استفاده میکند، یا SWT که یک بسته نرمافزاریست که از کتابخانههای ویندوز و لینوکس (برحسب سیستم عامل) برای ساخت واسط کاربری (UI) استفاده میکند، نام برد.
یک اشتباه متداول
برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه میگیرند. در حالیکه این دو زبان گرچه در ظاهر و کلمات شبیهند ولی بطور ساختاری با یکدیگ متفاوتند. جاوا اسکریپت محصول شرکت نت اسکیپ است
منبع:wikipedia