ZuriHac: ተግባራዊ ፕሮግራሚንግ በመለማመድ

በዚህ አመት ሰኔ ወር ውስጥ በትናንሽ የስዊስ ከተማ ራፕስዊል ውስጥ አንድ ክስተት ተጠርቷል ZuriHac. በዚህ ጊዜ ከጀማሪዎች እስከ የቋንቋው መስራች አባቶች ድረስ ከአምስት መቶ በላይ የሃስኬል አፍቃሪዎችን ሰብስቧል። ምንም እንኳን አዘጋጆቹ ይህንን ክስተት hackathon ብለው ቢጠሩትም በጥንታዊ አገባቡ ግን ኮንፈረንስ ወይም ሃካቶን አይደለም። ቅርጸቱ ከባህላዊ ፕሮግራመሮች የተለየ ነው። ስለ ዙሪሃክ በእድል ተምረናል ፣ በእሱ ውስጥ ተሳትፈናል ፣ እና አሁን ስለ ያልተለመደው ግኝት መንገር ግዴታችን እንደሆነ እንቆጥራለን!

ZuriHac: ተግባራዊ ፕሮግራሚንግ በመለማመድ

ስለ እኛ

ይህ ጽሑፍ የተዘጋጀው በብሔራዊ ጥናትና ምርምር ዩኒቨርሲቲ ከፍተኛ የኢኮኖሚክስ ትምህርት ቤት - በሴንት ፒተርስበርግ-Vasily Alferov እና Elizaveta Vasilenko የ"ተግባራዊ ሂሳብ እና ኢንፎርማቲክስ" መርሃ ግብር በሁለት የ 3 ኛ ዓመት ተማሪዎች ነው። ለሁለታችንም የተግባር ፕሮግራሚንግ ፍቅር የጀመረው በ 2 ኛው የዩኒቨርሲቲው ዓመት በዲኤን ሞስኮቪን ተከታታይ ትምህርቶች ነው። ቫሲሊ በአሁኑ ጊዜ በ Google Summer of Code ፕሮግራም ውስጥ እየተሳተፈ ነው, በዚህ ውስጥ በፕሮጀክቱ ቡድን መሪነት በሃስኬል ውስጥ የአልጀብራ ግራፎችን በመተግበር ላይ ይገኛል. አልጋ. ኤሊዛቬታ ያገኘችውን የተግባር ፕሮግራሚንግ ክህሎት ለፀረ-ውህደት ስልተ-ቀመር ትግበራ በተዘጋጀው የኮርስ ስራ ከቀጣይ የአይነት ንድፈ ሃሳብ ጋር ተተግብራለች።

የክስተት ቅርጸት

የታለመው ታዳሚ የክፍት ምንጭ ፕሮጄክቶች ባለቤቶች፣ በእድገታቸው ውስጥ መሳተፍ የሚፈልጉ ፕሮግራመሮች፣ ተግባራዊ ፕሮግራሚንግ ተመራማሪዎች እና በቀላሉ ስለ Haskell የሚወዱ ናቸው። በዚህ አመት ከመላው አለም የተውጣጡ ከሃምሳ በላይ የክፍት ምንጭ የሃስኬል ፕሮጄክቶች ገንቢዎች በስፍራው ተሰበሰቡ - HSR Hochschule für Technik Rapperswil - ስለ ምርቶቻቸው ለመነጋገር እና አዳዲስ ሰዎች በእድገታቸው ላይ ፍላጎት እንዲያድርባቸው ለማድረግ።

ZuriHac: ተግባራዊ ፕሮግራሚንግ በመለማመድ

ፎቶ ከTwitter ZuriHac

መርሃግብሩ በጣም ቀላል ነው-ስለ ፕሮጀክትዎ ጥቂት ሀሳቦችን አስቀድመው መጻፍ እና ወደ አዘጋጆቹ መላክ ያስፈልግዎታል, እነሱም ስለ ፕሮጀክትዎ በዝግጅቱ ገጽ ላይ መረጃ ይለጠፋሉ. በተጨማሪም, በመጀመሪያው ቀን, የፕሮጀክቶቹ ደራሲዎች ምን እየሰሩ እንደሆነ እና ምን መደረግ እንዳለበት ከመድረክ በጣም በአጭሩ ለመናገር ሰላሳ ሰከንድ አላቸው. ከዚያም ፍላጎት ያላቸው ሰዎች ደራሲዎቹን ይፈልጉ እና ስለ ተግባሮቹ በዝርዝር ይጠይቁ.

