పన్నెండేళ్ల నిడివి గల ఒక చిన్న ప్రాజెక్ట్ కథ (మొదటిసారిగా మరియు స్పష్టంగా చెప్పాలంటే BIRMA.NET గురించి)

ఈ ప్రాజెక్ట్ యొక్క పుట్టుకను 2007 చివరిలో ఎక్కడో నాకు వచ్చిన ఒక చిన్న ఆలోచనగా పరిగణించవచ్చు, ఇది 12 సంవత్సరాల తరువాత మాత్రమే దాని తుది రూపాన్ని కనుగొనడానికి ఉద్దేశించబడింది (ఈ సమయంలో - వాస్తవానికి, ప్రస్తుత అమలు ప్రకారం, రచయితకు, చాలా సంతృప్తికరంగా ఉంది) .

లైబ్రరీలో నా అధికారిక విధులను నిర్వర్తించే ప్రక్రియలో, పుస్తక (మరియు సంగీతం) ప్రచురణల విషయ పట్టికల యొక్క స్కాన్ చేసిన వచనం నుండి డేటాను ఇప్పటికే ఉన్న డేటాబేస్‌లోకి నమోదు చేసే ప్రక్రియ గురించి నేను దృష్టిని ఆకర్షించాను, స్పష్టంగా, వ్యాసం యొక్క రచయిత పేరు (మేము కథనాల సేకరణ గురించి మాట్లాడుతున్నట్లయితే) వంటి ఇన్‌పుట్‌కు అవసరమైన మొత్తం డేటా యొక్క క్రమబద్ధత మరియు పునరావృతత యొక్క ఆస్తిని సద్వినియోగం చేసుకోవడం ద్వారా గణనీయంగా సరళీకృతం చేయవచ్చు మరియు స్వయంచాలకంగా చేయవచ్చు. వ్యాసం (లేదా విషయాల పట్టికలో ప్రతిబింబించే ఉపశీర్షిక) మరియు ప్రస్తుత విషయ పట్టికలోని పేజీ సంఖ్య. మొదట, ఈ పనిని నిర్వహించడానికి అనువైన వ్యవస్థ ఇంటర్నెట్‌లో సులభంగా కనుగొనబడుతుందని నేను ఆచరణాత్మకంగా ఒప్పించాను. నేను అలాంటి ప్రాజెక్ట్‌ను కనుగొనలేకపోవడం వల్ల కొంత ఆశ్చర్యం సంభవించినప్పుడు, నేను దానిని నా స్వంతంగా అమలు చేయడానికి ప్రయత్నించాలని నిర్ణయించుకున్నాను.

చాలా తక్కువ సమయం తరువాత, మొదటి నమూనా పని చేయడం ప్రారంభించింది, నేను వెంటనే నా రోజువారీ కార్యకలాపాలలో ఉపయోగించడం ప్రారంభించాను, ఏకకాలంలో నా చేతికి వచ్చిన అన్ని ఉదాహరణలలో డీబగ్ చేసాను. అదృష్టవశాత్తూ, నా సాధారణ కార్యాలయంలో, నేను ప్రోగ్రామర్‌ని కాను, నేను ఇప్పటికీ నా పనిలో కనిపించే “డౌన్‌టైమ్” నుండి తప్పించుకున్నాను, ఈ సమయంలో నేను నా మెదడును తీవ్రంగా డీబగ్ చేస్తున్నాను - ఇది ప్రస్తుత వాస్తవాలలో దాదాపు ఊహించలేని విషయం. పగటిపూట చేసిన పనిపై రోజువారీ నివేదికలు. ప్రోగ్రామ్‌ను పాలిష్ చేసే ప్రక్రియ మొత్తం ఒక సంవత్సరం కంటే తక్కువ సమయం పట్టలేదు, కానీ ఆ తర్వాత కూడా ఫలితం పూర్తిగా విజయవంతమైందని పిలవబడదు - అమలు కోసం చాలా అర్థం కాని అనేక విభిన్న అంశాలు ఉన్నాయి: దాటవేయగల ఐచ్ఛిక అంశాలు ; మూలకాల యొక్క ఫార్వర్డ్ వీక్షణ (మునుపటి మూలకాలను శోధన ఫలితాల్లోకి మార్చడం కోసం); సాధారణ వ్యక్తీకరణల (దీనికి ప్రత్యేకమైన సింటాక్స్ ఉంది) వంటి వాటిని అమలు చేయడానికి మా స్వంత ప్రయత్నం కూడా. దీనికి ముందు నేను ప్రోగ్రామింగ్‌ను కొంతవరకు వదులుకున్నాను (సుమారు 8 సంవత్సరాలు, కాకపోతే), కాబట్టి ఆసక్తికరమైన మరియు అవసరమైన పనికి నా నైపుణ్యాలను వర్తింపజేసే కొత్త అవకాశం నా దృష్టిని పూర్తిగా ఆకర్షించింది. ఫలితంగా సోర్స్ కోడ్ - నా వైపు నుండి దాని రూపకల్పనకు స్పష్టమైన విధానాలు లేనప్పుడు - C++లోని కొన్ని అంశాలు మరియు విజువల్ ప్రోగ్రామింగ్ (ప్రారంభంలో ఇది) యొక్క కొన్ని అంశాలతో C భాషలో భిన్నమైన ముక్కల యొక్క అనూహ్యమైన మిష్‌మాష్‌గా చాలా త్వరగా మారడంలో ఆశ్చర్యం లేదు. బోర్లాండ్ సి ++ బిల్డర్ - “దాదాపు డెల్ఫీ, కానీ సిలో”) వంటి డిజైన్ సిస్టమ్‌ను ఉపయోగించాలని నిర్ణయించారు. అయితే, ఇవన్నీ చివరికి మా లైబ్రరీ యొక్క రోజువారీ కార్యకలాపాలను ఆటోమేట్ చేయడంలో ఫలించాయి.

