Të paraqitura gjuhë programuese Solod (So), i cili ofron një nëngrup të gjuhës Go, i transkompiluara në një përfaqësim në gjuhën C (C11), të përshtatshëm për ndërtimin nga kompilerët GCC, Clang dhe zig cc. Dallohet nga Go për përdorimin e menaxhimit manual të memories, që funksionon pa përdorimin e mbledhësit të plehrave, pa alokim automatik të memories dhe pa llogaritjen e referencave. Transpaileri për Solod është shkruar në gjuhën Go dhe distribuohet nën licencën BSD. Mbështetet puna në Linux, macOS dhe Windows.
Gjuha mbështet struktura, metoda, ndërfaqe, slice, kthim të funksioneve me disa vlera (p.sh., rezultat + kod gabimi), gjenerikët dhe thirrje të vonuara (defer). Me qëllim lehtësimi, gjuha nuk mbështet kanale, korutina dhe mbyllje. Kur zhvilloni në gjuhën Solod, mund të përdoren serverë LSP ekzistues, linters, mjedise të integruara zhvillimi dhe redaktorë kodi që mbështesin gjuhën Go, si dhe mjetin 'go test'.
Kodi i shkruar në Solod mund të integrohet me aplikacione në gjuhën C (gjuhë C mund të thërrasë funksione në Solod dhe anasjelltas) dhe nuk kërkon bashkëngjitje runtime. Disa fusha kryesore të aplikimit përfshijnë programimin sistemor me mundësi të ngjashme me C, por me një sintaksë në stilin Go dhe me kontrollin e tipeve. Solod gjithashtu mund të përdoret për portimin e biblioteka Go për t'u përdorur në projekte në C. Biblioteka Go të portuara në gjuhën C janë:
- strings
- io (antonz.org)
- bytes
- mem
- slices
dhe etj. Përveç setit libraritë e portuara Go në programet në gjuhën Solod mund të përdoren shell në bibliotekën standarde C libc.
Për default, të gjitha memoriet ndahen në stack, por përmes funksioneve Alloc / Free Biblioteka standarde mundëson ndarjen e memories në heap. Grumbullimi i mbeturinave dhe numërimi i referencave nuk përdoren, por në Solod ofrohen mundësi për verifikimin e tipeve dhe përfundimin emergjent në rast të aksesit jashtë kufijve të masivit. Megjithatë, nuk kryhen verifikime për ndarjen e treguesve dangling dhe mungesën e lirimit të memories. Si metode kryesore për identifikimin e problemeve me memorien përmendet përdorimi i AddressSanitizer -fsanitize=address në kompiluesit modernë.
Në aspektin e performancës, programet e komiluara të shkruara në Solod, në shumicën e rasteve më shpejt programet në Go:
- performanca e funksioneve nga paketa Byte është 1.5 herë më e shpejtë me konsum të njëjtë të memories;
- puna me buferat e byte është 1.3 herë më e shpejtë gjatë leximit dhe 2-4 herë më e shpejtë gjatë shkruarjes;
- në paketën Map, kërkimi me çelës integer është 3.4 herë më i shpejtë, por modifikimi i çelësave është më i ngadalshëm me 1.6 herë;
- kërkimi me çelës string është në të njëjtin nivel me gjuhën Go, por modifikimi është më i ngadalshëm me 1.5 herë;
- parsing dhe formatimi i numrave të gjithë është 2 herë më i shpejtë, ndërsa ai me pikë të lëvizshme është 1.5/1.2 herë më i shpejtë;
- funksionet e stringjeve janë 1.3 herë më të shpejta, dhe krijimi i stringeve është 2-4 herë më i shpejtë me një reduktim të konsumit të memories nga 10-20%.
Burimi: linux.org.ru