እስካሁን የራሳችን ክፍት ፕሮጀክቶች የሉንም፣ ነገር ግን ለነባር መዋጮ ማድረግ እንፈልጋለን፣ ስለዚህ እንደ መደበኛ ተሳታፊዎች ተመዝግበናል። በሶስት ቀናት ውስጥ, ከሁለት የገንቢዎች ቡድን ጋር ሠርተናል. የኮድ እና የቀጥታ ግንኙነት የጋራ ጥናት በፕሮጀክት ደራሲዎች እና አስተዋፅዖ አድራጊዎች መካከል ያለውን መስተጋብር በጣም ውጤታማ ያደርገዋል - በ ZuriHac ለእኛ አዲስ የሆኑትን አካባቢዎች ለመረዳት ችለናል እና ሁለት ሙሉ ለሙሉ የተለያዩ ቡድኖችን መርዳት ችለናል ፣ በእያንዳንዱ አንድ ተግባር አጠናቀቅን። የፕሮጀክቶቹ.

ከዋጋ ልምምድ በተጨማሪ በርካታ ንግግሮች እና የማስተርስ ክፍሎች በ ZuriHac ተሰጥተዋል። በተለይ ሁለት ትምህርቶችን እናስታውሳለን። በመጀመሪያዎቹ የኒውካስል ዩኒቨርሲቲ አንድሬ ሞክሆቭ ስለ ተመረጡ አፕሊኬቲቭ ፈንገሶች ተናገሩ - በአፕሊኬቲቭ ፈንገሶች እና ሞናዶች መካከል መካከለኛ መሆን ያለባቸው ዓይነቶች ክፍል። በሌላ ንግግር፣ የ Haskell መስራቾች አንዱ የሆነው ሲሞን ፔይቶን ጆንስ፣ በጂኤችሲ ኮምፕሌተር ውስጥ የአይነት ኢንቬንሽን እንዴት እንደሚሰራ ተናግሯል።

ZuriHac: ተግባራዊ ፕሮግራሚንግ በመለማመድ

በሲሞን ፔይቶን ጆንስ ትምህርት. ፎቶ ከTwitter ZuriHac

በ hackathon ወቅት የተካሄዱት የማስተርስ ክፍሎች እንደ ተሳታፊዎች የስልጠና ደረጃ በሶስት ምድቦች ተከፍለዋል. የፕሮጀክቶችን ልማት ለተቀላቀሉ ተሳታፊዎች የሚቀርቡት ተግባራትም በችግር ደረጃ የተቀመጡ ነበሩ። ትንሹ ግን ተግባቢ የሆነው የተግባር ፕሮግራመሮች ማህበረሰብ አዲስ መጤዎችን በደስታ ይቀበላል። የ Andrei Mokhov እና Simon Peyton Jones ንግግሮችን ለመረዳት ግን በዩኒቨርሲቲ ውስጥ የወሰድነው ተግባራዊ ፕሮግራሚንግ ትምህርት በጣም ጠቃሚ ነበር።

የዝግጅቱ ምዝገባ ለሁለቱም መደበኛ ተሳታፊዎች እና የፕሮጀክት ደራሲዎች ነፃ ነው። በጁን መጀመሪያ ላይ ለመሳተፍ ማመልከቻዎችን አስገብተናል, ከዚያ በኋላ በፍጥነት ከተጠባባቂ ዝርዝር ውስጥ ወደ ተረጋገጡ ተሳታፊዎች ዝርዝር ተዛወርን.

እና አሁን ስለተሳተፍንባቸው የልማት ፕሮጀክቶች እንነጋገራለን.

Pandoc

Pandoc የጽሑፍ ሰነዶችን ሁሉን አቀፍ መለወጫ ነው, በእውነቱ, ከማንኛውም ቅርጸት ወደ ማንኛውም. ለምሳሌ፣ ከዶክክስ ወደ ፒዲኤፍ፣ ወይም ከማርከዳው እስከ ሚዲያዊኪ። ደራሲው ጆን ማክፋርሌን በካሊፎርኒያ፣ በርክሌይ ዩኒቨርሲቲ የፍልስፍና ፕሮፌሰር ናቸው። በአጠቃላይ ፓንዶክ በጣም ዝነኛ ነው፣ እና አንዳንድ ጓደኞቻችን ፓንዶክ በሃስኬል መፃፉን ሲያውቁ ተገረሙ።