అదే సమయంలో, ప్రొఫెషనల్ సాఫ్ట్‌వేర్ డెవలపర్‌లకు శిక్షణ ఇవ్వడానికి కోర్సులు తీసుకోవాలని నేను నిర్ణయించుకున్నాను. అక్కడ మొదటి నుండి “ప్రోగ్రామర్‌గా ఉండడం” నేర్చుకోవడం నిజంగా సాధ్యమేనా అని నాకు తెలియదు, కానీ ఆ సమయంలో నాకు ఇప్పటికే ఉన్న నైపుణ్యాలను పరిగణనలోకి తీసుకుంటే, ఆ సమయానికి మరింత సంబంధితమైన సాంకేతికతలను నేను కొంతవరకు ప్రావీణ్యం పొందగలిగాను. C#, NET కింద అభివృద్ధి కోసం విజువల్ స్టూడియో, అలాగే జావా, HTML మరియు SQLకి సంబంధించిన కొన్ని సాంకేతికతలు. మొత్తం శిక్షణ మొత్తం రెండు సంవత్సరాలు పట్టింది మరియు నా యొక్క మరొక ప్రాజెక్ట్‌కు ప్రారంభ బిందువుగా పనిచేసింది, ఇది చివరికి చాలా సంవత్సరాలుగా విస్తరించింది - కానీ ఇది ప్రత్యేక ప్రచురణ కోసం ఒక అంశం. C# మరియు WinFormsలో పూర్తి స్థాయి విండో అప్లికేషన్‌ను రూపొందించడానికి వివరించిన ప్రాజెక్ట్‌లో నేను ఇప్పటికే కలిగి ఉన్న అభివృద్ధిని స్వీకరించడానికి నేను ప్రయత్నించానని ఇక్కడ గమనించడం సముచితంగా ఉంటుంది మరియు అవసరమైన కార్యాచరణను అమలు చేస్తుంది మరియు దానిని ప్రాతిపదికగా ఉపయోగిస్తుంది రాబోయే డిప్లొమా ప్రాజెక్ట్.
కాలక్రమేణా, "LIBKOM" మరియు "CRIMEA" వంటి వివిధ లైబ్రరీల ప్రతినిధుల భాగస్వామ్యంతో ఇటువంటి వార్షిక సమావేశాలలో గాత్రదానం చేయడానికి ఈ ఆలోచన నాకు అర్హమైనదిగా అనిపించడం ప్రారంభించింది. ఆలోచన, అవును, కానీ ఆ సమయంలో నా అమలు కాదు. మరింత సమర్థమైన విధానాలను ఉపయోగించి ఎవరైనా తిరిగి వ్రాస్తారని నేను కూడా ఆశించాను. ఒక మార్గం లేదా మరొకటి, 2013 నాటికి నేను నా ప్రాథమిక పనిపై ఒక నివేదికను వ్రాసి, సమావేశంలో పాల్గొనడానికి మంజూరు కోసం దరఖాస్తుతో కాన్ఫరెన్స్ ఆర్గనైజింగ్ కమిటీకి పంపాలని నిర్ణయించుకున్నాను. నాకు ఆశ్చర్యం కలిగించే విధంగా, నా దరఖాస్తు ఆమోదించబడింది మరియు సమావేశంలో ప్రదర్శన కోసం సిద్ధం చేయడానికి ప్రాజెక్ట్‌కు కొన్ని మెరుగుదలలు చేయడం ప్రారంభించాను.

ఆ సమయానికి, ప్రాజెక్ట్ ఇప్పటికే BIRMA అనే ​​కొత్త పేరును పొందింది, వివిధ అదనపు (పూర్తిగా అమలు చేయబడలేదు, కానీ ఊహించిన) సామర్థ్యాలను పొందింది - అన్ని వివరాలను నా నివేదికలో చూడవచ్చు.

