ఈ సంవత్సరం జూన్లో, చిన్న స్విస్ పట్టణం రాపర్స్విల్లో, ఒక ఈవెంట్ అని పిలువబడింది
О нас
ఈ కథనాన్ని నేషనల్ రీసెర్చ్ యూనివర్శిటీ హయ్యర్ స్కూల్ ఆఫ్ ఎకనామిక్స్ - సెయింట్ పీటర్స్బర్గ్లో “అప్లైడ్ మ్యాథమెటిక్స్ అండ్ ఇన్ఫర్మేటిక్స్” ప్రోగ్రామ్లోని ఇద్దరు 3వ సంవత్సరం విద్యార్థులు తయారు చేశారు: వాసిలీ అల్ఫెరోవ్ మరియు ఎలిజవేటా వాసిలెంకో. మా ఇద్దరికీ ఫంక్షనల్ ప్రోగ్రామింగ్ పట్ల మక్కువ యూనివర్సిటీ 2వ సంవత్సరంలో D. N. మోస్క్విన్ చేసిన ఉపన్యాసాల శ్రేణితో మొదలైంది. వాసిలీ ప్రస్తుతం గూగుల్ సమ్మర్ ఆఫ్ కోడ్ ప్రోగ్రామ్లో పాల్గొంటున్నాడు, అందులో అతను ప్రాజెక్ట్ బృందం మార్గదర్శకత్వంలో హాస్కెల్లో బీజగణిత గ్రాఫ్లను అమలు చేస్తున్నాడు.
ఈవెంట్ ఫార్మాట్
లక్ష్య ప్రేక్షకులు ఓపెన్ సోర్స్ ప్రాజెక్ట్ల యజమానులు, వారి అభివృద్ధిలో పాల్గొనాలనుకునే ప్రోగ్రామర్లు, ఫంక్షనల్ ప్రోగ్రామింగ్ పరిశోధకులు మరియు హాస్కెల్ పట్ల మక్కువ ఉన్న వ్యక్తులు. ఈ సంవత్సరం, ప్రపంచం నలుమూలల నుండి యాభైకి పైగా ఓపెన్ సోర్స్ హాస్కెల్ ప్రాజెక్ట్ల నుండి డెవలపర్లు తమ ఉత్పత్తుల గురించి మాట్లాడటానికి మరియు వారి అభివృద్ధిపై ఆసక్తిని కలిగించడానికి తాజా వ్యక్తులకు ఆసక్తి కలిగించడానికి - HSR Hochschule für Technik Rapperswil - వేదిక వద్ద సమావేశమయ్యారు.
Twitter నుండి ఫోటో
పథకం చాలా సులభం: మీరు మీ ప్రాజెక్ట్ గురించి కొన్ని ప్రతిపాదనలను ముందుగానే వ్రాసి, ఈవెంట్ పేజీలో మీ ప్రాజెక్ట్ గురించి సమాచారాన్ని పోస్ట్ చేసే నిర్వాహకులకు పంపాలి. అదనంగా, మొదటి రోజు, ప్రాజెక్ట్ల రచయితలు వారు ఏమి చేస్తున్నారో మరియు ఏమి చేయాలో వేదిక నుండి చాలా క్లుప్తంగా చెప్పడానికి ముప్పై సెకన్ల సమయం ఉంది. అప్పుడు ఆసక్తి ఉన్న వ్యక్తులు రచయితల కోసం వెతుకుతారు మరియు పనుల గురించి వివరంగా అడుగుతారు.
మాకు ఇంకా మా స్వంత ఓపెన్ ప్రాజెక్ట్లు లేవు, కానీ ఇప్పటికే ఉన్న వాటికి మేము నిజంగా సహకారం అందించాలనుకుంటున్నాము, కాబట్టి మేము రెగ్యులర్ పార్టిసిపెంట్లుగా నమోదు చేసుకున్నాము. మూడు రోజుల వ్యవధిలో, మేము రెండు గ్రూపుల డెవలపర్లతో కలిసి పనిచేశాము. కోడ్ మరియు లైవ్ కమ్యూనికేషన్ యొక్క ఉమ్మడి అధ్యయనం ప్రాజెక్ట్ రచయితలు మరియు కంట్రిబ్యూటర్ల మధ్య పరస్పర చర్యను చాలా ఉత్పాదకతను కలిగిస్తుందని తేలింది - ZuriHac వద్ద మేము మాకు కొత్తగా ఉన్న ప్రాంతాలను అర్థం చేసుకోగలిగాము మరియు రెండు పూర్తిగా భిన్నమైన బృందాలకు సహాయం చేయగలిగాము, ఒక్కొక్క పనిని పూర్తి చేసాము. ప్రాజెక్టుల.
విలువైన అభ్యాసంతో పాటు, ZuriHac వద్ద అనేక ఉపన్యాసాలు మరియు మాస్టర్ క్లాసులు కూడా ఇవ్వబడ్డాయి. మేము ప్రత్యేకంగా రెండు ఉపన్యాసాలు గుర్తుంచుకుంటాము. వాటిలో మొదటిది, న్యూకాజిల్ విశ్వవిద్యాలయానికి చెందిన ఆండ్రీ మోఖోవ్ సెలెక్టివ్ అప్లికేటివ్ ఫంక్టర్ల గురించి మాట్లాడాడు - అప్లికేటివ్ ఫంక్టర్లు మరియు మొనాడ్ల మధ్య ఇంటర్మీడియట్గా మారాల్సిన రకాలు. మరొక ఉపన్యాసంలో, హాస్కెల్ వ్యవస్థాపకులలో ఒకరైన సైమన్ పేటన్ జోన్స్, GHC కంపైలర్లో టైప్ ఇన్ఫరెన్స్ ఎలా పనిచేస్తుందనే దాని గురించి మాట్లాడారు.
సైమన్ పేటన్ జోన్స్ ద్వారా ఉపన్యాసం. Twitter నుండి ఫోటో
హ్యాకథాన్ సమయంలో జరిగే మాస్టర్ క్లాస్లను పాల్గొనేవారి శిక్షణ స్థాయిని బట్టి మూడు వర్గాలుగా విభజించారు. ప్రాజెక్టుల అభివృద్ధిలో చేరిన పాల్గొనేవారికి అందించే పనులు కూడా కష్టతరమైన స్థాయితో గుర్తించబడ్డాయి. ఫంక్షనల్ ప్రోగ్రామర్ల యొక్క చిన్నది కానీ స్నేహపూర్వక సంఘం తన ర్యాంకుల్లోకి కొత్తవారిని సంతోషంగా స్వాగతించింది. అయితే ఆండ్రీ మోఖోవ్ మరియు సైమన్ పేటన్ జోన్స్ యొక్క ఉపన్యాసాలను అర్థం చేసుకోవడానికి, మేము విశ్వవిద్యాలయంలో తీసుకున్న ఫంక్షనల్ ప్రోగ్రామింగ్ కోర్సు చాలా ఉపయోగకరంగా ఉంది.
ఈవెంట్ కోసం నమోదు సాధారణ పాల్గొనేవారు మరియు ప్రాజెక్ట్ రచయితలు ఇద్దరికీ ఉచితం. మేము జూన్ ప్రారంభంలో పాల్గొనడానికి దరఖాస్తులను సమర్పించాము, ఆ తర్వాత మేము వెయిటింగ్ లిస్ట్ నుండి ధృవీకరించబడిన పాల్గొనేవారి జాబితాకు త్వరగా బదిలీ చేయబడ్డాము.
మరియు ఇప్పుడు మేము పాల్గొన్న అభివృద్ధిలో ప్రాజెక్టుల గురించి మాట్లాడుతాము.
Pandoc
Pandoc ద్వారా మద్దతిచ్చే డాక్యుమెంట్ ఫార్మాట్ల జాబితా. సైట్లో మొత్తం గ్రాఫ్ కూడా ఉంది, కానీ ఈ చిత్రం కథనానికి సరిపోదు.
వాస్తవానికి, Pandoc ప్రతి జత ఫార్మాట్లకు ప్రత్యక్ష మార్పిడిని అందించదు. అటువంటి అనేక రకాల పరివర్తనలకు మద్దతు ఇవ్వడానికి, ప్రామాణిక నిర్మాణ పరిష్కారం ఉపయోగించబడుతుంది: మొదట, మొత్తం పత్రం ప్రత్యేక అంతర్గత ఇంటర్మీడియట్ ప్రాతినిధ్యంగా అనువదించబడుతుంది, ఆపై ఈ అంతర్గత ప్రాతినిధ్యం నుండి వేరే ఆకృతిలో పత్రం రూపొందించబడుతుంది. డెవలపర్లు అంతర్గత ప్రాతినిధ్యాన్ని "AST" అని పిలుస్తారు, ఇది అబ్స్ట్రాక్ట్ సింటాక్స్ ట్రీ, లేదా
$ cat example.html
<h1>Hello, World!</h1>
$ pandoc -f html -t native example.html
[Header 1 ("hello-world",[],[]) [Str "Hello,",Space,Str "World!"]]
హాస్కెల్తో కలిసి పనిచేసిన పాఠకులు ఈ చిన్న ఉదాహరణ నుండి పాండోక్ హాస్కెల్లో వ్రాయబడిందని ఇప్పటికే ఊహించవచ్చు: ఈ కమాండ్ యొక్క అవుట్పుట్ అనేది పాండోక్ యొక్క అంతర్గత నిర్మాణాల యొక్క స్ట్రింగ్ ప్రాతినిధ్యం, ఇది సాధారణంగా ఎలా జరుగుతుందో అదే విధంగా రూపొందించబడింది. హాస్కెల్లో. ఉదాహరణకు, ప్రామాణిక లైబ్రరీలో.
కాబట్టి, ఇక్కడ మీరు అంతర్గత ప్రాతినిధ్యం పునరావృత నిర్మాణం అని చూడవచ్చు, ప్రతి అంతర్గత నోడ్లో జాబితా ఉంటుంది. ఉదాహరణకు, ఎగువ స్థాయిలో ఒక మూలకం యొక్క జాబితా ఉంది - "హలో-వరల్డ్",[],[] లక్షణాలతో మొదటి స్థాయి హెడర్. ఈ హెడర్లో “హలో” స్ట్రింగ్ జాబితా, దాని తర్వాత స్పేస్ మరియు స్ట్రింగ్ “వరల్డ్!” దాగి ఉంటుంది.
మీరు చూడగలిగినట్లుగా, అంతర్గత ప్రాతినిధ్యం HTML నుండి చాలా భిన్నంగా లేదు. ఇది ప్రతి అంతర్గత నోడ్ దాని వారసుల ఫార్మాటింగ్ గురించి కొంత సమాచారాన్ని అందించే చెట్టు, మరియు ఆకులు పత్రం యొక్క వాస్తవ విషయాలను కలిగి ఉంటాయి.
మేము అమలు స్థాయికి దిగితే, మొత్తం పత్రం యొక్క డేటా రకం ఇలా నిర్వచించబడుతుంది:
data Pandoc = Pandoc Meta [Block]
ఇక్కడ బ్లాక్ అనేది ఖచ్చితంగా పైన పేర్కొన్న అంతర్గత శీర్షాలు మరియు మెటా అనేది టైటిల్, సృష్టి తేదీ, రచయితలు వంటి పత్రం గురించి మెటైన్ఫర్మేషన్ - ఇది వివిధ ఫార్మాట్లకు భిన్నంగా ఉంటుంది మరియు పాండోక్ వీలైతే, ఫార్మాట్ నుండి దీనికి అనువదించేటప్పుడు అటువంటి సమాచారాన్ని భద్రపరచడానికి ప్రయత్నిస్తుంది. ఫార్మాట్.
బ్లాక్ రకం యొక్క దాదాపు అన్ని కన్స్ట్రక్టర్లు - ఉదాహరణకు, హెడర్ లేదా పారా (పేరా) - లక్షణాలను మరియు దిగువ-స్థాయి శీర్షాల జాబితాను వాదనలుగా తీసుకోండి - ఇన్లైన్, నియమం వలె. ఉదాహరణకు, స్పేస్ లేదా Str అనేది ఇన్లైన్ రకానికి చెందిన కన్స్ట్రక్టర్లు, మరియు HTML ట్యాగ్ కూడా దాని స్వంత ప్రత్యేక ఇన్లైన్గా మారుతుంది. ఈ రకాలకు పూర్తి నిర్వచనాన్ని అందించడంలో మాకు ఎటువంటి పాయింట్ కనిపించదు, కానీ అది ఇక్కడ కనుగొనబడుతుందని గమనించండి
ఆసక్తికరంగా, పాండోక్ రకం మోనోయిడ్. దీనర్థం ఒక రకమైన ఖాళీ పత్రం ఉందని మరియు పత్రాలను ఒకదానితో ఒకటి పేర్చవచ్చు. రీడర్లను వ్రాసేటప్పుడు ఇది ఉపయోగించడానికి సౌకర్యంగా ఉంటుంది - మీరు ఏకపక్ష లాజిక్ని ఉపయోగించి పత్రాన్ని భాగాలుగా విభజించవచ్చు, ఒక్కొక్కటి విడిగా అన్వయించవచ్చు, ఆపై అన్నింటినీ కలిపి ఒక పత్రంలో ఉంచవచ్చు. ఈ సందర్భంలో, డాక్యుమెంట్లోని అన్ని భాగాల నుండి మెటైన్ఫర్మేషన్ ఒకేసారి సేకరించబడుతుంది.
LaTeX నుండి HTMLకి మార్చేటప్పుడు, ముందుగా LaTeXReader అనే ప్రత్యేక మాడ్యూల్ ఇన్పుట్ డాక్యుమెంట్ను ASTగా మారుస్తుంది, తర్వాత HTMLWriter అనే మరొక మాడ్యూల్ ASTని HTMLకి మారుస్తుంది. ఈ ఆర్కిటెక్చర్కు ధన్యవాదాలు, చతురస్రాకార సంఖ్యలో మార్పిడులను వ్రాయవలసిన అవసరం లేదు - ప్రతి కొత్త ఫార్మాట్కు రీడర్ మరియు రైటర్ అని వ్రాయడం సరిపోతుంది మరియు సాధ్యమయ్యే అన్ని జతల మార్పిడులు స్వయంచాలకంగా మద్దతు ఇవ్వబడతాయి.
సాఫ్ట్వేర్ ఆర్కిటెక్చర్ రంగంలో నిపుణులచే దీర్ఘకాలంగా అంచనా వేయబడిన అటువంటి ఆర్కిటెక్చర్ కూడా దాని లోపాలను కలిగి ఉందని స్పష్టమవుతుంది. సింటాక్స్ ట్రీలో మార్పులు చేయడానికి అయ్యే ఖర్చు చాలా ముఖ్యమైనది. మార్పు తగినంత తీవ్రంగా ఉంటే, మీరు అన్ని రీడర్లు మరియు రైటర్లలో కోడ్ను మార్చవలసి ఉంటుంది. ఉదాహరణకు, Pandoc డెవలపర్లు ఎదుర్కొంటున్న సవాళ్లలో సంక్లిష్టమైన పట్టిక ఫార్మాట్లకు మద్దతు ఇవ్వడం ఒకటి. ఇప్పుడు Pandoc ప్రతి సెల్లో హెడర్, నిలువు వరుసలు మరియు విలువతో చాలా సులభమైన పట్టికలను మాత్రమే సృష్టించగలదు. ఉదాహరణకు, HTMLలోని colspan లక్షణం విస్మరించబడుతుంది. ఈ ప్రవర్తనకు కారణాలలో ఒకటి అన్ని లేదా కనీసం అనేక ఫార్మాట్లలో పట్టికలను సూచించడానికి ఏకీకృత పథకం లేకపోవడం - తదనుగుణంగా, అంతర్గత ప్రాతినిధ్యంలో పట్టికలు ఏ రూపంలో నిల్వ చేయబడాలి అనేది అస్పష్టంగా ఉంది. కానీ నిర్దిష్ట వీక్షణను ఎంచుకున్న తర్వాత కూడా, మీరు పట్టికలతో పని చేయడానికి మద్దతు ఇచ్చే అన్ని రీడర్లు మరియు రైటర్లను ఖచ్చితంగా మార్చాలి.
ఫంక్షనల్ ప్రోగ్రామింగ్ పట్ల రచయితల గొప్ప ప్రేమ కారణంగా మాత్రమే హాస్కెల్ భాష ఎంపిక చేయబడింది. Haskell దాని విస్తృతమైన టెక్స్ట్ ప్రాసెసింగ్ సామర్థ్యాలకు ప్రసిద్ధి చెందింది. ఒక ఉదాహరణ లైబ్రరీ
క్లుప్తంగా వివరించబడింది, మొనాడ్లు సీక్వెన్షియల్ పార్సింగ్ కోసం ఉపయోగించబడతాయి, ఒక విషయం మొదట వచ్చినప్పుడు, ఆపై మరొకటి. ఉదాహరణకు, ఈ ఉదాహరణలో:
whileParser :: Parser Stmt
whileParser = whiteSpace >> statement
మొదట మీరు ఖాళీని లెక్కించాలి, ఆపై స్టేట్మెంట్ - ఇది పార్సర్ Stmt రకాన్ని కూడా కలిగి ఉంటుంది.
అన్వయించడం విఫలమైతే రోల్బ్యాక్ చేయడానికి ప్రత్యామ్నాయ ఫంక్టర్లు ఉపయోగించబడతాయి. ఉదాహరణకి,
statement :: Parser Stmt
statement = parens statement <|> sequenceOfStmt
అంటే మీరు స్టేట్మెంట్ను బ్రాకెట్లలో చదవడానికి ప్రయత్నించాలి లేదా అనేక స్టేట్మెంట్లను వరుసగా చదవడానికి ప్రయత్నించాలి.
అప్లికేటివ్ ఫంక్టర్లు ప్రధానంగా మొనాడ్ల కోసం షార్ట్కట్లుగా ఉపయోగించబడతాయి. ఉదాహరణకు, టోక్ ఫంక్షన్ కొంత టోకెన్ను చదవనివ్వండి (ఇది LaTeXReader నుండి నిజమైన ఫంక్షన్). మరి ఈ కాంబినేషన్ ఏంటో చూద్దాం
const <$> tok <*> tok
ఇది వరుసగా రెండు టోకెన్లను చదివి మొదటిదాన్ని తిరిగి ఇస్తుంది.
ఈ తరగతులన్నింటికీ, హాస్కెల్ అందమైన సింబాలిక్ ఆపరేటర్లను కలిగి ఉంది, ఇది రీడర్ ప్రోగ్రామింగ్ను ASCII ఆర్ట్ లాగా చేస్తుంది. ఈ అద్భుతమైన కోడ్ను ఆరాధించండి.
మా పనులు LaTeXReaderకి సంబంధించినవి. LaTeXలో ప్యాకేజీలను వ్రాయడానికి ఉపయోగపడే mbox మరియు hbox ఆదేశాలకు మద్దతు ఇవ్వడం Vasily యొక్క పని. ఎలిజబెత్ ఎపిగ్రాఫ్ కమాండ్కు మద్దతు ఇవ్వడానికి బాధ్యత వహిస్తుంది, ఇది LaTeX డాక్యుమెంట్లలో ఎపిగ్రాఫ్లను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది.
హేట్రేస్
UNIX-వంటి ఆపరేటింగ్ సిస్టమ్లు తరచుగా ptrace సిస్టమ్ కాల్ని అమలు చేస్తాయి. ప్రోగ్రామ్ పరిసరాలను డీబగ్గింగ్ చేయడంలో మరియు అనుకరించడంలో ఇది ఉపయోగపడుతుంది, ప్రోగ్రామ్ చేసే సిస్టమ్ కాల్లను కనుగొనడానికి మిమ్మల్ని అనుమతిస్తుంది. ఉదాహరణకు, చాలా ఉపయోగకరమైన స్ట్రేస్ యుటిలిటీ అంతర్గతంగా ptraceని ఉపయోగిస్తుంది.
Hatrace అనేది హాస్కెల్లో ptrace చేయడానికి ఇంటర్ఫేస్ను అందించే లైబ్రరీ. వాస్తవం ఏమిటంటే ptrace చాలా అధునాతనమైనది మరియు దీన్ని నేరుగా ఉపయోగించడం చాలా కష్టం, ముఖ్యంగా ఫంక్షనల్ భాషల నుండి.
Hatrace స్టార్టప్లో స్ట్రేస్ లాగా నడుస్తుంది మరియు ఇలాంటి వాదనలను అంగీకరిస్తుంది. ఇది కేవలం ptrace కంటే సరళమైన ఇంటర్ఫేస్ను అందించే లైబ్రరీ కాబట్టి ఇది స్ట్రేస్కు భిన్నంగా ఉంటుంది.
హ్యాట్రేస్ సహాయంతో, మేము ఇప్పటికే GHC హాస్కెల్ కంపైలర్లో ఒక అసహ్యకరమైన బగ్ని పట్టుకున్నాము - తప్పు సమయంలో చంపబడినప్పుడు, ఇది తప్పు ఆబ్జెక్ట్ ఫైల్లను ఉత్పత్తి చేస్తుంది మరియు పునఃప్రారంభించినప్పుడు వాటిని మళ్లీ కంపైల్ చేయదు. సిస్టమ్ కాల్ల ద్వారా స్క్రిప్టింగ్ ఒక పరుగులో లోపాన్ని విశ్వసనీయంగా పునరుత్పత్తి చేయడం సాధ్యపడింది, అయితే యాదృచ్ఛిక హత్యలు దాదాపు రెండు గంటల్లో లోపాన్ని పునరుత్పత్తి చేస్తాయి.
మేము లైబ్రరీకి సిస్టమ్ కాల్ ఇంటర్ఫేస్లను జోడించాము - ఎలిజవేటా brkని జోడించాము మరియు వాసిలీ mmapని జోడించాము. మా పని ఫలితాల ఆధారంగా, లైబ్రరీని ఉపయోగిస్తున్నప్పుడు ఈ సిస్టమ్ కాల్ల వాదనలను మరింత సరళంగా మరియు ఖచ్చితంగా ఉపయోగించడం సాధ్యమవుతుంది.
మూలం: www.habr.com