what are #pragma?

seems stupid but…

I look around and oly found for c and c++

in unity, I see they in js
someone could explain me
#pragma strict
#pragma implicit
#pragma downcast

  1. what are?
  2. what they do?
  3. when do use?
  4. there is others pragma?

I found this in a sample project, are really needed?

#pragma strict
#pragma implicit
#pragma downcast

class FadeLight extends MonoBehaviour
{
 public var delay : float;
 public var fadeTime : float;
 
 private var fadeSpeed : float;
 private var intensity : float;
 private var color : Color;
 new pre
 function Start()new pre
 {
 if(light == null)
 {
 Destroy(this);
 return;
 }
 new pre
 intensity = light.intensity;
 
 
 fadeTime = Mathf.Abs(fadeTime);
 
 if(fadeTime > 0.0)
 {
 fadeSpeed = intensity / fadeTime;
 }
 else
 {
 fadeSpeed = intensity;
 }
 //alpha = 1.0;
 }
 
 function Update()
 {
 if(delay > 0.0)
 {
 delay -= Time.deltaTime;
 }
 else if(intensity > 0.0)
 {
 intensity -= fadeSpeed * Time.deltaTime;
 light.intensity = intensity;
 }
 }
}

1 - Those are pragma directives.

2 - They define directives for the compiler, basically they change the way your compiler treats your code.

pragma strict - disables dynamic tyipng

pragma implicit - let’s you declare types implicitly

pragma downcast - enables casting from supertypes to subtypes

3 - It’s just a matter of personal preference.

4 - There are no other builtin pragma directives.