నిజం చెప్పాలంటే, BIRMA 2013ని పూర్తి చేయడం కష్టం; స్పష్టంగా చెప్పాలంటే, ఇది త్వరితగతిన తయారు చేయబడిన చాలా హ్యాకీ క్రాఫ్ట్. కోడ్ పరంగా, IRBIS 64 ఫార్మాటింగ్ లాంగ్వేజ్‌ను గుర్తుకు తెచ్చే విధంగా పార్సర్ కోసం ఒక రకమైన ఏకీకృత వాక్యనిర్మాణాన్ని సృష్టించే నిస్సహాయ ప్రయత్నం తప్ప, ఆచరణాత్మకంగా ప్రత్యేక ఆవిష్కరణలు లేవు (వాస్తవానికి, ISIS వ్యవస్థ కూడా - చక్రీయ నిర్మాణాలుగా కుండలీకరణాలతో; ఎందుకు ఆ సమయంలో నేను చాలా బాగుంది అని అనుకున్నాను). పార్సర్ నిస్సహాయంగా తగిన రకానికి చెందిన కుండలీకరణాల యొక్క ఈ సర్కిల్‌లపై పొరపాటు పడింది (కుండలీకరణాలు కూడా మరొక పాత్రను పోషించాయి, అవి పార్సింగ్ సమయంలో ఐచ్ఛిక నిర్మాణాలను గుర్తించాయి, వాటిని దాటవేయవచ్చు). ఊహించడానికి కష్టంగా ఉన్న BIRMA యొక్క అన్యాయమైన సింటాక్స్ గురించి మరింత వివరంగా తెలుసుకోవాలనుకునే ప్రతి ఒక్కరినీ నేను ఆ కాలపు నా నివేదికకు మళ్లీ సూచిస్తున్నాను.

సాధారణంగా, నా స్వంత పార్సర్‌తో పోరాడటమే కాకుండా, ఈ సంస్కరణ కోడ్‌కు సంబంధించి నేను ఇంకేమీ చెప్పలేను - .NET కోడ్ యొక్క కొన్ని విలక్షణమైన లక్షణాలను భద్రపరుస్తూ ఇప్పటికే ఉన్న మూలాలను C++లోకి మార్చడం మినహా (నిజాయితీగా చెప్పాలంటే, ఇది అర్థం చేసుకోవడం కష్టం , సరిగ్గా ప్రతిదీ వెనక్కి తరలించడానికి నన్ను ప్రేరేపించింది - బహుశా నా సోర్స్ కోడ్‌లను రహస్యంగా ఉంచడం కోసం కొంత తెలివితక్కువ భయం, ఇది కోకా-కోలా యొక్క రహస్య వంటకానికి సమానమైనది).

ఎలక్ట్రానిక్ కేటలాగ్‌లోకి డేటాను నమోదు చేయడానికి ఇంట్లో తయారుచేసిన వర్క్‌స్టేషన్ యొక్క ప్రస్తుత ఇంటర్‌ఫేస్‌తో ఫలిత DLL లైబ్రరీని జత చేయడంలో ఇబ్బందులకు ఈ తెలివితక్కువ నిర్ణయం కూడా కారణం కావచ్చు (అవును, నేను మరొక ముఖ్యమైన వాస్తవాన్ని ప్రస్తావించలేదు: ఇప్పటి నుండి, అన్నీ BIRMA "ఇంజిన్" కోడ్ ఊహించిన విధంగా ఉంది, ఇది ఇంటర్ఫేస్ భాగం నుండి వేరు చేయబడింది మరియు తగిన DLLలో ప్యాక్ చేయబడింది). ఈ ప్రయోజనాల కోసం ప్రత్యేక వర్క్‌స్టేషన్‌ను ఎందుకు వ్రాయవలసి వచ్చింది, ఏమైనప్పటికీ, దాని రూపాన్ని మరియు వినియోగదారుతో పరస్పర చర్య చేసే పద్ధతిలో, IRBIS 64 సిస్టమ్ యొక్క అదే వర్క్‌స్టేషన్ “కేటలాజైజర్” ను సిగ్గు లేకుండా కాపీ చేసింది - ఇది ఒక ప్రత్యేక ప్రశ్న. సంక్షిప్తంగా: ఇది నా గ్రాడ్యుయేషన్ ప్రాజెక్ట్ కోసం నా అప్పటి పరిణామాలకు అవసరమైన పటిష్టతను ఇచ్చింది (లేకపోతే జీర్ణించుకోలేని పార్సర్ ఇంజిన్ మాత్రమే సరిపోదు). అదనంగా, C++ మరియు C# రెండింటిలోనూ అమలు చేయబడిన నా స్వంత మాడ్యూల్స్‌తో కేటలోజర్ వర్క్‌స్టేషన్ యొక్క ఇంటర్‌ఫేస్‌ను అమలు చేయడంలో మరియు నేరుగా నా ఇంజిన్‌ను యాక్సెస్ చేయడంలో నేను కొన్ని సమస్యలను ఎదుర్కొన్నాను.

