ZuriHac: ఫంక్షనల్ ప్రోగ్రామింగ్ సాధన

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

ZuriHac: ఫంక్షనల్ ప్రోగ్రామింగ్ సాధన

О нас

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

ఈవెంట్ ఫార్మాట్

లక్షిత ప్రేక్షకులు ఓపెన్-సోర్స్ ప్రాజెక్ట్ యజమానులు, వాటి అభివృద్ధికి సహకరించడానికి ఆసక్తి ఉన్న ప్రోగ్రామర్లు, ఫంక్షనల్ ప్రోగ్రామింగ్ పరిశోధకులు మరియు హాస్కెల్ పట్ల అమితమైన అభిరుచి ఉన్నవారు. ఈ సంవత్సరం, ప్రపంచవ్యాప్తంగా ఉన్న యాభైకి పైగా హాస్కెల్ ఓపెన్-సోర్స్ ప్రాజెక్ట్‌ల నుండి డెవలపర్లు తమ ఉత్పత్తులను ప్రదర్శించడానికి మరియు కొత్తవారిని తమ అభివృద్ధి వైపు ఆకర్షించడానికి HSR హోచ్‌స్కూల్ ఫర్ టెక్నిక్ రాప్పర్స్‌విల్‌లో సమావేశమయ్యారు.

ZuriHac: ఫంక్షనల్ ప్రోగ్రామింగ్ సాధన

ట్విట్టర్ నుండి ఫోటో జురిహాక్

ఈ ప్రక్రియ చాలా సులభం: మీ ప్రాజెక్ట్ గురించి ముందుగానే కొన్ని వాక్యాలు రాసి నిర్వాహకులకు పంపండి, వారు మీ ప్రాజెక్ట్ గురించిన సమాచారాన్ని ఈవెంట్ పేజీలో పోస్ట్ చేస్తారు. అంతేకాకుండా, మొదటి రోజున, ప్రాజెక్ట్ రచయితలు వేదికపై తమ పనిని మరియు వారు పూర్తి చేయాల్సిన పనులను క్లుప్తంగా వివరించడానికి ముప్పై సెకన్ల సమయం ఉంటుంది. ఆ తర్వాత, ఆసక్తిగల పాల్గొనేవారు రచయితల వద్దకు వెళ్లి, ఆ పనుల గురించి వివరంగా అడుగుతారు.

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

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

ZuriHac: ఫంక్షనల్ ప్రోగ్రామింగ్ సాధన

సైమన్ పేటన్ జోన్స్ గారి ఉపన్యాసం. ఫోటో: ట్విట్టర్ నుండి. జురిహాక్

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

ఈ కార్యక్రమానికి సాధారణ పాల్గొనేవారికి మరియు ప్రాజెక్ట్ రచయితలకు ఇద్దరికీ నమోదు ఉచితం. మేము జూన్ ప్రారంభంలో మా దరఖాస్తులను సమర్పించాము మరియు త్వరగా నిరీక్షణ జాబితా నుండి ధృవీకరించబడిన పాల్గొనేవారి జాబితాకు మార్చబడ్డాము.

ఇప్పుడు మేము అభివృద్ధిలో పాలుపంచుకున్న ప్రాజెక్టుల గురించి మీకు తెలియజేస్తాము.

Pandoc

Pandoc పాండక్ అనేది ఒక సార్వత్రిక టెక్స్ట్ డాక్యుమెంట్ కన్వర్టర్, ఇది ప్రాథమికంగా ఏ ఫార్మాట్ నుండి అయినా మరొక ఫార్మాట్‌కు మారుస్తుంది. ఉదాహరణకు, docx నుండి pdf కి, లేదా మార్క్‌డౌన్ నుండి మీడియావికీకి. దీని రచయిత, జాన్ మెక్‌ఫార్లేన్, బర్కిలీలోని కాలిఫోర్నియా విశ్వవిద్యాలయంలో తత్వశాస్త్ర ప్రొఫెసర్. పాండక్ చాలా ప్రసిద్ధి చెందింది, మరియు పాండక్‌ను హాస్కెల్‌లో రాశారని తెలుసుకుని మా స్నేహితులలో కొందరు ఆశ్చర్యపోయారు.

ZuriHac: ఫంక్షనల్ ప్రోగ్రామింగ్ సాధన

పాండక్ మద్దతు ఇచ్చే డాక్యుమెంట్ ఫార్మాట్‌ల జాబితా. వెబ్‌సైట్‌లో ఒక పూర్తి గ్రాఫ్ కూడా ఉంది, కానీ ఆ చిత్రం ఈ వ్యాసంలో సరిపోదు.

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

$ cat example.html
<h1>Hello, World!</h1>

$ pandoc -f html -t native example.html
[Header 1 ("hello-world",[],[]) [Str "Hello,",Space,Str "World!"]]