ZuriHac: ተግባራዊ ፕሮግራሚንግ በመለማመድ

በ 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!"]]

ከ Haskell ጋር ቢያንስ በትንሹ የሰሩ አንባቢዎች ፓንዶክ በ Haskell ውስጥ እንደተጻፈ ከዚህ ትንሽ ምሳሌ መገመት ይችላሉ፡ የዚህ ትዕዛዝ ውፅዓት የ Pandoc ውስጣዊ መዋቅሮች ሕብረቁምፊ ውክልና ነው፣ ይህም በተለምዶ እንዴት እንደሚከናወን በሚመስል መልኩ የተፈጠረ ነው። በ Haskell ለምሳሌ በመደበኛ ቤተ-መጽሐፍት ውስጥ።

ስለዚህ, እዚህ ውስጥ የውስጥ ውክልና በእያንዳንዱ የውስጥ መስቀለኛ መንገድ ውስጥ ተደጋግሞ የተሠራ መዋቅር መሆኑን ማየት ይችላሉ. ለምሳሌ፣ በላይኛው ደረጃ ላይ የአንድ አካል ዝርዝር አለ - የመጀመሪያው ደረጃ ራስጌ “ሄሎ-አለም”፣[]፣[] ባህሪያት ያለው። በዚህ ራስጌ ውስጥ የተደበቀው የ"ሄሎ" ሕብረቁምፊ ዝርዝር አለ፣ ከዚያም ክፍተት እና "አለም!"

እንደሚመለከቱት, ውስጣዊ ውክልና ከኤችቲኤምኤል ብዙም የተለየ አይደለም. እያንዳንዱ የውስጥ መስቀለኛ መንገድ ስለ ዘሮቹ አጻጻፍ የተወሰነ መረጃ የሚሰጥበት ዛፍ ሲሆን ቅጠሎቹም የሰነዱን ትክክለኛ ይዘት ይይዛሉ።

ወደ ትግበራው ደረጃ ከወረድን የጠቅላላው ሰነድ የውሂብ አይነት እንደሚከተለው ይገለጻል.

data Pandoc = Pandoc Meta [Block]

እዚህ ብሎክ በትክክል ከላይ የተጠቀሱት ውስጣዊ ጫፎች ነው, እና ሜታ ስለ ሰነዱ ሜታኢንፎርሜሽን ነው, ለምሳሌ ርዕስ, የፍጥረት ቀን, ደራሲዎች - ይህ ለተለያዩ ቅርፀቶች የተለየ ነው, እና Pandoc ከተቻለ ከቅርጸት ወደ ሲተረጎም እንዲህ ያለውን መረጃ ለማቆየት ይሞክራል. ቅርጸት.

ሁሉም ማለት ይቻላል የብሎክ ዓይነት ገንቢዎች - ለምሳሌ ፣ ራስጌ ወይም አንቀጽ (አንቀጽ) - ባህሪዎችን እና ዝቅተኛ-ደረጃ ጫፎችን ዝርዝር እንደ ክርክሮች ይውሰዱ - መስመር ፣ እንደ አንድ ደንብ። ለምሳሌ፣ Space ወይም Str የኢንላይን አይነት ገንቢዎች ናቸው፣ እና የኤችቲኤምኤል መለያው ወደ ራሱ ልዩ ኢንላይን ይቀየራል። የእነዚህን ዓይነቶች ሙሉ ፍቺ መስጠት ምንም ፋይዳ አይታየንም, ነገር ግን እዚህ ሊገኝ እንደሚችል ልብ ይበሉ እዚህ.

የሚገርመው፣ የፓንዶክ ዓይነት ሞኖይድ ነው። ይህ ማለት አንድ ዓይነት ባዶ ሰነድ አለ, እና ሰነዶች አንድ ላይ ሊደረደሩ ይችላሉ. አንባቢዎችን በሚጽፉበት ጊዜ ለመጠቀም ይህ ምቹ ነው - የዘፈቀደ አመክንዮ በመጠቀም ሰነድን ወደ ክፍሎች መከፋፈል ፣ እያንዳንዱን ለየብቻ መተንተን እና ሁሉንም ነገር በአንድ ሰነድ ውስጥ ማስገባት ይችላሉ ። በዚህ ሁኔታ ሜታኢንሜሽን ከሁሉም የሰነዱ ክፍሎች በአንድ ጊዜ ይሰበሰባል.