సాధారణంగా, విచిత్రమేమిటంటే, భవిష్యత్ BIRMA.NET యొక్క ఈ వికృతమైన ప్రోటోటైప్ తరువాతి నాలుగు సంవత్సరాలలో నా "వర్క్‌హోర్స్"గా మారడానికి ఉద్దేశించబడింది. ఈ సమయంలో నేను చాలా కాలంగా ఉన్న ఆలోచన యొక్క కొత్త, మరింత పూర్తి అమలు కోసం మార్గాలను కనుగొనడానికి కనీసం ప్రయత్నించలేదని చెప్పలేను. ఇతర ఆవిష్కరణలలో, ఐచ్ఛిక అంశాలను చేర్చగలిగే సమూహ చక్రీయ సన్నివేశాలు ఇప్పటికే ఉండి ఉండాలి - నేను ప్రచురణల యొక్క గ్రంథ పట్టిక వివరణలు మరియు అనేక ఇతర ఆసక్తికరమైన విషయాల కోసం యూనివర్సల్ టెంప్లేట్‌ల ఆలోచనను ఈ విధంగా జీవం పోయబోతున్నాను. అయినప్పటికీ, ఆ సమయంలో నా ఆచరణాత్మక కార్యకలాపాలలో, ఇవన్నీ తక్కువ డిమాండ్‌లో ఉన్నాయి మరియు ఆ సమయంలో నేను కలిగి ఉన్న అమలు విషయాల పట్టికలను నమోదు చేయడానికి చాలా సరిపోతుంది. అదనంగా, మా లైబ్రరీ యొక్క అభివృద్ధి దిశ మ్యూజియం ఆర్కైవ్‌ల డిజిటలైజేషన్, రిపోర్టింగ్ మరియు నాకు పెద్దగా ఆసక్తి లేని ఇతర కార్యకలాపాల వైపు మరింతగా వైదొలగడం ప్రారంభించింది, చివరికి నన్ను చివరకు వదిలివేయవలసి వచ్చింది, ఇది ఇష్టపడేవారికి దారితీసింది. వీటన్నిటితో మరింత సంతోషించండి.

విరుద్ధంగా, ఈ నాటకీయ సంఘటనల తరువాత, ఆ సమయంలో ఇప్పటికే ఒక సాధారణ దీర్ఘకాలిక నిర్మాణ ప్రాజెక్ట్ యొక్క అన్ని లక్షణాలను కలిగి ఉన్న BIRMA ప్రాజెక్ట్, దాని దీర్ఘకాలంగా ఎదురుచూస్తున్న కొత్త జీవితాన్ని ప్రారంభించడం ప్రారంభించినట్లు అనిపించింది! నిష్క్రియ ఆలోచనల కోసం నాకు ఎక్కువ ఖాళీ సమయం ఉంది, నేను మళ్లీ ఇలాంటిదేదో వెతకడం కోసం వరల్డ్ వైడ్ వెబ్‌ని దువ్వడం ప్రారంభించాను (అదృష్టవశాత్తూ, ఇప్పుడు నేను వీటన్నింటిని ఎక్కడైనా కాకుండా GitHubలో వెతకాలని ఇప్పటికే ఊహించగలిగాను), మరియు ఎక్కడో ఈ సంవత్సరం ప్రారంభంలో, నేను ఎట్టకేలకు సుప్రసిద్ధ సేల్స్‌ఫోర్స్ కంపెనీ నుండి సంబంధిత ఉత్పత్తిని చిన్న పేరుతో చూశాను గోర్ప్. ఇది స్వయంగా, అటువంటి పార్సర్ ఇంజిన్ నుండి నాకు అవసరమైన దాదాపు ప్రతిదీ చేయగలదు - అంటే, వ్యక్తిగత శకలాలను ఏకపక్ష, కానీ స్పష్టంగా నిర్మాణాత్మక వచనం నుండి తెలివిగా వేరుచేయడం, అంతిమ వినియోగదారు కోసం చాలా వినియోగదారు-స్నేహపూర్వక ఇంటర్‌ఫేస్‌ను కలిగి ఉంటుంది, అలాంటి అర్థమయ్యే సారాంశాలతో సహా. ఒక నమూనా, టెంప్లేట్ మరియు సంభవం, మరియు అదే సమయంలో సాధారణ వ్యక్తీకరణల యొక్క సుపరిచితమైన వాక్యనిర్మాణాన్ని ఉపయోగించడం, పార్సింగ్ కోసం నియమించబడిన సెమాంటిక్ గ్రూపులుగా విభజించడం వలన ఇది సాటిలేని విధంగా మరింత చదవగలిగేదిగా మారుతుంది.

