در موضوع حروف تکراری چه فایده ای برا یه زبان دارن؟ دیدگاهی مطرح شد در مقایسه زبان گفتوگو و زبان کدزنی، که برام جالب بود:
به نظرتون زبان برنامهنویسی و زبان گفتوگو از لحاظ ساختار، عملکرد، و معنا چه تفاوتهایی با هم دارن؟
در موضوع حروف تکراری چه فایده ای برا یه زبان دارن؟ دیدگاهی مطرح شد در مقایسه زبان گفتوگو و زبان کدزنی، که برام جالب بود:
به نظرتون زبان برنامهنویسی و زبان گفتوگو از لحاظ ساختار، عملکرد، و معنا چه تفاوتهایی با هم دارن؟
شاید بد نباشه به زبان برنامه نویسی شی گرا نگاه کنیم برای مقایسه. توی این زبانهای هر ساختار به یه سری خصوصیتها شکسته میشه، و از طریق ترکیب اونها دوباره ساختار تولید میشه. توی زبان طبیعی، این خودش رو به شکل، ترکیبهائی مثل صفت و موصوف و از این قبیل، نشون میده. برای بعصی خصوصیتها، مثلا رنگ یا ارتفاع، همه چیز روشن و واضح هست ولی برای بعضی خصوصیتها وضوح به این اندازه نیست، مثلا هوش یا … .
این ساختار اتفاقا توی زبان فارسی خیلی قوی وجود داره ولی در بسیاری زبانهای دیگه روش تمایز بیشتر رایج هست.
مقایسه زبان برنامه نویسی در حال حاضر با زبان طبیعی به خاطر تفاوت حوزه عملکردشون شاید درست نباشه. من فکر میکنم اگه با همین روش زبانی برای مکالمه ساخته بشه، خیلی تفاوت اساسی وجود نداشته باشه. حجم زیادی از خصوصیتها باید ایجاد بشه و در نهایت مکالمه های طولانی نتیجه کار میشه. تا حدی همین اتفاق توی ترجمه انگلیسی به فارسی دیده میشه!
از لحاظ عملکرد، زبان برنامهنویسی فقط میتواند مفاهیم محدودی را منتقل کند. بنابراین، با زبان برنامهنویسی نمیتوان هر مفهومی را منتقل کرد.
یکی دیگر از تفاوتهایی که در زبانهای برنامهنویسی وجود دارد تلاش سازندهها در پیچیده نکردن آنهاست. هر تغییری باید توسط یک جمع از متخصصان تایید شود. این ویژگی در زبانهای طبیعی وجود ندارد به همین خاطر زبانهای طبیعی دینامیک بیشتری دارند.
زبان برنامهنویسی و زبان طبیعی خیلی با هم متفاوت هستند و مقایسهشان هدف من نبود. هدف من آوردن مثالهای موفقی بود که یک ساختار ساده هم میتواند مفاهیم مورد نیاز را منتقل کند. به خاطر همین زبان انگلیسی و عربی را هم مثال زدم. زبان انگلیسی بسیار سادهتر از عربی است (ساختار، تلفظ کلمات) اما تبدیل به زبان علم و ادبیات شده است.
فکر میکنم یکی از دلایلی که زبان انگلیسی فراگیر شده است همین سادگیاش است. به خاطر همین همیشه ذهنم به سمت این فکر میرود که چرا ویژگیهای خوب زبانها را با هم ترکیب نکنیم و یک زبان جدید بسازیم (منظورم این است که زبان شناسان این کار را بکنند).
منظورم از ویژگیهای خوب زبانها چیست؟
در زبان فارسی جنسیت نداریم و این به نظرم خیلی خوب است.
در زبان آلمانی همانگونه که مینویسیم، میخوانیم که این هم خیلی خوب است.
زبان انگلیسی کمترین تعداد حروف الفبا را دارد. حروف صدا دار این زبان برای همگی به راحتی قابل ادا کردن است.
و خیلی از ویژگیهای خوب دیگر که در زبانهای مختلف پراکنده شدهاند. اما همگی در یک جا جمع نشدهاند.
زبان برنامه نویسی یک امر برای اجراست،
در محیط نظامی میگویند یک دستور باید کاملا مشخص باشه و ابهام نداشته باشه.
زبان برنامه نویسی هم باید خالی از ابهام باشه. یا به بیان دیگه یک دستور همواره برای ماشین تنها یک معنا داره، در غیر این صورت کامپایلر بر اساس قوانین زبان، اجازه کامپایل نمیده.
زبان آدمی، برای همدردی به کار میاد که دستوری نیست
دوم برای پاسخ گویی به کار میاد که البته کامپایلرها و مفسرها نیز، از این زبان برای راهنمایی برنامه نویس استفاده میکنند، ولی خوب جزء زبان برنامه نویسی نیست.
توی زبان محاوره ما عمل آموزش انجام میدیم. یعنی دیتا همراه زبان ماست، ولی توی برنامه نویسی دیتا از کدنویسی جدا میشه و وارد متغیرها و پایگاه داده و فایلها میشه که یا نگهداری و یا پردازش یا آموخته میشه.
توی زبان محاوره ما کامنت میگذاریم که مفهومی برای شخص داره، که کامنتها در زبان برنامه نویسی نادیده گرفته میشن و فقط برای یادآوری به برنامه نویس نوشته میشن.
همین طوری که @yusef گفت، ما در برنامه نویسی تعریف داریم، یا به عبارتی در برنامه نویسی تعریف میکنیم، مثلا عمل اجرای حلقه رو از قبل پردازنده یا مفسر بلده، ما فقط اونها رو تعریف میکنیم. و در پروسه اجرا، اجرا میشن. مثل ریختن ذرت توی دستگاه تولید ذرت بوداده. به عبارتی کامپیوتر اینها رو پردازش میکنه.
به نظر من زبان گفت و گو هم توانایی انتقال هر مفهومی رو نداره
زبانهای برنامه نویسی هم ابهام دارن شاید تفاوت در اینه که در زبان برنامه نویسی معمولا عمدی و با هدف هستند
مثلا در C++ سه دسته رفتار مبهم هست
تعریف نشده undefined : وظیفه برنامه نویس هست که از اینها پرهیز کنه اینها کاملا بی معنی و تعریف نشده اند و کامپایلر میتونه هر واکنشی نسبت به اینا نشون بده و حتی لازم نیست واکنشش ثابت باشه و میتونه یه بار runtime error بده یه بار نده مثلا گرفتن طول رشته ای که به هیچ جا اشاره نمیکنه
مشخص نشده unspecified : مثلا ترتیب ارزیابی آرگومانهای یه تابع مشخص نیست یا مثلا اگر دو تا شی global در دو تا فایل از برنامه داشته باشید ترتیب ساختش مشخص نیست و برنامه نویس نباید رو اینا حساب باز کنه
تعریف شده در پیاده سازی implementation defined : این یعنی در پیاده سازی (ترکیب ماشین و کامپایلر) تعریف میشه (پس مشخصه) و میتونه با کامپایلر و ماشین عوض بشه ولی با زمان ثابته مثلا باقیمانده تقسیم اعداد منفی این طور هست و ممکنه نتیجه اش مثبت یا منفی باشه
اما معمولا دلیل وجود این ابهامها اینه که رفعشون سخته یا انتخاب درستی وجود نداره یا برای حداکثر کردن سرعت برنامه هاست