PDA

View Full Version : سوال: کدی که خودش رو تغییر بده



me.enik
یک شنبه 28 اردیبهشت 1393, 16:30 عصر
سلام

میشه یک کدی نوشت که خودش، خودش رو تغییر بده؟ یعنی مثلا اگر فلان اتفاق افتاد، این بیاد و فلان خط‌های خودش رو پاک کنه و یک سری کد جدید جایگزین کنه؟

one hacker alone
یک شنبه 28 اردیبهشت 1393, 17:00 عصر
سلام
ببینید چیزی که شما میگید برخورد برنامه با رویداد های مختلف هست که باید برنامه نویسی بشه اما نه به اون شکلی که شما تو ذهنتون تصور کردید
برای روشن شدن موضوع میتونید به چیزی که فکر میکنید اشاره کنید یا مثالی رو بزنید تا با هم بررسی کنیم
من نشنیده میگم میشه چون تو برنامه نویسی هیچ چیز نا ممکن نیست

(while(c=1) printf(cpp=0
یک شنبه 28 اردیبهشت 1393, 17:10 عصر
سلام.
در برنامه نویسی، تا حد امکان باید رویدادها رو پیش بینی کنید: اگر آن شد، a بشود، اگر این شد، b بشود، اگر هرکدام از اینها نشد، c بشود.
زمانی که اندیشه بشر به آخر رسید، برنامه نویسی هم به آخر میرسه.

موفق باشید.

کامبیز اسدزاده
یک شنبه 28 اردیبهشت 1393, 20:39 عصر
سلام

میشه یک کدی نوشت که خودش، خودش رو تغییر بده؟ یعنی مثلا اگر فلان اتفاق افتاد، این بیاد و فلان خط‌های خودش رو پاک کنه و یک سری کد جدید جایگزین کنه؟

به موضوع جالبی اشاره کردین !
بحث هوش مصنوعی برای این سوال به نظرم مفید خواهد بود...
به عنوان مثال شما هسته هوشی رو باید برای خودتون پیاده سازی کنید که قابلیت تفکر و تغییر انواع حالت های پردازشی رو داشته باشه شدنی هست فقط باید بشینید یک الگوریتم درست حسابی و جامع برای هر یک از رخداد ها و شرایط تودرتو پیاده سازی و اجرا کنید.

me.enik
یک شنبه 28 اردیبهشت 1393, 21:14 عصر
دوستان ممنون.
دقیقا منظورم چیزی بود که why.darkness (http://barnamenevis.org/member.php?219337-why-darkness) اشاره کردند.
پس امکانش وجود داره. یعنی برنامه بنا به شرایط خود خودش رو تغییر بده و خودش رو کامپایل کنه. :)
نمونه کدی یا پروژه‌ای که اینکار روش پیاده شده باشه سراغ ندارین؟
ایده اصلیش رو از توی یه سریال به نام person of interest گرفتم.

بهروز عباسی
دوشنبه 29 اردیبهشت 1393, 17:10 عصر
اره میشه مثل ویروس های پلی مورفیک در این مورد تحقیق کن.

me.enik
دوشنبه 29 اردیبهشت 1393, 17:26 عصر
مرسی.
چیزای خوبی فهمیدم. مثل اینکه خیلی وقت هم هستش از این روش استفاده میشه.

الآن توی اینکار، یک برنامه جدید با یک کد جدید ساخته میشه و بعد جایگزین میشه یا اینکه همون برنامه، کد خودش رو تغییر میده؟

omid_kma
پنج شنبه 01 خرداد 1393, 18:44 عصر
به این شکلی که می گی با زبانی مثل ++C که قبل از اجرا کاملا کامپایل میشن شدنی نیست http://stackoverflow.com/questions/6399003/does-the-c-standard-allow-for-self-modifying-code
با ++C فقط میشه زمان کامپایل کد رو عوض کرد https://www.google.de/?gfe_rd=cr&ei=VPJ9U5vFH82a_wb56YG4CQ#q=template+metaprogrammi ng&spell=1
ولی با زبان های dynamic مثل php , lisp شدنیه
در ضمن این که کد خودش رو عوض کنه به همین راحتیا هم نیست فکر هم نمی کنم کاربرد زیادی داشته باشه تمام کار هایی که فکر می کنی با این روش انجام میشن با روش های بهتری قابل انجامن !

(while(c=1) printf(cpp=0
پنج شنبه 01 خرداد 1393, 21:23 عصر
دلیل گسترش این تاپیک رو نمی دونم، از اونجایی که جوابتون رو دادم!
یک بار گفتم که شما باید رویدادها رو پیش بینی کنید و هروقت که زمانش فرا رسید، دستوری یا دستوراتی که شما به اون زمان و مکان نسبت دادید، شروع به فعالیت می کنه یا می کنن.
چیز جادویی یا عجیب و غریبی وجود نداره، عزیز من. فیلم ها و سریال ها رو هم مُچاله کن و بندازشون دور. بعضی اوقات خودشون هم نمی دونن دارن چی میگن.
طبق معیارهای زمانی و مکانی خاص، شما دستوراتت رو تعریف می کنی. هوش مصنوعی به همین میگن.
در هوش مصنوعی، تمام رفتارها و کردارها از قبل پیش بینی شده و درواقع خلق شدن.
برای مثال: شما که یه عکس محرک با پسوند GIF می بینی، میگی که داره خودش تکون می خوره و چرا توقف نمی کنه؟

مثالی از واژه «خودکار» یا «Automatic» برات می زنم :
شما پنج تا نقطه می سازی. دو نقطه رو به عنوان مبدع و مقصد در نظر می گیری، و نقطه سوم رو بازیگر در نظر می گیری; بازیگری که قراره از مبدع (نقطه اول) به مقصد (نقطه دوم)، و بلعکس حرکت کنه.
به صورت ساده، شما اینطور برنامه ات رو تعریف می کنی که نقطه سوم (بازیگر) از نقطه اول (مبدع) سریعا یا بعد از چند ثانیه به طرف نقطه دوم (مقصد) حرکت کنه، و هروقت که بازیگر به نقطه دوم رسید، سریعا یا بعد از چند ثانیه فرستاده بشه به طرف نقطه اول، و همینطور فرآیند تکرار بشه. اما، قبلش تعریف می کنی که این فرآیند تا زمانی ادامه داشته باشد و تکرار شود که نقطه چهارم سبز رنگ باشد! در غیر این صورت، اگر قرمز بود، بازیگر متوقف شود!
حالا برات سواله که در چه زمانی و به چه دلیلی نقطه چهارم قرمز رنگ یا سبز رنگ میشه؟ به خودت میگی که احتمالا ربطی به نقطه پنجم داره. آره. دستور رو اینطور تعریف می کنی: در صورتی که مقدار عددی داخل نقطه پنجم 0 بود، نقطه چهارم قرمز شود و در نهایت باعث متوقف شدن نقطه سوم شود. اما، اگر مقدار عددی داخل نقطه پنجم بزرگ تر از صفر بود (یعنی 1 تا الی آخر)، در این صورت، نقطه چهارم سبز شود و نقطه سوم نیز حرکت کند.
دستوری دیگری می نویسی که اعداد رو کاربران داخل نقطه پنجم وارد می کنن.
دستور دیگری هم برای سرعت حرکت بازیگر از مبدع به مقصد می نویسی.

ببین، زمانی یک فرآیند رو «خودکار» صدا می زنن، که "کار" از قبل تعریف شده باشه.
حتی "شانس" هم کلمه ای نیست که اونطور فکرش رو می کنیم. درواقع رویدادهای دنیای واقعی ما، دست به دست هم میدن تا لحظه ها رو خلق کنن. خب، وقتی که ما به این رویدادها توجه نمی کنیم چون قدرتش رو نداریم، بنابارین از کلمه "شانس" استفاده می کنیم.
پس همه چیز طبق قانون هست -- تعریف شده هست. خالق تصیم گرفته که مخلوقش در چه شرایطی چگونه عمل کنه.
مغز ما همچنان همینطوره. با وجود گستردگی بسیار بالای مغز، مغز سعی می کنه که در قدم اول فرآیند رو دریافت کنه، و بعدش نتیجه ای از جمع و تفریق فرآینده ها به دهان، چشم، گوش، بینی و... ارسال کنه.

خب، ما با تعریف این دستورها، درواقع هوشی برای بازیگر (نقطه سوم) ساختیم. درواقع این هوش، مثل هوش ما نیست، چون گستردگیش و پیچیدگیش به اندازه مغز ما نیست.
مردم 'خیال' می کنن که درواقع اون بازیگره که داره فکر می کنه که اگر نقطه پنجم سبز بود، من باید حرکت کنم! و اگر قرمز بود، من باید وایسم!
در صورتی که خبری از الگوریتم (یا راه و روش کد نویسی کامپیوتر) ندارن. و خیال می کنن که اون بازیگره یه موجود زنده هستش!
ببین من نقطه مثال زدم، اما تو می تونی جای نقطه ها چیزهای باربط بگذاری. مثلا جای بازگره، که نقطه سوم هستش، بگذار پرنده! یا نقطه پنجم مثل چراغی باشه که یک صفحه کلید داره واسه وارد کردن اعداد توسط کاربر! تا به صورت یک بازی ساده دربیاد.
فرضا، اگر عددی که کاربر داخل نقطه پنجم وارد می کنه، 1 باشه، 1 ثانیه طول بکشه که بازیگر یا اون پرنده از مبدع به مقصد حرکت کنه. اگر 2 باشه، 2 ثانیه و...

اُمیدوارم که به جوابت رسیده باشی.
موفق باشی.

motherboard
پنج شنبه 01 خرداد 1393, 22:16 عصر
عجب نقطه نقطه بازی شد:لبخند:
قابلیت مغز انسان زمین تا اسمون با کامپیوتر فرق داره.اگه بخواهیم کامپیوتر یک کدی رو به کد دیگه تغییر بده این جوری نیست که کد اول پاک بشه و یک کد جدید توسط یک سری فرایند جایگزین بشه.بلکه برای جاگزینی کد دوم به کد اول شرط لازمه و کد اول فقط کنار میره و کد دوم اجرا میشه.هزاران هوش مصنوعی تا حالا ساخته شده.اما این هوش مصنوعی ها رتبه بندی داره.از بازی های اتاری گرفته تا اغاز ورژن های بازی فیفا اما با این حال هوش مصنوعی بازیکنان در بازی فیفا زمین تا اسمون با عملکرد بازیکن واقعی فرق می کنه.مثلا تو بازی فوتبال pes بازیکن خطا می کنه و داور دستور به ادامه ی بازی میده و بعد از اینکه جریان بازی در اثر رفتن توپ به بیرون متوقف شد تازه داور میاد کارت زرد هم بابت خطا میده!!!!!!!!!!:لبخند:
حتی همین برنامه های ساده شرطی که به زبان c نوشته میشه خودش یک جور هوش مصنوعی هست.اما باور عامه از هوش مصنوعی چیزی در حد فیلم ترمیناتور هست.مثلا یک رباتی ساخته شده که اگه به خط سیاه نزدیک شد بایستد خب برای اینکه این که ربات موفق عمل کنه باید براش کلی اما و اگر تعریف کرد.