సాధారణంగా, ఇది ఒకటి అని నేను నిర్ణయించుకున్నాను గోర్ప్ (ఈ పేరు అర్థం ఏమిటని నేను ఆశ్చర్యపోతున్నాను? బహుశా ఒక రకమైన "సాధారణ ఆధారిత సాధారణ పార్సర్"?) - సరిగ్గా నేను చాలా కాలంగా వెతుకుతున్నాను. నిజమే, నా స్వంత అవసరాలకు దాని తక్షణ అమలులో అటువంటి సమస్య ఉంది, ఈ ఇంజిన్ మూల వచనం యొక్క నిర్మాణ క్రమాన్ని చాలా ఖచ్చితంగా పాటించాల్సిన అవసరం ఉంది. లాగ్ ఫైల్‌ల వంటి కొన్ని నివేదికల కోసం (అవి డెవలపర్‌లచే ప్రాజెక్ట్‌ను ఉపయోగించడం యొక్క స్పష్టమైన ఉదాహరణలుగా ఉంచబడ్డాయి), ఇది చాలా సరిఅయినది, అయితే స్కాన్ చేసిన విషయాల పట్టికల యొక్క అదే పాఠాలకు ఇది అసంభవం. అన్నింటికంటే, విషయాల పట్టికతో అదే పేజీ “విషయాల పట్టిక”, “కంటెంట్స్” మరియు కొన్ని ఇతర ప్రాథమిక వివరణలతో ప్రారంభించవచ్చు, వీటిని మేము ఉద్దేశించిన విశ్లేషణ ఫలితాలలో ఉంచాల్సిన అవసరం లేదు (మరియు వాటిని మాన్యువల్‌గా కత్తిరించడం. ప్రతిసారీ కూడా అసౌకర్యంగా ఉంటుంది). అదనంగా, రచయిత పేరు, శీర్షిక మరియు పేజీ సంఖ్య వంటి వ్యక్తిగత పునరావృత మూలకాల మధ్య, పేజీలో కొంత మొత్తంలో చెత్త ఉండవచ్చు (ఉదాహరణకు, డ్రాయింగ్‌లు మరియు యాదృచ్ఛిక అక్షరాలు), వీటిని కూడా చేయగలిగితే బాగుంటుంది కత్తిరించిన. అయితే, చివరి అంశం ఇంకా అంత ముఖ్యమైనది కాదు, కానీ మొదటి కారణంగా, ఇప్పటికే ఉన్న అమలు ఒక నిర్దిష్ట స్థలం నుండి టెక్స్ట్‌లో అవసరమైన నిర్మాణాల కోసం వెతకడం ప్రారంభించలేదు, కానీ బదులుగా మొదటి నుండి ప్రాసెస్ చేసినప్పటికీ, కనుగొనబడలేదు అక్కడ పేర్కొన్న నమూనాలు మరియు... నా పనిని ముగించాను. సహజంగానే, పునరావృతమయ్యే నిర్మాణాల మధ్య కనీసం కొంత ఖాళీని అనుమతించడానికి కొంత ట్వీకింగ్ అవసరమైంది మరియు అది నన్ను తిరిగి పనిలోకి తెచ్చింది.

