Tracing just-in-time compilation
ಜಸ್ಟ್-ಇನ್-ಟೈಮ್ ಸಂಕಲನವನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು ರನ್ಟೈಮ್ನಲ್ಲಿ ಪ್ರೋಗ್ರಾಂನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿಸಲು ವರ್ಚುವಲ್ ಯಂತ್ರಗಳು ಬಳಸುವ ತಂತ್ರವಾಗಿದೆ. ಆಗಾಗ್ಗೆ ಕಾರ್ಯಗತಗೊಳ್ಳುವ ಕಾರ್ಯಾಚರಣೆಗಳ ರೇಖೀಯ ಅನುಕ್ರಮವನ್ನು ದಾಖಲಿಸುವ ಮೂಲಕ, ಅವುಗಳನ್ನು ಸ್ಥಳೀಯ ಯಂತ್ರ ಸಂಕೇತಕ್ಕೆ ಸಂಕಲಿಸುವ ಮೂಲಕ ಮತ್ತು ಅವುಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೂಲಕ ಇದನ್ನು ಮಾಡಲಾಗುತ್ತದೆ. ಇದು ಪ್ರತಿ ವಿಧಾನದ ಆಧಾರದ ಮೇಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಸಾಂಪ್ರದಾಯಿಕ ಜಸ್ಟ್-ಇನ್-ಟೈಮ್ (ಜೆಐಟಿ) ಕಂಪೈಲರ್ಗಳಿಗೆ ವಿರುದ್ಧವಾಗಿದೆ. ಜಸ್ಟ್-ಇನ್-ಟೈಮ್ ಸಂಕಲನವು ರನ್ಟೈಮ್ನಲ್ಲಿ ಯಂತ್ರ ಕೋಡ್ಗೆ ಪ್ರೋಗ್ರಾಂನ ಭಾಗಗಳನ್ನು ಕಂಪೈಲ್ ಮಾಡುವ ಮೂಲಕ ಪ್ರೋಗ್ರಾಂಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವ ವೇಗವನ್ನು ಹೆಚ್ಚಿಸುವ ತಂತ್ರವಾಗಿದೆ. ವಿವಿಧ ಜೆಐಟಿ ಕಂಪೈಲರ್ಗಳನ್ನು ವರ್ಗೀಕರಿಸುವ ಒಂದು ಮಾರ್ಗವೆಂದರೆ ಅವುಗಳ ಸಂಕಲನ ವ್ಯಾಪ್ತಿ. ವಿಧಾನ-ಆಧಾರಿತ ಜೆಐಟಿ ಕಂಪೈಲರ್ಗಳು ಒಂದು ಸಮಯದಲ್ಲಿ ಒಂದು ವಿಧಾನವನ್ನು ಯಂತ್ರ ಸಂಕೇತಕ್ಕೆ ಭಾಷಾಂತರಿಸಿದರೆ, ಜೆಐಟಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವಿಕೆಯು ಆಗಾಗ್ಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಲಾದ ಲೂಪ್ಗಳನ್ನು ತಮ್ಮ ಸಂಕಲನದ ಘಟಕವಾಗಿ ಬಳಸುತ್ತದೆ. ಜೆಐಟಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು ಪ್ರೋಗ್ರಾಂಗಳು ತಮ್ಮ ಹೆಚ್ಚಿನ ಸಮಯವನ್ನು ಪ್ರೋಗ್ರಾಂನ ಕೆಲವು ಲೂಪ್ಗಳಲ್ಲಿ ("ಹಾಟ್ ಲೂಪ್ಗಳು") ಕಳೆಯುತ್ತವೆ ಮತ್ತು ನಂತರದ ಲೂಪ್ ಪುನರಾವರ್ತನೆಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಇದೇ ರೀತಿಯ ಮಾರ್ಗಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತವೆ ಎಂಬ ಊಹೆಗಳನ್ನು ಆಧರಿಸಿವೆ. ಟ್ರೇಸಿಂಗ್ ಜೆಐಟಿಯನ್ನು ಹೊಂದಿರುವ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಮಿಶ್ರ-ವಿಧಾನದ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಪರಿಸರಗಳಾಗಿವೆ, ಅಂದರೆ ಅವು ಟ್ರೇಸಿಂಗ್ ಜೆಐಟಿಯ ಜೊತೆಗೆ ಇಂಟರ್ಪ್ರಿಟರ್ ಅಥವಾ ವಿಧಾನ ಕಂಪೈಲರ್ ಅನ್ನು ಹೊಂದಿವೆ. ತಾಂತ್ರಿಕ ವಿವರಗಳು ಎ ಟ್ರೇಸಿಂಗ್ ಜೆಐಟಿ ಕಂಪೈಲರ್ ರನ್ಟೈಮ್ನಲ್ಲಿ ವಿವಿಧ ಹಂತಗಳ ಮೂಲಕ ಹೋಗುತ್ತದೆ. ಮೊದಲಿಗೆ, ಲೂಪ್ಗಳ ಪ್ರೊಫೈಲಿಂಗ್ ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಹಾಟ್ ಲೂಪನ್ನು ಗುರುತಿಸಿದ ನಂತರ, ವಿಶೇಷ ಜಾಡು ಹಿಡಿಯುವ ಹಂತವನ್ನು ನಮೂದಿಸಲಾಗುತ್ತದೆ, ಇದು ಆ ಲೂಪ್ನ ಎಲ್ಲಾ ಕಾರ್ಯಗತಗೊಂಡ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ದಾಖಲಿಸುತ್ತದೆ. ಕಾರ್ಯಾಚರಣೆಗಳ ಈ ಅನುಕ್ರಮವನ್ನು ಟ್ರೇಸ್ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಟ್ರೇಸ್ ಅನ್ನು ನಂತರ ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಮೆಷಿನ್ ಕೋಡ್ (ಟ್ರೇಸ್) ಗೆ ಕಂಪೈಲ್ ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಲೂಪ್ ಅನ್ನು ಮತ್ತೆ ಕಾರ್ಯಗತಗೊಳಿಸಿದಾಗ, ಕಂಪೈಲ್ಡ್ ಟ್ರೇಸ್ ಅನ್ನು ಪ್ರೋಗ್ರಾಂ ಪ್ರತಿರೂಪದ ಬದಲಿಗೆ ಕರೆಯಲಾಗುತ್ತದೆ. ಈ ಹಂತಗಳನ್ನು ಈ ಕೆಳಗಿನವುಗಳಲ್ಲಿ ವಿವರವಾಗಿ ವಿವರಿಸಲಾಗಿದೆಃ ಪ್ರೊಫೈಲಿಂಗ್ ಹಂತ ಬಿಸಿ ಲೂಪ್ಗಳನ್ನು ಗುರುತಿಸುವುದು ಪ್ರೊಫೈಲಿಂಗ್ನ ಗುರಿಯಾಗಿದೆ. ಪ್ರತಿ ಲೂಪ್ಗೆ ಪುನರಾವರ್ತನೆಗಳ ಸಂಖ್ಯೆಯನ್ನು ಎಣಿಸುವ ಮೂಲಕ ಇದನ್ನು ಹೆಚ್ಚಾಗಿ ಮಾಡಲಾಗುತ್ತದೆ. ಲೂಪ್ ಎಣಿಕೆ ಒಂದು ನಿರ್ದಿಷ್ಟ ಮಿತಿಯನ್ನು ಮೀರಿದ ನಂತರ, ಲೂಪ್ ಅನ್ನು ಬಿಸಿ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಟ್ರೇಸಿಂಗ್ ಹಂತವನ್ನು ನಮೂದಿಸಲಾಗುತ್ತದೆ. ಜಾಡು ಹಿಡಿಯುವ ಹಂತದಲ್ಲಿ ಲೂಪ್ನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯು ಸಾಮಾನ್ಯವಾಗಿ ಮುಂದುವರಿಯುತ್ತದೆ, ಆದರೆ ಹೆಚ್ಚುವರಿಯಾಗಿ ಪ್ರತಿ ಕಾರ್ಯಗತಗೊಂಡ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಜಾಡುಗಳಲ್ಲಿ ದಾಖಲಿಸಲಾಗುತ್ತದೆ. ದಾಖಲಿಸಲಾದ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಜಾಡಿನ ಮರದಲ್ಲಿ, ಸಾಮಾನ್ಯವಾಗಿ ಮಧ್ಯಂತರ ಪ್ರಾತಿನಿಧ್ಯದಲ್ಲಿ (ಐಆರ್) ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಟ್ರೇಸಿಂಗ್ ಫಂಕ್ಷನ್ ಕರೆಗಳನ್ನು ಅನುಸರಿಸುತ್ತದೆ, ಇದು ಅವುಗಳನ್ನು ಟ್ರೇಸ್ನಲ್ಲಿ ಇನ್ಲೈನ್ ಮಾಡಲು ಕಾರಣವಾಗುತ್ತದೆ. ಲೂಪ್ ತನ್ನ ಅಂತ್ಯವನ್ನು ತಲುಪುವವರೆಗೆ ಮತ್ತು ಆರಂಭಕ್ಕೆ ಹಿಂತಿರುಗುವವರೆಗೆ ಜಾಡು ಹಿಡಿಯುವುದು ಮುಂದುವರಿಯುತ್ತದೆ. ಲೂಪ್ನ ಒಂದು ಕಾಂಕ್ರೀಟ್ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮಾರ್ಗವನ್ನು ಅನುಸರಿಸುವ ಮೂಲಕ ಜಾಡಿನ ದಾಖಲೆಯನ್ನು ಮಾಡಲಾಗುತ್ತದೆಯಾದ್ದರಿಂದ, ಆ ಜಾಡಿನ ನಂತರದ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯು ಆ ಮಾರ್ಗದಿಂದ ಬೇರೆಯಾಗಬಹುದು. ಅದು ಸಂಭವಿಸಬಹುದಾದ ಸ್ಥಳಗಳನ್ನು ಗುರುತಿಸಲು, ವಿಶೇಷ ಕಾವಲು ಸೂಚನೆಗಳನ್ನು ಜಾಡಿನೊಳಗೆ ಸೇರಿಸಲಾಗುತ್ತದೆ. ಅಂತಹ ಸ್ಥಳಕ್ಕೆ ಒಂದು ಉದಾಹರಣೆಯೆಂದರೆ ಇಫ್ ಹೇಳಿಕೆಗಳು. ಮೂಲ ಸ್ಥಿತಿಯು ಇನ್ನೂ ನಿಜವಾಗಿದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸಲು ಗಾರ್ಡ್ ತ್ವರಿತ ತಪಾಸಣೆಯಾಗಿದೆ. ಕಾವಲುಗಾರ ವಿಫಲವಾದರೆ, ಜಾಡಿನ ಮರಣದಂಡನೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಮರಣದಂಡನೆಯ ಸಮಯದಲ್ಲಿ ಜಾಡು ಹಿಡಿಯುವಿಕೆಯನ್ನು ಮಾಡಲಾಗುತ್ತದೆಯಾದ್ದರಿಂದ, ಜಾಡು ಹಿಡಿಯುವ ಸಮಯದ ಮಾಹಿತಿಯನ್ನು ಹೊಂದುವಂತೆ ಮಾಡಬಹುದು (ಉದಾಹರಣೆಗೆ. ಮಾಹಿತಿಯ ಪ್ರಕಾರ). ಈ ಮಾಹಿತಿಯನ್ನು ನಂತರ ಕೋಡ್ ದಕ್ಷತೆಯನ್ನು ಹೆಚ್ಚಿಸಲು ಆಪ್ಟಿಮೈಸೇಶನ್ ಹಂತದಲ್ಲಿ ಬಳಸಬಹುದು. ಆಪ್ಟಿಮೈಸೇಶನ್ ಮತ್ತು ಕೋಡ್-ಜನರೇಷನ್ ಹಂತದ ಜಾಡುಗಳನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿಸುವುದು ಸುಲಭ, ಏಕೆಂದರೆ ಅವು ಕೇವಲ ಒಂದು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮಾರ್ಗವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ, ಅಂದರೆ ಯಾವುದೇ ನಿಯಂತ್ರಣ ಹರಿವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ ಮತ್ತು ಯಾವುದೇ ನಿರ್ವಹಣೆಯ ಅಗತ್ಯವಿಲ್ಲ. ಸಾಮಾನ್ಯ ಆಪ್ಟಿಮೈಸೇಶನ್ಗಳಲ್ಲಿ ಕಾನ್ಸ್ಟಂಟ್-ಸಬ್ಎಕ್ಸ್ಪ್ರೆಷನ್ ಎಲಿಮಿನೇಷನ್, ಡೆಡ್ ಕೋಡ್ ಎಲಿಮಿನೇಷನ್, ರಿಜಿಸ್ಟರ್ ಅಲೋಕೇಷನ್, ಇನ್ವೇರಿಯಂಟ್-ಕೋಡ್ ಮೋಷನ್, ಕಾನ್ಸ್ಟಂಟ್ ಫೋಲ್ಡಿಂಗ್ ಮತ್ತು ಎಸ್ಕೇಪ್ ಅನಾಲಿಸಿಸ್ ಸೇರಿವೆ. ಆಪ್ಟಿಮೈಸೇಶನ್ ಮಾಡಿದ ನಂತರ, ಜಾಡಿನ ಸಂಕೇತವನ್ನು ಯಂತ್ರ ಸಂಕೇತವಾಗಿ ಪರಿವರ್ತಿಸಲಾಗುತ್ತದೆ. ಅದೇ ರೀತಿ ಆಪ್ಟಿಮೈಸೇಶನ್ಗೆ, ಕುರುಹುಗಳ ರೇಖೀಯ ಸ್ವರೂಪದಿಂದಾಗಿ ಇದು ಸುಲಭವಾಗಿದೆ. ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆ ಜಾಡಿನ ಸಂಕೇತವನ್ನು ಯಂತ್ರ ಸಂಕೇತಕ್ಕೆ ಸಂಕಲಿಸಿದ ನಂತರ, ಅದನ್ನು ಲೂಪ್ನ ನಂತರದ ಪುನರಾವರ್ತನೆಗಳಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು. ಕಾವಲುಗಾರ ವಿಫಲವಾಗುವವರೆಗೆ ಜಾಡು ಮರಣದಂಡನೆ ಮುಂದುವರಿಯುತ್ತದೆ. ಜೆಐಟಿಗಳ ಕಲ್ಪನೆಯು 1960 ರ ದಶಕಕ್ಕೆ ಹಿಂದಿರುಗಿದರೂ, ಜೆಐಟಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಇತ್ತೀಚೆಗೆ ಹೆಚ್ಚಾಗಿ ಬಳಸಲಾಗುತ್ತಿದೆ. ಜೆಐಟಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವ ಇಂದಿನ ಕಲ್ಪನೆಯನ್ನು ಹೋಲುವ ಒಂದು ಕಲ್ಪನೆಯ ಮೊದಲ ಉಲ್ಲೇಖವು 1970ರಲ್ಲಿ ಆಗಿತ್ತು. ವ್ಯಾಖ್ಯಾನದ ಸಮಯದಲ್ಲಿ ನಡೆಸಿದ ಕ್ರಿಯೆಗಳನ್ನು ಸರಳವಾಗಿ ಸಂಗ್ರಹಿಸುವ ಮೂಲಕ ಸಂಕಲನಗೊಂಡ ಕೋಡ್ ಅನ್ನು ರನ್-ಟೈಮ್ನಲ್ಲಿ ಇಂಟರ್ಪ್ರಿಟರ್ನಿಂದ ಪಡೆಯಬಹುದು ಎಂದು ಗಮನಿಸಲಾಗಿದೆ. ಪತ್ತೆಹಚ್ಚುವಿಕೆಯ ಮೊದಲ ಅನುಷ್ಠಾನವೆಂದರೆ ಡೈನಮೋ, "ಪ್ರೊಸೆಸರ್ನಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳ್ಳುವಾಗ ಸ್ಥಳೀಯ ಸೂಚನಾ ಸ್ಟ್ರೀಮ್ನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಪಾರದರ್ಶಕವಾಗಿ ಸುಧಾರಿಸುವ ಸಾಮರ್ಥ್ಯವಿರುವ ಸಾಫ್ಟ್ವೇರ್ ಡೈನಾಮಿಕ್ ಆಪ್ಟಿಮೈಸೇಶನ್ ಸಿಸ್ಟಮ್". ಇದನ್ನು ಮಾಡಲು, "ಬಿಸಿ" ಸೂಚನಾ ಅನುಕ್ರಮವು ಕಂಡುಬರುವವರೆಗೆ ಸ್ಥಳೀಯ ಸೂಚನಾ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಅರ್ಥೈಸಲಾಗುತ್ತದೆ. ಈ ಅನುಕ್ರಮಕ್ಕಾಗಿ ಆಪ್ಟಿಮೈಸ್ಡ್ ಆವೃತ್ತಿಯನ್ನು ರಚಿಸಲಾಗುತ್ತದೆ, ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಡೈನಾಮೊವನ್ನು ನಂತರ ಡೈನಾಮೋರಿಯೊಗೆ ವಿಸ್ತರಿಸಲಾಯಿತು. ಒಂದು ಡೈನಮೊರಿಯೋ-ಆಧಾರಿತ ಯೋಜನೆಯು ಜಾಡು ಹಿಡಿಯುವಿಕೆ ಮತ್ತು ಭಾಗಶಃ ಮೌಲ್ಯಮಾಪನವನ್ನು ಸಂಯೋಜಿಸುವ ಇಂಟರ್ಪ್ರಿಟರ್ ನಿರ್ಮಾಣದ ಚೌಕಟ್ಟಾಗಿತ್ತು. ಇದನ್ನು "ಭಾಷಾ ಅನುಷ್ಠಾನಗಳಿಂದ ಇಂಟರ್ಪ್ರಿಟರ್ ಓವರ್ಹೆಡ್ ಅನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ತೆಗೆದುಹಾಕಲು" ಬಳಸಲಾಗುತ್ತಿತ್ತು. 2006ರಲ್ಲಿ, ಉನ್ನತ ಮಟ್ಟದ ಭಾಷೆಯ ಮೊದಲ ಜಾಡು ಹಿಡಿಯುವ ಜೆಐಟಿ ಕಂಪೈಲರ್ ಆದ ಹಾಟ್ಪಾತ್ವಿಎಂ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾಯಿತು. ಈ ವಿಎಂ ಆಗಾಗ್ಗೆ ಕಾರ್ಯಗತಗೊಳ್ಳುವ ಬೈಟೆಕೋಡ್ ಸೂಚನೆಗಳನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಗುರುತಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿತ್ತು, ಅವುಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲಾಗುತ್ತದೆ ಮತ್ತು ನಂತರ ಸ್ಟ್ಯಾಟಿಕ್ ಸಿಂಗಲ್ ಅಸೈನ್ಮೆಂಟ್ (ಎಸ್ಎಸ್ಎ) ನಿರ್ಮಾಣವನ್ನು ಬಳಸಿಕೊಂಡು ಯಂತ್ರ ಸಂಕೇತಕ್ಕೆ ಸಂಕಲಿಸಲಾಗುತ್ತದೆ. ಸಂಪನ್ಮೂಲ ನಿರ್ಬಂಧಿತ ಮೊಬೈಲ್ ಸಾಧನಗಳಿಗೆ ಸಮರ್ಥವಾದ ಜೆವಿಎಂ ಅನ್ನು ಹೊಂದಿರುವುದು ಹಾಟ್ಪಾತ್ ವಿಎಂನ ಪ್ರೇರಣೆಯಾಗಿತ್ತು. ಟ್ರೇಸಿಂಗ್ ಜೆಐಟಿಯ ಮತ್ತೊಂದು ಉದಾಹರಣೆಯೆಂದರೆ ಟ್ರೇಸ್ ಮಂಕಿ, ಇದು ಫೈರ್ಫಾಕ್ಸ್ (2009) ಗಾಗಿ ಮೊಜಿಲ್ಲಾದ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನುಷ್ಠಾನಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ. ಟ್ರೇಸ್ ಮಂಕಿ ರನ್-ಟೈಮ್ನಲ್ಲಿ ಡೈನಾಮಿಕ್ ಭಾಷೆಯ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಆಗಾಗ್ಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಲಾದ ಲೂಪ್ ಕುರುಹುಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ ಮಾರ್ಗದಲ್ಲಿ ಸಂಭವಿಸುವ ನಿಜವಾದ ಡೈನಾಮಿಕ್ ಪ್ರಕಾರಗಳಿಗೆ ರಚಿಸಲಾದ ಕೋಡ್ ಅನ್ನು ಪರಿಣತಿಗೊಳಿಸುತ್ತದೆ. ಜೆಐಟಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವ ಮತ್ತೊಂದು ಯೋಜನೆಯು ಪೈಪೈ ಆಗಿದೆ. ಇದು ಪೈಪಿಯ ಅನುವಾದ ಟೂಲ್ ಚೈನ್ನೊಂದಿಗೆ ಬರೆಯಲಾದ ಭಾಷೆಯ ಅನುಷ್ಠಾನಕ್ಕಾಗಿ ಜೆಐಟಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ, ಹೀಗಾಗಿ ಆ ಇಂಟರ್ಪ್ರಿಟರ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಕಾರ್ಯಗತಗೊಳಿಸಲಾದ ಯಾವುದೇ ಪ್ರೋಗ್ರಾಂನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ. ಇಂಟರ್ಪ್ರಿಟರ್ ಕಾರ್ಯಗತಗೊಳಿಸಿದ ಪ್ರೋಗ್ರಾಂ ಬದಲಿಗೆ ಇಂಟರ್ಪ್ರಿಟರ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚುವ ಮೂಲಕ ಇದು ಸಾಧ್ಯ. ಮೈಕ್ರೋಸಾಫ್ಟ್ ತಮ್ಮ ಕಾಮನ್ ಇಂಟರ್ಮೀಡಿಯೇಟ್ ಲ್ಯಾಂಗ್ವೇಜ್ (ಸಿಐಎಲ್) ಗಾಗಿ ಎಸ್ಪಿಯುಆರ್ ಯೋಜನೆಯಲ್ಲಿ ಜೆಐಟಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವುದನ್ನು ಸಹ ಅನ್ವೇಷಿಸಿದೆ. ಎಸ್. ಪಿ. ಯು. ಆರ್. ಸಿ. ಐ. ಎಲ್. ಗೆ ಸಾಮಾನ್ಯ ಟ್ರೇಸರ್ ಆಗಿದೆ, ಇದನ್ನು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನುಷ್ಠಾನದ ಮೂಲಕ ಪತ್ತೆಹಚ್ಚಲು ಸಹ ಬಳಸಬಹುದು. ಜಾಡಿನ ಉದಾಹರಣೆ ಈ ಕೆಳಗಿನ ಪೈಥಾನ್ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ಪರಿಗಣಿಸಿ, ಅದು ಆ ಮೊತ್ತವು 100000 ದಾಟುವವರೆಗೆ ಸತತ ಪೂರ್ಣ ಸಂಖ್ಯೆಗಳ ವರ್ಗಗಳ ಮೊತ್ತವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆಃ ಡೆಫ್ ಸ್ಕ್ವೇರ್ (x): ರಿಟರ್ನ್ x * x i = 0 y = 0 ಆದರೆ ನಿಜಃ y + = ಸ್ಕ್ವೇರ್ (i) y> 100000: ಬ್ರೇಕ್ i = i + 1 ಈ ಪ್ರೋಗ್ರಾಂಗೆ ಟ್ರೇಸ್ ಈ ರೀತಿ ಕಾಣಿಸಬಹುದುಃ ಲೂಪ್ಸ್ಟಾರ್ಟ್ (i1, y1) i2 = int _ mul (i1, i1) #x * x y2 = int _ add (y1, i2) #y + = i * i b1 = int _ gt (y2,100000) ಗಾರ್ಡ _ ಫಾಲ್ಸ್ (b1) i3 = int _ add (i1 ಕೋಡ್ ಪೀಳಿಗೆಯ ಡಾಲ್ವಿಕ್ ಹಾಟ್ಸ್ಪಾಟ್ ಇಂಟರ್ಪ್ರಿಟರ್ ಪ್ರೊಫೈಲ್-ಗೈಡೆಡ್ ಆಪ್ಟಿಮೈಸೇಶನ್ RPython ಶಬ್ದಾರ್ಥ ನಿಘಂಟು ಎನ್ಕೋಡಿಂಗ್ ಉಲ್ಲೇಖಗಳು ಬಾಹ್ಯ ಕೊಂಡಿಗಳು ಲುಯಾಜಿಟ್ ಕಂಪೈಲರ್ ನಿರ್ಮಾಣದ ಅಧಿಕೃತ ಜಾಲತಾಣ ಸಾಫ್ಟ್ವೇರ್ ಆಪ್ಟಿಮೈಸೇಶನ್ ಲೇಖನಗಳು ಉದಾಹರಣೆಗೆ ಪೈಥಾನ್ (ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆ) ಕೋಡ್