زبان برنامه‌نویسی پویا

زبان‌های برنامه‌نویسی پویا (Dynamic Programming Languages)در علوم کامپیوتر، زبان‌های برنامه‌نویسی پویا به زبان‌هایی گفته می‌شود که بسیاری از رفتارهای معمول در فرایند برنامه‌نویسی، که در زبان‌های استاتیک در زمان کامپایل انجام می‌شود، در زمان اجرای برنامه انجام می‌دهند. این زبان‌ها انعطاف‌پذیری بیشتری به توسعه‌دهندگان می‌دهند و ابزارهایی برای تغییر ساختار برنامه در حین اجرا فراهم می‌کنند.
----ویژگی‌های زبان‌های پویا

**۱.تایپ دینامیک (Dynamic Typing):** در زبان‌های پویا، نوع متغیرها در زمان اجرا تعیین می‌شود و نیازی به تعریف نوع متغیرها در زمان کدنویسی وجود ندارد. به عنوان مثال:
```javascript
x = 10   # x به صورت خودکار عددی در نظر گرفته می‌شود.
x = "Hello"  # حالا x به یک رشته تغییر نوع می‌دهد.
```
2.**بازتاب (Reflection):** زبان‌های پویا به برنامه این امکان را می‌دهند که ساختارهای داخلی خود را در زمان اجرا تحلیل کرده و حتی تغییر دهند. به عنوان مثال، می‌توان نام‌گذاری یا خواص کلاس‌ها را در زمان اجرا بررسی کرد.

3.**توسعه و گسترش در زمان اجرا:** این زبان‌ها به توسعه‌دهندگان اجازه می‌دهند تا در زمان اجرا اشیاء، متدها و کلاس‌ها را تغییر داده یا گسترش دهند. به عنوان نمونه در زبان Ruby:
```ruby
class MyClass
  def greet
    "Hello!"
  end
end

obj = MyClass.new
puts obj.greet  # خروجی: Hello!

# افزودن یک متد جدید در زمان اجرا
class MyClass
  def farewell
    "Goodbye!"
  end
end

puts obj.farewell  # خروجی: Goodbye!
```
4.**مدیریت حافظه خودکار:** زبان‌های پویا اغلب مدیریت حافظه را به صورت خودکار انجام می‌دهند (مثلاً از طریق garbage collection).
----

#### تفاوت زبان‌های پویا با زبان‌های استاتیک

* **زبان‌های استاتیک:** در زبان‌هایی مانند C++ و Java، نوع داده‌ها باید در زمان کامپایل مشخص باشد و اغلب تغییر آن‌ها در زمان اجرا امکان‌پذیر نیست.
```python
int x = 10;  // نوع x باید عدد صحیح باشد و نمی‌توان آن را به رشته تغییر داد.
```


* **زبان‌های پویا:** در زبان‌هایی مانند Python یا JavaScript، نوع داده‌ها می‌تواند در زمان اجرا تغییر کند و برنامه از این تغییرات پشتیبانی می‌کند.

----مثال‌هایی از زبان‌های پویا و غیرپویا

**زبان‌های پویا:**

* **Python**
* **Ruby**
* **JavaScript**
* **PHP**
* **Perl**

**زبان‌های غیرپویا (استاتیک):**

* **C**
* **C++**
* **Java**
* **Go**

----

#### تاریخچه زبان‌های برنامه‌نویسی پویا

# **لیسپ (Lisp):** اولین زبان برنامه‌نویسی پویا که در دهه 1950 توسط جان مک‌کارتی توسعه داده شد. لیسپ بسیاری از مفاهیمی مانند مدیریت حافظه خودکار و بازتاب را معرفی کرد که پایه‌گذار زبان‌های پویا بودند.
# **پرل (Perl):** در سال 1987 توسط لری وال ایجاد شد. پرل به دلیل انعطاف‌پذیری و قابلیت‌های اسکریپت‌نویسی خود، در بسیاری از زمینه‌ها از جمله مدیریت سیستم و توسعه وب محبوب شد.
# **پایتون (Python):** در سال 1991 توسط گیدو فان روسوم توسعه داده شد. پایتون به دلیل سادگی و خوانایی بالا به سرعت به یکی از محبوب‌ترین زبان‌های پویا تبدیل شد.
# **جاوااسکریپت (JavaScript):** در سال 1995 توسط برندان آیک معرفی شد و به عنوان زبان اسکریپت‌نویسی مرورگرها شناخته شد. جاوااسکریپت با قابلیت‌های پویا و گسترش‌پذیری بالا، به یکی از پایه‌های اصلی توسعه وب تبدیل شد.
# **روبی (Ruby):** در سال 1995 توسط یوکیهیرو ماتسوموتو توسعه داده شد. روبی با ترکیب ویژگی‌های زبان‌های مختلف، به یک زبان پویا و شیءگرا تبدیل شد که برای توسعه سریع و ساده کاربرد دارد.

----

#### کاربرد زبان‌های پویا

# **توسعه سریع برنامه‌ها:** زبان‌های پویا به دلیل نیاز کمتر به تعریف‌های اولیه و انعطاف‌پذیری بالا، برای پروژه‌های کوچک و متوسط که نیاز به تغییرات سریع دارند، ایده‌آل هستند.
# **اسکریپت‌نویسی و ابزارهای اتوماسیون:** بسیاری از زبان‌های پویا مانند Python و JavaScript به عنوان زبان‌های اسکریپت‌نویسی برای اتوماسیون وظایف یا توسعه وب استفاده می‌شوند.
# **پروتوتایپینگ:** به دلیل سهولت در کدنویسی و تغییرات سریع، زبان‌های پویا برای ساخت نمونه‌های اولیه نرم‌افزارها مناسب هستند.

----

#### نقاط قوت و ضعف زبان‌های پویا
**نقاط قوت:**

* سهولت یادگیری و استفاده.
* انعطاف‌پذیری بالا.
* مناسب برای پروژه‌های کوچک و متوسط.
* کاهش کدنویسی اضافی.

**نقاط ضعف:**

* خطاهای مرتبط با نوع داده‌ها ممکن است تا زمان اجرا مشخص نشوند.
* عملکرد ممکن است به اندازه زبان‌های استاتیک بهینه نباشد.
* اشکال‌زدایی ممکن است پیچیده‌تر باشد.

## منابع
Wikipedia contributors, "Dynamic programming language," *Wikipedia, The Free Encyclopedia,* https://en.wikipedia.org/w/index.php?title=Dynamic_programming_language&oldid=854317365 (accessed September 17, 2018).

رده:زبان‌های برنامه‌نویسی پویا