మరొక సమస్య ఏమిటంటే, ప్రాజెక్ట్ జావాలో అమలు చేయబడింది మరియు ఇప్పటికే ఉన్న డేటాబేస్‌లలోకి (ఇర్బిస్ ​​యొక్క “కేటలాగ్” వంటివి) డేటాను నమోదు చేయడానికి తెలిసిన అప్లికేషన్‌లతో ఈ సాంకేతికతను ఇంటర్‌ఫేస్ చేసే కొన్ని మార్గాలను భవిష్యత్తులో అమలు చేయాలని నేను ప్లాన్ చేస్తే, కనీసం కనీసం దీన్ని C# మరియు .NETలో చేయండి. జావా కూడా చెడ్డ భాష అని కాదు - దేశీయ ప్రోగ్రామబుల్ కాలిక్యులేటర్ (కోర్సు ప్రాజెక్ట్‌లో భాగంగా) యొక్క కార్యాచరణను అమలు చేసే ఆసక్తికరమైన విండో అప్లికేషన్‌ను అమలు చేయడానికి నేను ఒకసారి దీనిని ఉపయోగించాను. మరియు సింటాక్స్ పరంగా ఇది అదే సి-షార్ప్‌కి చాలా పోలి ఉంటుంది. సరే, ఇది ఒక ప్లస్ మాత్రమే: ఇప్పటికే ఉన్న ప్రాజెక్ట్‌ను ఖరారు చేయడం నాకు సులభం అవుతుంది. అయినప్పటికీ, ఈ అసాధారణమైన విండో (లేదా డెస్క్‌టాప్) జావా టెక్నాలజీల ప్రపంచంలోకి మళ్లీ మునిగిపోవాలని నేను కోరుకోలేదు - అన్నింటికంటే, భాష కూడా అలాంటి ఉపయోగం కోసం “అనుకూలమైనది” కాదు మరియు నేను పునరావృతం చేయాలనుకోవడం లేదు. మునుపటి అనుభవం. WinFormsతో కలిపి C# డెల్ఫీకి చాలా దగ్గరగా ఉన్నందున బహుశా ఇది ఖచ్చితంగా కావచ్చు, మనలో చాలా మంది దీనితో ఒకప్పుడు ప్రారంభించారు. అదృష్టవశాత్తూ, అవసరమైన పరిష్కారం చాలా త్వరగా కనుగొనబడింది - ప్రాజెక్ట్ రూపంలో IKVM.NET, ఇది ఇప్పటికే ఉన్న జావా ప్రోగ్రామ్‌లను నిర్వహించే .NET కోడ్‌లోకి అనువదించడం సులభం చేస్తుంది. నిజమే, ఆ ప్రాజెక్ట్ ఇప్పటికే రచయితలచే వదిలివేయబడింది, కానీ దాని తాజా అమలు మూల గ్రంథాల కోసం అవసరమైన చర్యలను చాలా విజయవంతంగా నిర్వహించడానికి నన్ను అనుమతించింది. గోర్ప్.

కాబట్టి నేను అవసరమైన అన్ని మార్పులను చేసాను మరియు విజువల్ స్టూడియోలో సృష్టించబడిన .NET ఫ్రేమ్‌వర్క్ కోసం ఏదైనా ప్రాజెక్ట్‌ల ద్వారా సులభంగా "పికప్" చేయగల తగిన రకానికి చెందిన DLLకి అన్నింటినీ సమీకరించాను. ఈ సమయంలో, తిరిగి వచ్చిన ఫలితాల యొక్క అనుకూలమైన ప్రదర్శన కోసం నేను మరొక లేయర్‌ని సృష్టించాను గోర్ప్, పట్టిక వీక్షణలో ప్రాసెస్ చేయడానికి సౌకర్యవంతంగా ఉండే సంబంధిత డేటా స్ట్రక్చర్‌ల రూపంలో (వరుసలు మరియు నిలువు వరుసలు రెండింటినీ ప్రాతిపదికగా తీసుకోవడం; నిఘంటువు కీలు మరియు సంఖ్యా సూచికలు రెండూ). బాగా, ఫలితాలను ప్రాసెస్ చేయడానికి మరియు ప్రదర్శించడానికి అవసరమైన యుటిలిటీలు చాలా త్వరగా వ్రాయబడ్డాయి.

అలాగే, స్కాన్ చేసిన విషయాల టెక్స్ట్‌ల యొక్క ఇప్పటికే ఉన్న నమూనాలను అన్వయించడం కోసం కొత్త ఇంజిన్‌కు టెంప్లేట్‌లను స్వీకరించే ప్రక్రియ ఎటువంటి ప్రత్యేక సమస్యలను కలిగించలేదు. వాస్తవానికి, నేను నా మునుపటి టెంప్లేట్‌లను అస్సలు సూచించాల్సిన అవసరం లేదు: నేను మొదటి నుండి అవసరమైన అన్ని టెంప్లేట్‌లను సృష్టించాను. అంతేకాకుండా, సిస్టమ్ యొక్క మునుపటి సంస్కరణతో పని చేయడానికి రూపొందించిన టెంప్లేట్‌లు వాటి సహాయంతో సరిగ్గా అన్వయించగలిగే పాఠాల కోసం చాలా ఇరుకైన ఫ్రేమ్‌వర్క్‌ను సెట్ చేస్తే, కొత్త ఇంజిన్ ఇప్పటికే అనేక రకాల మార్కప్‌లకు అనువైన సార్వత్రిక టెంప్లేట్‌లను అభివృద్ధి చేయడం సాధ్యం చేసింది. ఒకసారి. నేను ఏదైనా ఏకపక్ష విషయాల టెక్స్ట్ కోసం ఒక రకమైన సమగ్ర టెంప్లేట్‌ను వ్రాయడానికి ప్రయత్నించాను, అయినప్పటికీ, అన్ని కొత్త అవకాశాలతో పాటు, ప్రత్యేకించి, అదే సమూహ పునరావృత సన్నివేశాలను అమలు చేయగల పరిమిత సామర్థ్యంతో సహా ( ఉదాహరణకు, ఇంటిపేర్లు మరియు మొదటి అక్షరాలు వరుసగా అనేక రచయితలు), ఇది ఆదర్శధామంగా మారింది.

