ಎಕ್ಸೆಪ್ಶನ್_ಹ್ಯಾಂಡ್ಲಿಂಗ್‌_(ವಿನಾಯಿತಿ_ನಿರ್ವಹಣೆ)
ಕರಾರಿನ ಮೂಲಕ ವಿನ್ಯಾಸಗೊಂಡ ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆ
ಹಲವಾರು ವಿಭಿನ್ನ ವಿನಾಯಿತಿಗಳ ಅವಲೋಕನಗಳು ಕರಾರಿನ ಮೂಲಕ ವಿನ್ಯಾಸಗೊಂಡ ಮೂಲತತ್ವಗಳ ಮೇಲೆ ಆಧಾರಿತವಾಗಿವೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟವಾಗಿ ಐಫೆಲ್ ಲಾಂಗ್ವೇಜ್‌‌ನಿಂದ ಬೆಂಬಲಿಸಲ್ಪಡುತ್ತವೆ. ಇದರ ಯೋಜನೆಯೇನೆಂದರೆ, ಯಾವುದು "ಸಹಜ" ನಡುವಳಿಕೆ ಮತ್ತು "ಅಸಹಜ" ನಡುವಳಿಕೆ ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟವಾಗಿ ಉಲ್ಲೇಖಿಸುವುದರ ಮೂಲಕ ಎಕ್ಸೆಪ್ಶನ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್‌‌ನ ಒಂದು ಹೆಚ್ಚಿನ ಕಠೋರ ಮೂಲಗಳನ್ನು ದೊರಕಿಸುವುದು. ನಿರ್ದಿಷ್ಟವಾಗಿ, ಈ ವಿಧಾನವು ಎರಡು ವಿಷಯಗಳ ಮೇಲೆ ಆಧಾರಿತವಾಗಿದೆ: ಬೆರ್ಟ್ರಾಂಡ್ ಮೇಯರ್‌ನಿಂದ ವಸ್ತು ನಿರ್ಣಯಿತ ತಂತ್ರಾಂಶ ನಿರ್ಮಾಣದಲ್ಲಿ ಪರಿಚಯಿಸಲ್ಪಟ್ಟ "ಸುರಕ್ಷತೆ ಎಕ್ಸೆಪ್ಶನ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್‌ ಮೂಲತತ್ವ"ವು ನಂತರ ಹೇಳುವುದೇನೆಂದರೆ, ಅಲ್ಲಿ ವಿನಾಯಿತಿಯು ಸಂಭವಿಸಿದಾಗ ಒಂದು ದಿನಚರಿಯು ಪ್ರತಿಕ್ರಿಯಿಸಲು ಕೇವಲ ಎರಡು ಅರ್ಥಗರ್ಭಿತ ಮಾರ್ಗಗಳಿವೆ ಎಂದು ಹೇಳಿತು: !), ನಂತರ ಅಸ್ಥಿರವನ್ನು ಪುನರ್‌ಸ್ಥಾಪನೆಗೊಳಿಸುವುದರ ಮೂಲಕ ಒಂದು ವಸ್ತುವಿನ ಸ್ಥಿತಿಯನ್ನು ನಿಗದಿಪಡಿಸುವುದು ("ಸಂಯೋಜಿತ" ಭಾಗ). ಇಲ್ಲಿ ಐಫೆಲ್ ಜೋಡಣೆಯ ಒಂದು ಉದಾಹರಣೆಯನ್ನು ಇಲ್ಲಿ ನಿರೂಪಿಸಲಾಗಿದೆ. ಒಂದು ದಿನಚರಿ send_fast ಸಾಮಾನ್ಯವಾಗಿ ಒಂದು ಸಂದೇಶವನ್ನು ಕಳಿಸಲು ಒಂದು ಉತ್ತಮವಾದ ಮಾರ್ಗವಾಗಿರುತ್ತದೆ ಎಂದು ಇದು ಊಹಿಸುತ್ತದೆ, ಆದರೆ ಇದು ಒಂದು ವಿನಾಯಿತಿಯನ್ನು ಪ್ರಚೋದಿಸುತ್ತ ವಿಫಲವಾಗಬಹುದು; ಹಾಗಾದರೆ, ಜೋಡಣೆ ನೆಕ್ಸ್ಟ್ send_slow  ಅನ್ನು ಬಳಸುತ್ತದೆ, ಅದು ಕಡಿಮೆ ಪುನರಾವರ್ತಿತವಾಗಿ ವಿಫಲವಾಗುತ್ತದೆ.  send_slow  ವಿಫಲವಾದರೆ, ದಿನಚರಿ send ಪೂರ್ತಿಯಾಗಿ ವಿಫಲವಾಗಲ್ಪಡುತ್ತದೆ, ಆಹ್ವಾನಿತನಿಗೆ ಒಂದು ವಿನಾಯಿತಿಯನ್ನು ಪಡೆಯುವಂತೆ ಮಾಡುತ್ತದೆ.  ಅನ್ನು ಬಳಸಿದರೆ, ಇದು ತನ್ನ ವಿಧಾನದ ಚಿಹ್ನೆಯಲ್ಲಿ ಇದನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಪ್ರಕಟಿಸಬೇಕು. ಇದನ್ನು ಮಾಡಲು ವಿಫಲವಾದಲ್ಲಿ ಇದು ಕಂಪೈಲ್-ಟೈಮ್ ದೋಷವನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. ಇದು ಕನಿಷ್ಠ ಪಕ್ಷ OCaml ಗೆ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ವಿನಾಯಿತಿ ಪರಿಶೀಲಕರಿಗೆ ಸಂಬಂಧಿತವಾಗಿದೆ. OCaml ಗೆ ಬಾಹಿಕ ಸಾಧನವು ಪಾರದರ್ಷಕ (ಅಂದರೆ ಇದು ಯಾವುದೇ ಸಂಕೇತದ ಟಿಪ್ಪಣಿಗಳನ್ನು ಬಳಸುವುದಿಲ್ಲ) ಮತ್ತು ಅನುಜ್ಞಾತ್ಮಕ (ಅಂದರೆ ಇದು ಉತ್ಪಾದನಾ ಸಂಕೇತದಲ್ಲಿ ಸೂಚಿಸಲ್ಪಟ್ಟಿರದಿದ್ದರೂ ಕೂಡ ಪರಿಶೀಲಿಸಿದ ವಿನಾಯಿತಿಗಳನ್ನು ಹೊಂದಿಲ್ಲದೇ ಒಂದು ಪ್ರೋಗ್ರಾಮನ್ನು ಸಂಕಲಿಸಲು ಮತ್ತು ನಡೆಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ) ಎರಡೂ ಸಾಧನಗಳನ್ನು ಬಳಸಲ್ಪಡುತ್ತದೆ. CLU ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ ಲಾಂಗ್ವೇಜ್‌ ಇದು ಜಾವಾ ಲಾಂಗ್ವೇಜ್‌ ನಂತರದಲ್ಲಿ ಪರಿಚಯಿಸಿದಂತಹ ಇಂಟರ್‌ಫೇಸ್‌ಗೆ ಹತ್ತಿರವಾದ ಲಕ್ಷಣವನ್ನು ಹೊಂದಿದೆ. ಒಂದು ಫಂಕ್ಷನ್‌ ತನ್ನ ವಿಧಗಳಲ್ಲಿ ನಮೂದಿಸಲ್ಪಟ ವಿನಾಯಿತಿಗಳನ್ನು ಮಾತ್ರ ಬೆಳೆಸಬಹುದು, ಆದರೆ ಕರೆಯಲ್ಪಟ್ಟ ಫಂಕ್ಷನ್‌ಗಳ ಯಾವುದೇ ಸೋರಲ್ಪಡುವ ವಿನಾಯಿತಿಗಳು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಏಕೈಕ ರನ್-ಟೈಮ್ ವಿನಯಿತಿಯಾಗಿ ಬದಲಾಗಲ್ಪಡುತ್ತದೆ,, ಬದಲಾಗಿ ಕಂಪೈಲ್-ಟೈಮ್ ದೋಷವಾಗಿ ಬದಲಾಗಲ್ಪಡುತ್ತದೆ. ನಂತರದಲ್ಲಿ, Modula-3 ಸದೃಶವಾದ ಲಕ್ಷಣವನ್ನು ಹೊಂದಿದೆ. ಈ ಲಕ್ಷಣಗಳು ಕಂಪೈಲ್ ಟೈಮ್ ಪರಿಶೀಲನೆಯನ್ನು ಒಳಗೊಳ್ಳುತ್ತವೆ, ಅದು ಪರಿಶೀಲಿಸಲ್ಪಟ್ಟ ವಿನಾಯಿತಿಗಳ ವಿಷಯದಲ್ಲಿ ಕೇಂದ್ರವಾಗಿರುತ್ತದೆ, ಮತ್ತು (2006 ರ ವರೆಗೆ) ಜಾವಾ ಲಾಂಗ್ವೇಜ್‌ ಅನ್ನು ಹೊರತುಪಡಿಸಿ ಇತರ ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ ಲಾಂಗ್ವೇಜ್‌‌ಗಳಲ್ಲಿ ಸೇರಿಸಿಕೊಳ್ಳಲ್ಪಟ್ಟಿಲ್ಲ. C++ ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ ಲಾಂಗ್ವೇಜ್‌ ಪರಿಶಿಲಿಸಲ್ಪಟ್ಟ ವಿನಾಯಿತಿಗಳಿಗೆ ಒಂದು ಐಚ್ಛಿಕ ಯಾಂತ್ರಿಕ ರಚನೆಯನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ, ಅದನ್ನು ವಿನಾಯಿತಿ ನಿರ್ದಿಷ್ಟತೆ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ, ಯಾವುದೇ ಫಂಕ್ಷನ್‌ ಯಾವುದೇ ವಿನಾಯಿತಿಯನ್ನು ಬಳಸಬಹುದು, ಆದರೆ ಇದು ಫಂಕ್ಷನ್‌ ಚಿಹ್ನೆಗೆ ಸೇರಿಸಲ್ಪಟ್ಟ ಒಂದು  ಷರತ್ತಿನಿಂದ ನಿರ್ಬಂಧಿಸಲ್ಪಡಬಹುದು, ಅದು ಯಾವ ವಿನಾಯಿತಿಗಳನ್ನು ಫಂಕ್ಷನ್‌ ಬಳಸಬಹುದು ಎಂಬುದನ್ನು ನಿರ್ದೇಶಿಸುತ್ತದೆ. ಎಕ್ಸೆಪ್ಶನ್‌ ನಿಗದಿಪಡಿಸುವಿಕೆಗಳು ಕಂಪೈಲ್-ಟೈಮ್‌ನಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಲ್ಪಡುವುದಿಲ್ಲ. ಮುರಿಯುವಿಕೆಯು  ಕರೆಯಲ್ಪಡುವ ಜಾಗತಿಕ ಫಂಕ್ಷನ್‌‌ನಲ್ಲಿ ನಿರ್ವಹಿಸಲ್ಪಡುತ್ತದೆ. ಒಂದು ಖಾಲಿಯಾದ ವಿನಾಯಿತಿ ನಿಗದಿಪಡಿಸುವಿಕೆಯು ನೀಡಲ್ಪಡಬಹುದು, ಅದು ಒಂದು ಫಂಕ್ಷನ್‌ ಯಾವುದೇ ವಿನಾಯಿತಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ತಿಳಿಸುತ್ತದೆ. ಯಾವಾಗ ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆಯು ಲಾಂಗ್ವೇಜ್‌‌ಗೆ ಸೇರಿಸಲ್ಪಟ್ಟಿರುತ್ತದೆಯೋ ಆಗ ಇದು ಡಿಫಾಲ್ಟ್ ಆಗಿರಲ್ಪಡುವುದಿಲ್ಲ ಏಕೆಂದರೆ ಇದು ತುಂಬಾ ಹೆಚ್ಚಿನದಾದ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸಂಕೇತದ ಬದಲಾವಣೆಯನ್ನು ಬಯಸುತ್ತದೆ, ಇತರ ಲಾಂಗ್ವೇಜ್‌‌ಗಳಲ್ಲಿ ಬರೆಯಲ್ಪಟ್ಟ ಸಂಕೇತದ ಜೊತೆ ಹೊಂದಾಣಿಕೆಯನ್ನು ಅಡ್ಡಿಮಾಡುತ್ತದೆ, ಮತ್ತು ಸ್ಥಳೀಯ ಹಂತದಲ್ಲಿ ತುಂಬಾ ಹೆಚ್ಚು ನಿರ್ವಾಹಕರನ್ನು ಬರೆಯಲು ಪ್ರೋಗ್ರಾಮರ್‌ಗಳನ್ನು ಪ್ರಚೋದಿಸುತ್ತದೆ. ಖಾಲಿಯಾದ ವಿನಾಯಿತಿಯ ಬಹಿರಂಗ ನಿಗದಿಪಡಿಸುವಿಕೆಗಳ ಬಳಕೆಗಳು, ಅದಾಗ್ಯೂ, ಕಂಪೈಲರ್‌ಗಳನ್ನು ವಿಶಿಷ್ಟವಾದ ಸಂಕೇತಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಯಾವಾಗ ಒಂದು ಫಂಕ್ಷನ್‌‌ನಲ್ಲಿ ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆಯು ಸಾಮಾನ್ಯವಾಗಿ ನಿರ್ಬಂಧಿಸಲ್ಪಡುತ್ತದೆಯೋ ಅದು ಲೇಔಟ್ ಗರಿಷ್ಠಗೊಳಿಸುವಿಕೆಯನ್ನು ಸುವ್ಯವಸ್ಥಿತವಾಗಿಸಲು ನಡೆಸಲ್ಪಡುತ್ತದೆ. ಕೆಲವು ವಿಶ್ಲೇಷಕರು C++ ನಲ್ಲಿ ವಿನಾಯಿತಿ ನಿಗದಿಪಡಿಸುವಿಕೆಯ ಸರಿಯಾದ ಬಳಕೆಯನ್ನು ಸಾಧಿಸಲು ಕಷ್ಟಕರವಾದುದು ಎಂಬಂತೆ ನೋಡುತ್ತಾರೆ. ಮುಂದೆ ಬರಬಹುದಾದ C++ ಲಾಂಗ್ವೇಜ್‌ ಮಾನದಂಡಗಳಲ್ಲಿ (C++0x), ವಿನಾಯಿತಿ ನಿಗದಿಪಡಿಸುವಿಕೆಯ ಬಳಕೆಯು ಮಾನದಂಡ (C++03) ನ ಪ್ರಸ್ತುತ ಆವೃತ್ತಿಯಲ್ಲಿ ನಿರ್ದೇಶಿಸಲ್ಪಟ್ಟಂತೆ ಅಸಮ್ಮತಿ ತೋರಲ್ಪಡುತ್ತದೆ.