హస్కెల్‌తో కనీసం కొంచెమైనా పనిచేసిన పాఠకులు, పాండక్ హస్కెల్‌లో వ్రాయబడిందని ఈ చిన్న ఉదాహరణ నుండే ఇప్పటికే ఊహించగలరు: ఈ కమాండ్ యొక్క అవుట్‌పుట్, పాండక్ యొక్క అంతర్గత నిర్మాణాల యొక్క స్ట్రింగ్ రూపం. ఇది, ఉదాహరణకు స్టాండర్డ్ లైబ్రరీలో హస్కెల్‌లో సాధారణంగా చేసే పద్ధతిలోనే సృష్టించబడింది.

కాబట్టి, ఇక్కడ మీరు అంతర్గత ప్రాతినిధ్యం ఒక పునరావృత నిర్మాణం అని చూడవచ్చు, దీనిలో ప్రతి అంతర్గత నోడ్ ఒక జాబితాను కలిగి ఉంటుంది. ఉదాహరణకు, అగ్ర స్థాయిలో ఒకే ఒక మూలకం ఉన్న జాబితా ఉంది—"hello-world",[],[] అనే లక్షణాలతో కూడిన మొదటి-స్థాయి హెడర్. ఈ హెడర్‌లో "Hello" అనే స్ట్రింగ్, ఒక ఖాళీ, మరియు "World!" అనే స్ట్రింగ్ ఉన్న జాబితా దాగి ఉంది.

మీరు చూడగలిగినట్లుగా, దీని అంతర్గత రూపం HTML నుండి పెద్దగా భిన్నంగా లేదు. ఇది ఒక ట్రీ లాంటిది, దీనిలో ప్రతి అంతర్గత నోడ్ దాని తర్వాతి నోడ్‌లకు ఫార్మాటింగ్ సమాచారాన్ని అందిస్తుంది, మరియు లీఫ్‌లు అసలైన డాక్యుమెంట్ కంటెంట్‌ను కలిగి ఉంటాయి.

మనం నిర్దిష్ట అమలు స్థాయికి వెళితే, మొత్తం డాక్యుమెంట్ యొక్క డేటా రకం ఈ విధంగా నిర్వచించబడింది:

data Pandoc = Pandoc Meta [Block]

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

దాదాపు అన్ని బ్లాక్-టైప్ కన్‌స్ట్రక్టర్లు—ఉదాహరణకు, హెడర్ లేదా పారా (పేరాగ్రాఫ్)—యాట్రిబ్యూట్‌లను మరియు దిగువ-స్థాయి నోడ్‌ల జాబితాను ఆర్గ్యుమెంట్‌లుగా స్వీకరిస్తాయి—సాధారణంగా ఇన్‌లైన్. ఉదాహరణకు, స్పేస్ లేదా Str అనేవి ఇన్‌లైన్-టైప్ కన్‌స్ట్రక్టర్లు, మరియు HTML ట్యాగ్ కూడా దాని స్వంత ప్రత్యేక ఇన్‌లైన్ కన్‌స్ట్రక్టర్‌గా మారుతుంది. ఈ రకాల పూర్తి నిర్వచనాలను అందించడంలో మాకు ప్రయోజనం కనిపించడం లేదు, కానీ వాటిని ఇక్కడ కనుగొనవచ్చని మేము గమనిస్తున్నాము. ఇక్కడ.

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

ఉదాహరణకు, LaTeX నుండి HTMLకి మార్చేటప్పుడు, మొదట LaTeXReader అనే ఒక ప్రత్యేక మాడ్యూల్ ఇన్‌పుట్ డాక్యుమెంట్‌ను ASTగా మారుస్తుంది, ఆ తర్వాత HTMLWriter అనే మరో మాడ్యూల్ ఆ ASTని HTMLగా మారుస్తుంది. ఈ నిర్మాణం వల్ల, లెక్కలేనన్ని మార్పిడులు రాయాల్సిన అవసరం ఉండదు—ప్రతి కొత్త ఫార్మాట్‌కు ఒక రీడర్ మరియు ఒక రైటర్ రాస్తే సరిపోతుంది, మరియు సాధ్యమయ్యే అన్ని రకాల మార్పిడుల జతలకు ఆటోమేటిక్‌గా మద్దతు లభిస్తుంది.

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

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

సంక్షిప్తంగా, మోనాడ్‌లు క్రమానుగత పార్సింగ్ కోసం ఉపయోగించబడతాయి, దీనిలో మొదట ఒకటి, ఆపై మరొకటి వస్తుంది. ఉదాహరణకు, ఈ ఉదాహరణలో:

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

మొదట మీరు స్పేస్‌ను, ఆపై స్టేట్‌మెంట్‌ను లెక్కించాలి - ఇది కూడా పార్సర్ స్టేట్‌మెంట్ రకానికి చెందినది.

పార్సింగ్ విఫలమైన సందర్భంలో ఫాల్‌బ్యాక్ కోసం ప్రత్యామ్నాయ ఫంక్టర్‌లు ఉపయోగించబడతాయి. ఉదాహరణకు,