ከላቴኤክስ ወደ ኤችቲኤምኤል ሲቀይሩ በመጀመሪያ LaTeXReader የሚባል ልዩ ሞጁል የግቤት ሰነዱን ወደ AST ይለውጠዋል፣ በመቀጠል HTMLWriter የሚባል ሌላ ሞጁል ASTን ወደ HTML ይለውጠዋል። ለዚህ አርክቴክቸር ምስጋና ይግባውና ባለአራት የልወጣዎች ቁጥር መጻፍ አያስፈልግም - ለእያንዳንዱ አዲስ ቅርጸት አንባቢ እና ጸሐፊ መጻፍ በቂ ነው, እና ሁሉም ሊሆኑ የሚችሉ ጥንድ ልወጣዎች በራስ-ሰር ይደገፋሉ.

በሶፍትዌር አርክቴክቸር ዘርፍ በባለሙያዎች ለረጅም ጊዜ ሲተነብይ እንዲህ ያለው አርክቴክቸር የራሱ ድክመቶች እንዳሉት ግልጽ ነው። በጣም ጠቃሚው በአገባብ ዛፍ ላይ ለውጦችን የማድረግ ዋጋ ነው. ለውጡ በጣም ከባድ ከሆነ በሁሉም አንባቢዎች እና ጸሃፊዎች ውስጥ ያለውን ኮድ መቀየር አለብዎት. ለምሳሌ፣ Pandoc ገንቢዎች ከሚገጥሟቸው ፈተናዎች አንዱ ውስብስብ የጠረጴዛ ቅርጸቶችን መደገፍ ነው። አሁን Pandoc በጣም ቀላል ሠንጠረዦችን ብቻ መፍጠር ይችላል፣ አርዕስት፣ አምዶች እና በእያንዳንዱ ሕዋስ ውስጥ ያለው እሴት። ለምሳሌ፣ በኤችቲኤምኤል ውስጥ ያለው የኮልስፓን ባህሪ በቀላሉ ችላ ይባላል። ለዚህ ባህሪ አንዱ ምክንያት ጠረጴዛዎችን በሁሉም ወይም ቢያንስ ብዙ ቅርፀቶች ለመወከል የተዋሃደ እቅድ አለመኖር ነው - በዚህ መሠረት ጠረጴዛዎቹ በምን ዓይነት መልክ መቀመጥ እንዳለባቸው ግልጽ አይደለም ውስጣዊ ውክልና . ነገር ግን አንድ የተወሰነ እይታ ከመረጡ በኋላ, ከጠረጴዛዎች ጋር አብሮ መስራትን የሚደግፉ ሁሉንም አንባቢዎች እና ጸሃፊዎችን ሙሉ ለሙሉ መቀየር ያስፈልግዎታል.

የ Haskell ቋንቋ የተመረጠው ደራሲዎቹ ለተግባራዊ ፕሮግራሞች ባላቸው ታላቅ ፍቅር ምክንያት ብቻ አይደለም። Haskell በሰፊው የፅሁፍ ሂደት ችሎታዎች ይታወቃል። አንድ ምሳሌ ቤተ-መጽሐፍት ነው። PASC የተግባር ፕሮግራሚንግ ጽንሰ-ሀሳቦችን በንቃት የሚጠቀም ቤተ-መጽሐፍት ነው - ሞኖይድ ፣ ሞናዶች ፣ አፕሊኬቲቭ እና አማራጭ ፈንገሶች - የዘፈቀደ ትንታኔዎችን ለመፃፍ። የፓርሴክ ሙሉ ኃይል በ ውስጥ ሊታይ ይችላል። ለምሳሌ ከ HaskellWiki፣ የአንድ ቀላል የግድ የፕሮግራም አወጣጥ ቋንቋ የተሟላ ተንታኝ ከሚተነተንበት። በእርግጥ ፓርሴክ በፓንዶክ ውስጥ በንቃት ጥቅም ላይ ይውላል.

በአጭሩ ተብራርቷል፣ ሞናዶች አንድ ነገር መጀመሪያ ሲመጣ እና ከዚያ ሌላ ለመተንተን ያገለግላሉ። ለምሳሌ፣ በዚህ ምሳሌ፡-

whileParser :: Parser Stmt
whileParser = whiteSpace >> statement

በመጀመሪያ ቦታውን መቁጠር ያስፈልግዎታል, እና መግለጫው - በተጨማሪም የፓርሰር ስቲም ዓይነት አለው.