బహుశా భవిష్యత్తులో మెటా-టెంప్లేట్‌ల యొక్క నిర్దిష్ట భావనను అమలు చేయడం సాధ్యమవుతుంది, ఇది అందుబాటులో ఉన్న అనేక టెంప్లేట్‌లకు అనుగుణంగా సోర్స్ టెక్స్ట్‌ను ఒకేసారి తనిఖీ చేయగలదు, ఆపై, పొందిన ఫలితాలకు అనుగుణంగా, ఎంచుకోండి చాలా సరిఅయినది, ఒకరకమైన ఇంటెలిజెంట్ అల్గోరిథం ఉపయోగించి. కానీ ఇప్పుడు నేను మరొక ప్రశ్న గురించి మరింత ఆందోళన చెందాను. ఒక పార్సర్ వంటిది గోర్ప్, దాని బహుముఖ ప్రజ్ఞ మరియు నేను మార్పులు చేసినప్పటికీ, నా స్వీయ-వ్రాతపూర్వక పార్సర్ మొదటి సంస్కరణ నుండి చేయగలిగిన ఒక అంతమయినట్లుగా చూపబడని ఒక సాధారణ పనిని చేయడంలో ఇది ఇప్పటికీ అంతర్గతంగా అసమర్థంగా ఉంది. అవి: సరైన స్థలంలో ఉపయోగించిన టెంప్లేట్‌లో పేర్కొన్న మాస్క్‌తో సరిపోలే అన్ని శకలాలను సోర్స్ టెక్స్ట్ నుండి కనుగొని, సంగ్రహించే సామర్థ్యాన్ని అతను కలిగి ఉన్నాడు, అయితే ఈ శకలాల మధ్య ఖాళీలలో ఇచ్చిన టెక్స్ట్ ఏమి కలిగి ఉందనే దానిపై అస్సలు ఆసక్తి లేదు. ఇప్పటివరకు, నేను కొత్త ఇంజిన్‌ను కొద్దిగా మెరుగుపరిచాను, ప్రస్తుత స్థానం నుండి అటువంటి మాస్క్‌ల యొక్క ఇచ్చిన శ్రేణి యొక్క అన్ని కొత్త పునరావృతాల కోసం శోధించడానికి అనుమతిస్తుంది, ఇది పూర్తిగా ఏకపక్ష అక్షరాల సెట్‌ల వచనంలో ఉనికిని వదిలివేస్తుంది. అన్వేషణలో లెక్కించబడలేదు, కనుగొనబడిన పునరావృత నిర్మాణాల మధ్య పరివేష్టితమైనది. అయినప్పటికీ, సంబంధిత ముసుగుని ఉపయోగించి మునుపటి భాగాన్ని శోధించడం యొక్క ఫలితాలతో సంబంధం లేకుండా తదుపరి ముసుగుని సెట్ చేయడం ఇది సాధ్యం కాలేదు: వివరించిన వచన నిర్మాణం యొక్క కఠినత ఇప్పటికీ సక్రమంగా లేని అక్షరాలను ఏకపక్షంగా చేర్చడానికి గదిని వదలలేదు.

మరియు నేను ఎదుర్కొన్న విషయాల పట్టికల ఉదాహరణల కోసం ఈ సమస్య ఇంకా చాలా తీవ్రంగా అనిపించకపోతే, వెబ్‌సైట్‌లోని కంటెంట్‌లను అన్వయించే (అంటే అదే పార్సింగ్) ఇదే విధమైన పనికి కొత్త పార్సింగ్ మెకానిజంను వర్తింపజేయడానికి ప్రయత్నిస్తున్నప్పుడు, దాని పరిమితులు ఇక్కడ ఉన్నాయి, అవి అన్ని స్పష్టంగా కనిపించాయి. అన్నింటికంటే, వెబ్ మార్కప్ యొక్క శకలాలు కోసం అవసరమైన మాస్క్‌లను సెట్ చేయడం చాలా సులభం, వాటి మధ్య మనం వెతుకుతున్న డేటా (ఇది సంగ్రహించబడాలి) ఉండాలి, అయితే పార్సర్‌ను తక్షణమే తదుపరిదానికి వెళ్లమని ఎలా బలవంతం చేయవచ్చు సారూప్యమైన శకలాలు, వాటి మధ్య ఖాళీలలో ఉంచగలిగే అన్ని ట్యాగ్‌లు మరియు HTML గుణాలు ఉన్నప్పటికీ?