statement :: Parser Stmt
statement = parens statement <|> sequenceOfStmt

దీని అర్థం ఏమిటంటే, మీరు బ్రాకెట్లలోని వాక్యాన్ని చదవడానికి ప్రయత్నించాలి, లేదా వరుసగా అనేక వాక్యాలను చదవడానికి ప్రయత్నించాలి.

అప్లికేటివ్ ఫంక్టర్లు ప్రధానంగా మోనాడ్‌లకు షార్ట్‌కట్‌లుగా ఉపయోగించబడతాయి. ఉదాహరణకు, tok అనే ఫంక్షన్ ఒక టోకెన్‌ను చదువుతుందని అనుకుందాం (ఇది LaTeXReader నుండి వచ్చిన ఒక నిజమైన ఫంక్షన్). ఈ కలయికను పరిశీలిద్దాం.

const <$> tok <*> tok

ఇది వరుసగా రెండు టోకెన్‌లను చదివి, మొదటిదాన్ని తిరిగి ఇస్తుంది.

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

మా పనులు LaTeXReaderకు సంబంధించినవి. LaTeXలో ప్యాకేజీలను వ్రాయడానికి ఉపయోగపడే mbox మరియు hbox కమాండ్‌లకు మద్దతు ఇవ్వడం వాసిలీ పని. LaTeX డాక్యుమెంట్‌లలో ఎపిగ్రాఫ్‌లను ఫార్మాట్ చేయడానికి అనుమతించే ఎపిగ్రాఫ్ కమాండ్‌కు మద్దతు ఇచ్చే బాధ్యత ఎలిజవెటాది.

హ్యాట్రేస్

UNIX-లాంటి ఆపరేటింగ్ సిస్టమ్‌లు తరచుగా ptrace సిస్టమ్ కాల్‌ను అమలు చేస్తాయి. ఇది డీబగ్గింగ్ మరియు ప్రోగ్రామ్ పరిసరాలను అనుకరించడానికి ఉపయోగపడుతుంది, ఒక ప్రోగ్రామ్ చేసే సిస్టమ్ కాల్స్‌ను ట్రేస్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఉదాహరణకు, చాలా ఉపయోగకరమైన strace యుటిలిటీ అంతర్గతంగా ptraceను ఉపయోగిస్తుంది.

Hatrace అనేది Haskell లో ptrace కోసం ఒక ఇంటర్‌ఫేస్‌ను అందించే లైబ్రరీ. సమస్య ఏమిటంటే, ptrace చాలా సంక్లిష్టమైనది మరియు దానిని నేరుగా ఉపయోగించడం కష్టం, ముఖ్యంగా ఫంక్షనల్ భాషల నుండి.

Hatrace, strace లాగే పనిచేస్తుంది మరియు అవే విధమైన ఆర్గ్యుమెంట్లను స్వీకరిస్తుంది. ఇది ఒక లైబ్రరీ కూడా కావడం వల్ల, కేవలం ptrace కన్నా సరళమైన ఇంటర్‌ఫేస్‌ను అందిస్తుంది, ఈ విషయంలో ఇది straceకు భిన్నంగా ఉంటుంది.

Hatrace ఇప్పటికే GHC Haskell కంపైలర్‌లో ఒక తీవ్రమైన బగ్‌ను పట్టుకుంది: దానిని తప్పుడు సమయంలో నిలిపివేస్తే, అది తప్పు ఆబ్జెక్ట్ ఫైల్‌లను సృష్టిస్తుంది మరియు పునఃప్రారంభించినప్పుడు వాటిని తిరిగి కంపైల్ చేయడంలో విఫలమవుతుంది. సిస్టమ్ కాల్ స్క్రిప్టింగ్ ద్వారా మేము ఈ బగ్‌ను ఒకే రన్‌లో విశ్వసనీయంగా పునరుత్పత్తి చేయగలిగాము, అయితే యాదృచ్ఛికంగా నిలిపివేయడానికి సుమారు రెండు గంటల సమయం పట్టింది.

మేము లైబ్రరీకి సిస్టమ్ కాల్ ఇంటర్‌ఫేస్‌లను జోడించాము—ఎలిజవెటా brkను, మరియు వాసిలీ mmapను జోడించారు. మా కృషి వల్ల, లైబ్రరీని ఉపయోగించేటప్పుడు ఈ సిస్టమ్ కాల్స్ యొక్క ఆర్గ్యుమెంట్లను మరింత సులభంగా మరియు కచ్చితంగా ఉపయోగించడం సాధ్యమైంది.

మూలం: www.habr.com

DDoS రక్షణ, VPS VDS సర్వర్‌లతో సైట్‌ల కోసం నమ్మకమైన హోస్టింగ్‌ను కొనుగోలు చేయండి 🔥 DDoS రక్షణతో కూడిన నమ్మకమైన వెబ్‌సైట్ హోస్టింగ్, VPS VDS సర్వర్‌లను కొనండి | ProHoster