ተለዋጭ ፈንገሶች መተንተን ካልተሳካ ወደ ኋላ ለመመለስ ያገለግላሉ። ለምሳሌ,

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

መግለጫውን በቅንፍ ለማንበብ መሞከር አለብህ ወይም ብዙ መግለጫዎችን በቅደም ተከተል ለማንበብ መሞከር አለብህ ማለት ነው።

አፕሊኬቲቭ ፈንገሶች በዋናነት ለሞናዶች አቋራጭ ሆነው ያገለግላሉ። ለምሳሌ፣ የቶክ ተግባር አንዳንድ ማስመሰያዎችን እንዲያነብ ይፍቀዱ (ይህ ከLaTeXReader እውነተኛ ተግባር ነው።) ይህን ጥምረት እንመልከተው

const <$> tok <*> tok

በተከታታይ ሁለት ምልክቶችን ያነብና የመጀመሪያውን ይመልሳል.

ለእነዚህ ሁሉ ክፍሎች፣ Haskell የሚያማምሩ ተምሳሌታዊ ኦፕሬተሮች አሉት፣ ይህም የ Reader ፕሮግራሚንግ እንደ ASCII ጥበብ ይመስላል። ይህን ድንቅ ኮድ ብቻ ያደንቁ።

ተግባሮቻችን ከLaTeXReader ጋር የተያያዙ ነበሩ። የቫሲሊ ተግባር በLaTeX ውስጥ ጥቅሎችን ለመጻፍ የሚጠቅመውን የ mbox እና hbox ትዕዛዞችን መደገፍ ነበር። ኤልዛቤት በLaTeX ሰነዶች ውስጥ ኢፒግራፍ እንዲፈጥሩ የሚያስችልዎትን የኤፒግራፍ ትዕዛዝ የመደገፍ ሃላፊነት ነበረባት።

Hatrace

UNIX የሚመስሉ ኦፕሬቲንግ ሲስተሞች ብዙውን ጊዜ የፕትሬስ ሲስተም ጥሪን ይተገብራሉ። የፕሮግራም አከባቢዎችን በማረም እና በማስመሰል ጠቃሚ ነው, ይህም ፕሮግራሙ የሚያደርጋቸውን የስርዓት ጥሪዎች ለመከታተል ያስችልዎታል. ለምሳሌ፣ በጣም ጠቃሚው የስትራክ መገልገያ ከውስጥ ውስጥ ptraceን ይጠቀማል።

Hatrace በ Haskell ውስጥ ለመከታተል በይነገጽ የሚሰጥ ቤተ-መጽሐፍት ነው። እውነታው ግን ptrace ራሱ በጣም የተወሳሰበ ነው እና እሱን በቀጥታ ለመጠቀም በተለይም ከተግባራዊ ቋንቋዎች በጣም ከባድ ነው።

Hatrace ጅምር ላይ እንደ ስታርች ይሰራል እና ተመሳሳይ ክርክሮችን ይቀበላል። ከስትሬስ የሚለየው ከፕላስ ብቻ ሳይሆን ቀለል ያለ በይነገጽ የሚሰጥ ቤተ-መጽሐፍት በመሆኑ ነው።

በ hatrace እገዛ በ GHC Haskell ማቀናበሪያ ውስጥ አንድ ደስ የማይል ስህተት ያዝናል - በተሳሳተ ቅጽበት ሲገደል የተሳሳቱ የቁስ ፋይሎችን ያመነጫል እና እንደገና ሲጀመር አይሰበስብም። በስርዓት ጥሪዎች ስክሪፕት መፃፍ ስህተቱን በአስተማማኝ ሁኔታ በአንድ ጊዜ ለማባዛት ተችሏል፣ በዘፈቀደ መግደል ግን ስህተቱን በሁለት ሰአታት ውስጥ እንደገና እንዲሰራጭ አድርጎታል።

ወደ ቤተ-መጽሐፍት የስርዓት ጥሪ በይነገጾችን ጨምረናል - ኤሊዛቬታ brk ጨምረናል፣ እና ቫሲሊ ኤምኤምፕን አክለዋል። በስራችን ውጤቶች ላይ በመመስረት, ቤተ-መጽሐፍትን ሲጠቀሙ የእነዚህን የስርዓት ጥሪዎች ክርክሮች በበለጠ ቀላል እና በትክክል መጠቀም ይቻላል.

ምንጭ: hab.com

አስተያየት ያክሉ