కొంచెం ఆలోచించిన తర్వాత, నేను రెండు సర్వీస్ ప్యాటర్న్‌లను పరిచయం చేయాలని నిర్ణయించుకున్నాను (%all_before) и (%all_after), సోర్స్ టెక్స్ట్‌లో ఉన్న ప్రతిదీ వాటిని అనుసరించే ఏదైనా నమూనా (ముసుగు) ముందు దాటవేయబడిందని నిర్ధారించడం యొక్క స్పష్టమైన ఉద్దేశ్యాన్ని అందిస్తోంది. అంతేకాక, ఉంటే (%all_before) ఈ ఏకపక్ష చేరికలన్నింటినీ విస్మరించారు (%all_after), దీనికి విరుద్ధంగా, మునుపటి భాగం నుండి తరలించిన తర్వాత వాటిని కావలసిన భాగానికి జోడించడానికి అనుమతించబడింది. ఇది చాలా సరళంగా అనిపిస్తుంది, కానీ ఈ కాన్సెప్ట్‌ను అమలు చేయడానికి నేను ఇప్పటికే అమలు చేసిన తర్కాన్ని విచ్ఛిన్నం చేయకుండా అవసరమైన మార్పులను చేయడానికి గోర్ప్ మూలాల ద్వారా మళ్లీ దువ్వెన చేయాల్సి వచ్చింది. చివరికి, మేము దీన్ని చేయగలిగాము (అయితే చాలా మొదటిది, చాలా బగ్గీ అయినప్పటికీ, నా పార్సర్ యొక్క అమలు వ్రాయబడింది మరియు మరింత వేగంగా - రెండు వారాల్లో). ఇప్పటి నుండి, సిస్టమ్ నిజంగా సార్వత్రిక రూపాన్ని పొందింది - ఇది పని చేయడానికి మొదటి ప్రయత్నాల తర్వాత 12 సంవత్సరాల కంటే తక్కువ కాదు.

వాస్తవానికి, ఇది మన కలల ముగింపు కాదు. మీరు ఉచిత వ్యాకరణాన్ని అమలు చేయడానికి అందుబాటులో ఉన్న ఏవైనా లైబ్రరీలను ఉపయోగించి, C#లో గోర్ప్ టెంప్లేట్ పార్సర్‌ను పూర్తిగా తిరిగి వ్రాయవచ్చు. కోడ్ గణనీయంగా సరళీకృతం చేయబడాలని నేను భావిస్తున్నాను మరియు ఇది ఇప్పటికే ఉన్న జావా మూలాల రూపంలో వారసత్వాన్ని వదిలించుకోవడానికి మాకు అనుమతిస్తుంది. కానీ ఇప్పటికే ఉన్న రకం ఇంజిన్‌తో, నేను ఇప్పటికే పేర్కొన్న మెటా-టెంప్లేట్‌లను అమలు చేసే ప్రయత్నంతో సహా వివిధ ఆసక్తికరమైన పనులను చేయడం కూడా చాలా సాధ్యమే, వివిధ వెబ్‌సైట్‌ల నుండి వివిధ డేటాను అన్వయించడం గురించి ప్రత్యేకంగా చెప్పనక్కర్లేదు (అయితే, నేను తోసిపుచ్చను. ఇప్పటికే ఉన్న ప్రత్యేక సాఫ్ట్‌వేర్ సాధనాలు దీనికి మరింత అనుకూలంగా ఉంటాయి - వాటిని ఉపయోగించడంలో నాకు ఇంకా సరైన అనుభవం లేదు).

చెప్పాలంటే, ఈ వేసవిలో సేల్స్‌ఫోర్స్ టెక్నాలజీలను ఉపయోగించే కంపెనీ (అసలు డెవలపర్) నుండి నాకు ఇమెయిల్ ద్వారా ఇప్పటికే ఆహ్వానం అందింది గోర్ప్), రిగాలో తదుపరి పని కోసం ఇంటర్వ్యూలో ఉత్తీర్ణత సాధించండి. దురదృష్టవశాత్తు, ప్రస్తుతానికి నేను అలాంటి పునఃవియోగాలకు సిద్ధంగా లేను.

ఈ విషయం కొంత ఆసక్తిని రేకెత్తిస్తే, రెండవ భాగంలో నేను సేల్స్‌ఫోర్స్‌లో ఉపయోగించిన అమలు యొక్క ఉదాహరణను ఉపయోగించి టెంప్లేట్‌లను కంపైల్ చేయడానికి మరియు తరువాత అన్వయించడానికి సాంకేతికతను మరింత వివరంగా వివరించడానికి ప్రయత్నిస్తాను. గోర్ప్ (నా స్వంత చేర్పులు, ఇప్పటికే వివరించిన రెండు ఫంక్షన్ పదాలను మినహాయించి, టెంప్లేట్ సింటాక్స్‌లో వాస్తవంగా ఎటువంటి మార్పులు చేయలేదు, కాబట్టి అసలు సిస్టమ్ కోసం దాదాపు అన్ని డాక్యుమెంటేషన్ గోర్ప్ నా సంస్కరణకు కూడా అనుకూలం).

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి