તમારી પોતાની પ્રોગ્રામિંગ ભાષા બનાવો (I)

પ્રોગ્રામિંગ ભાષાઓનો વિકાસ

પર પ્રથમ લેખ લખ્યા પછી તમારી પોતાની operatingપરેટિંગ સિસ્ટમ કેવી રીતે બનાવવીકોઈએ મને કહ્યું કે શું હું આ અંગે કોઈ લેખ કરી શકું છું પ્રોગ્રામિંગ ભાષા કેવી રીતે બનાવવી. પહેલા મેં વધારે ધ્યાન આપ્યું ન હતું, પરંતુ હવે અને અન્ય રીતે મેં પ્રોગ્રામિંગ ભાષાઓની રચના વિશે ઘણું શીખ્યું છે. તો ચાલો કરીએ મૂળભૂત પ્રોગ્રામિંગ ભાષા, અન્ય પ્રોગ્રામ્સમાં સરળતાથી એમ્બેડ કરી શકાય તેવા અને તે વર્ચુઅલ મશીન સાથે કાર્ય કરે છે જેની અમે ડિઝાઇન પણ કરીશું. આજે આપણે સૌથી મૂળભૂત વર્ચુઅલ મશીન બનાવવાનું છે.

તમે કદાચ આશ્ચર્ય પામી રહ્યા છો: વર્ચુઅલ મશીન? પરંતુ તે ખૂબ મુશ્કેલ નથી અને તે પ્રોગ્રામોને ધીમું પણ કરે છે? " તેનાથી વિપરિત, એક સરળ વર્ચુઅલ મશીન ખૂબ સરળ અને પ્રમાણમાં ઝડપી છે. મેં પસંદ કર્યો છે કાટ વર્ચુઅલ મશીન માટે ભાષા તરીકે. પણ તે શું છે કાટ?

કાટ તે એક પ્રોગ્રામિંગ ભાષા છે જે એક્ઝેક્યુશન સિક્યુરિટી પર કેન્દ્રિત છે, તેથી તેનો ઉપયોગ કરીને કોઈક વર્ચુઅલ મશીનને બંધ કરી શકશે તે વ્યવહારીક રીતે અશક્ય હશે. તે વિકાસ દ્વારા રચાયેલ એક સંકલિત ભાષા છે મોઝિલા. સર્વો, અવેજી ગેકો, તેનામાં વિકાસશીલ છે. તમે હજી પણ તમારા વાક્યરચનાને બદલી શકો છો પરંતુ હું ઉપયોગ કરી રહ્યો છું તે કોડ પ્રથમ સ્થિર પ્રકાશન સુધી રાખવામાં આવશે.

કાટ માં સ્થાપિત કરે છે Linux સરળ રીતે. જો કે, ત્યાં કોઈ સત્તાવાર પાર્સલ નથી. ના વપરાશકર્તાઓ ઉબુન્ટુ આ બે ઉમેરી શકો છો પીપીએ: પીપીએ: હ :ન્સોર્ગ / રસ્ટ  y પીપીએ: સેમીઆરએક્સ 64 / કાર્ગો, ના વપરાશકર્તાઓ આર્ક વાપરી શકો ઔર (કાર્ગો-ગિટ તે પેકેજ છે જે બધું ઇન્સ્ટોલ કરે છે). બાકીના ઉપયોગ કરી શકે છે:

curl -s https://static.rust-lang.org/rustup.sh | sudo sh

વર્ચુઅલ મશીન કેવી રીતે કાર્ય કરે છે?

જો તમે જાણો છો કે એસેમ્બલર વિશ્વ કેવી રીતે કાર્ય કરે છે તે બરાબર સમાન છે, સ્ટેક અથવા સ્ટેક સાથે. જો નહીં, તો હું તમને સમજાવીશ. ચાલો નીચેના કોડની કલ્પના કરીએ:

2 + 3 છાપો

કમ્પ્યુટર 2 + 3 નો અર્થ શું સમજી શકતો નથી, અથવા તે જાણતો નથી કે શું ક્રમનું પાલન કરવું. કમ્પ્યુટર્સ બેટરી અથવા સ્ટેક્સ સાથે કામ કરે છે જેમાં ડેટા એકઠા થાય છે અને સતત કા extવામાં આવે છે. અમારા વર્ચુઅલ મશીનનો તે કોડ કંઈક આના જેવો હોવો જોઈએ:

દબાણ 2 દબાણ 3 પ્રિંટ ઉમેરો

મૂળભૂત રીતે અમે 2 ને ટોચ પર સ્ટેક પર મૂકીશું, 3 પણ. ADD સ્ટ pullક પર છેલ્લી 2 વસ્તુઓ ખેંચીને (દા.ત. તેને સ્ટેકથી દૂર કરશે અને તેનું મૂલ્ય મેળવશે) અને પરિણામને સ્ટેકની ટોચ પર ઉમેરશે. PRINT સ્ટેક પરની છેલ્લી વસ્તુ લેશે અને તે અમને પ્રદર્શિત કરવા માટે તેનો ઉપયોગ કરશે. ચાલો હવે તે કરીએ કાટ.

આપણે પ્રથમ માટે ભાષા વ્યાખ્યાયિત કરવી જોઈએ બાયટેકોડ, આપણે હાલની જેમ અંદરનો ઉપયોગ કરી શકીએ જાવા અથવા સીએલઆર .NET / મોનો છે, પરંતુ અમે વધુ મૂળભૂત બનાવવાનું છે.

https://gist.github.com/a01de8904fd39a442c20

અમે દરેક સૂચના માટે હેક્સાડેસિમલ નોટેશનનો ઉપયોગ કરીએ છીએ. Highંચા પર અમે મૂકી છે # [ડેરિંગ (પ્રીમિટિવથી)]ની વિચિત્રતા છે કાટ અને તે પછીથી સીધી બાઇટ્સ સાથે ગણતરીની તુલના કરવામાં સમર્થ બનવામાં અમને મદદ કરશે.

હવે આપણે એક ફંક્શન બનાવવું જોઈએ જે તે દરેક સૂચનાઓને અમલમાં મૂકે. આ માટે આપણે એક બાઇટ વાંચવું જોઈએ અને તેની ગણતરીમાં આપેલ સૂચનાઓ સાથે તેની તુલના કરવી જોઈએ. જો તમને કોઈ અસ્તિત્વમાં લાગે, તો તમારે તમારી ક્રિયા ચલાવવી આવશ્યક છે.

https://gist.github.com/8950ce212a2de2f397f9

અમે તે કરીએ છીએ કે દરેક બાઇટને વ્યક્તિગત રૂપે વાંચવા અને તેમને ચલાવવા માટે:

https://gist.github.com/12e24a1f0dd65e4cd65d

જેમ તમે જોઈ શકો છો, અમે તફાવત કરીએ છીએ જો અમને પહેલાં PUSH કમાન્ડ (અમારી INTEGER કમાન્ડ) આપવામાં આવ્યો હતો, તો આગામી બાઇટ સંપૂર્ણપણે સ્ટેક પર લઈ જશે. ત્યાં અમે બે કાર્યોનો ઉપયોગ કરી રહ્યા છીએ જે મેં તમને શીખવ્યું નથી, સેલ્ફ.પોપ () y સેલ્ફ.પશ ()છે, જે દેખીતી રીતે સ્ટેકને સંભાળવાનો હવાલો છે.

https://gist.github.com/54147f853a8a2b8c01d9

તે ખૂબ જટિલ નથી, પરંતુ પ popપ ફંક્શનમાં ભૂલ શોધવાની પદ્ધતિઓ છે. હકીકતમાં, માં કાટ, જો આપણે તે મિકેનિઝમ્સને દૂર કરીએ તો તે આપણને સંકલન ભૂલ આપે છે. હવે આપણે કોઈ પ્રોગ્રામમાં ક simplyલ કરવો પડશે પેરિન (અમારા વર્ચુઅલ મશીન) અને બાયકોડ ચલાવો.

https://gist.github.com/99b1ab461318b3a644d0

તે બાયટેકોડ ફાઇલમાંથી વાંચી શકાય છે, પરંતુ અહીં સરળતા માટે મેં તેને ચલમાં સંગ્રહિત કરી છે. જો આપણે તેને ચલાવીશું, તો તે આપણને અપેક્ષિત પરિણામ આપશે:

પેરિન વી 0.1 પેરીન વીએમ પેરીનવીએમ દાખલાની શરૂઆત કરીને ફ્લોપફ્લિપ બાયટેકોડ ચલાવે છે પેરીનવીએમ વી 0.1.0 પૂર્ણાંક મૂલ્ય 5

બધા કોડ પર ઉપલબ્ધ છે GitHub હેઠળ અપાચે લાઇસન્સ 2.0: https://github.com/AdrianArroyoCalle/perin. કમ્પાઇલ કરવા માટે તેમની પાસે હોવું જ જોઈએ કાર્ગો સ્થાપિત અને મૂકી:

ચાર્જ બિલ્ડ એન્ડ એન્ડ ./target/main

પછીના પ્રકરણમાં આપણે આપણી પ્રોગ્રામિંગ ભાષા વિશે વધુ જોશું.


17 ટિપ્પણીઓ, તમારી છોડી દો

તમારી ટિપ્પણી મૂકો

તમારું ઇમેઇલ સરનામું પ્રકાશિત કરવામાં આવશે નહીં. આવશ્યક ક્ષેત્રો સાથે ચિહ્નિત થયેલ છે *

*

*

  1. ડેટા માટે જવાબદાર: મિગ્યુએલ gelંજેલ ગેટóન
  2. ડેટાનો હેતુ: નિયંત્રણ સ્પામ, ટિપ્પણી સંચાલન.
  3. કાયદો: તમારી સંમતિ
  4. ડેટાની વાતચીત: કાયદાકીય જવાબદારી સિવાય ડેટા તૃતીય પક્ષને આપવામાં આવશે નહીં.
  5. ડેટા સ્ટોરેજ: cસેન્ટસ નેટવર્ક્સ (ઇયુ) દ્વારા હોસ્ટ કરેલો ડેટાબેઝ
  6. અધિકાર: કોઈપણ સમયે તમે તમારી માહિતીને મર્યાદિત, પુન recoverપ્રાપ્ત અને કા deleteી શકો છો.

  1.   રોડર જણાવ્યું હતું કે

    રસપ્રદ જિજ્ityાસા, જોકે તે વાસ્તવિકતામાં ખૂબ ઉપયોગી નથી, તે જાણવાથી નુકસાન થતું નથી.

    તે મહાન છે કે તમે રસ્ટની જાહેરાત કરો છો, તે એક એવી ભાષા છે જે ઘણું વચન આપે છે, તે ફક્ત સી ++ કરતાં વધુ સુરક્ષિત નથી, પરંતુ (હવે માટે) તેના વાક્યરચનામાં સ્પષ્ટ છે.

    ફોટા માટે, હું જાવા ઇવોલ્યુશન એક્સડી ધ્યાનમાં લઈશ નહીં.

    1.    રોડર જણાવ્યું હતું કે

      અને ફોર્ટ્રનથી, મેં તેનો ક્યારેય ઉપયોગ કર્યો નથી, પરંતુ મેં તેના વિશે ઘણી સારી વાતો સાંભળી નથી ...

      1.    પવિત્ર જણાવ્યું હતું કે

        હું કરું છું, અને તે ખાસ કરીને એન્જીનિયરિંગમાં ઉપયોગી છે, જોકે પાયથોન જમીન મેળવી રહ્યો છે.

      2.    જ્હોન જણાવ્યું હતું કે

        ફોરટ્રેન એ સી સાથેની બીજી મહાન ભાષા છે, આજે પણ ખરેખર જટિલ પ્રશ્નોમાં એક અથવા બીજી હશે.

        અને તે ચર્ચાસ્પદ હશે કે ફોર્ટ્રન સીના 'ઇવોલ્યુશન' તરીકે છે, જ્યારે કદાચ તેની આસપાસનો અન્ય રસ્તો હોવો જોઈએ, કેમ કે સી નવી છે, વધુ આધુનિક છે અને વધુ શક્યતાઓ છે; જો કે એક બીજાથી ઓછામાં ઓછું અલગ નથી.

        જોકે અંતિમ સ્થાનો કેટલાક દૃષ્ટિકોણથી ચર્ચાસ્પદ છે.

    2.    ફ્રાન્સિસ્કો જણાવ્યું હતું કે

      જાવા માટે +1

  2.   પોર્ટો જણાવ્યું હતું કે

    ચાલો જોઈએ કે શું મને આ ગમે છે, હું પ્રોગ્રામિંગને કંઈક આપીશ પરંતુ મૂળભૂત તે જોવા માટે કે હું વધુ સમજી શકું છું.

  3.   વપરાશકર્તાગુલિનક્સ જણાવ્યું હતું કે

    નવી પ્રોગ્રામિંગ ભાષા બનાવવાનો અસલ હેતુ શું છે? મને વ્યક્તિગત રીતે લાગે છે કે સ્રોત કોડ છુપાવવા માટે તે ચાલ છે.

  4.   યીલી જણાવ્યું હતું કે

    મિત્ર, "તમારી પોતાની operatingપરેટિંગ સિસ્ટમ" ની ચાલુતાનું શું થયું? કૃપા કરીને તેને ત્યાં છોડી દો નહીં.

    ખરેખર, તમે એક માસ્ટર છો અને ફક્ત આ બે ગીતોએ મારું ધ્યાન સંપૂર્ણ રીતે મોહિત કરી દીધું છે, પરંતુ હું ઇચ્છું છું કે તે અડધા સુધી ન રહે.

    હું જાણું છું કે આપણામાંના ઘણા સમાન વિચારે છે અને અમે આ ખૂબ જ રસપ્રદ વિષયોની ચાલુ અને નિષ્કર્ષની રાહ જોઈ રહ્યા છીએ.

  5.   ક્રિસ્ટિયન ડેવિડ જણાવ્યું હતું કે

    ખૂબ જ રસપ્રદ, ખૂબ ખૂબ આભાર. 🙂

  6.   ફ્રાન્કો જણાવ્યું હતું કે

    હું જાવાને પ્રોગ્રામિંગ લેંગ્વેજ નહીં, કમાન્ડ ઇંટરપ્રીટર માનતો નથી, કારણ કે તે સુસંગત નથી

    1.    મારિયો જણાવ્યું હતું કે

      [પ્રોગ્રામિંગ લેંગ્વેજ એ expressપચારિક ભાષા છે જે પ્રક્રિયાઓને વ્યક્ત કરવા માટે રચાયેલ છે જે કમ્પ્યુટર જેવા મશીનો દ્વારા કરી શકાય છે.]

      આ કારણોસર, જાવા એ પ્રોગ્રામિંગ ભાષા છે. પણ બાશ ભાષા (લિનોક્સ શેલ ભાષા) એ એક પ્રોગ્રામિંગ ભાષા છે.

      ત્યાં બે પ્રકારની ભાષાઓ છે:
      - સંકલિત
      - અર્થઘટન
      - મિશ્ર (વર્ચ્યુઅલ મશીનો, મૂળ લાઇબ્રેરીઓ કમ્પાઈલ કરવામાં આવે છે અને કાર્યાત્મક કોડનું અર્થઘટન કરવામાં આવે છે)

      દુભાષિયો બહુ ઉપયોગી છે જ્યારે તે મલ્ટીપ્લેટફોર્મની વાત આવે છે અને તે માટે વિનાશક પ્રદર્શન નથી. જાવા, વીબી.નેટ, સી ++. નેટ, એફ #, સી # એ બધી મિશ્ર ભાષાઓ છે. બેશ લેંગ્વેજ, બેટ, પીએચપી, જાવાસ્ક્રિપ્ટ અને વધુ ઘણી અર્થઘટન ભાષાઓ છે.

      જો તમે જાવાને ભાષા તરીકે માનતા નથી કારણ કે તેનો અર્થઘટન કરવામાં આવે છે (જે તે નથી) તમારે પ્રોગ્રામ બનાવવા માટે ઉપયોગમાં લેવામાં આવતી ઘણી અન્ય ભાષાઓનો વિચાર કરવો જોઈએ નહીં. તદુપરાંત, ત્રણના તે નિયમ દ્વારા તમારે ધ્યાનમાં લેવું જોઈએ નહીં કે મશીનરીની ભાષા સિવાય કોઈ પ્રોગ્રામિંગ ભાષા છે.

      અને કેમ નહીં? મશીનરીને પણ ભાષા તરીકે ગણી શકાય નહીં, કારણ કે તે પ્રોસેસર દ્વારા ખરેખર "આદેશિત" આદેશોનો સમૂહ છે.

      કારણ કે અસરકારક રીતે, બધી ભાષાઓ એ આદેશોના સમૂહ સિવાય કંઈ નથી જે પ્રોસેસર દ્વારા અર્થઘટન કરવામાં આવે છે.

      તમને વધુ કે ઓછી ભાષા ગમે છે (જાવા, આ કિસ્સામાં), વધુ કે ઓછા ઉપયોગી અને શક્તિશાળી લાગે છે, પરંતુ તે કહે છે કે તે કોઈ પ્રોગ્રામિંગ ભાષા નથી કારણ કે તે કમ્પાઈલ નથી ... તે બધી પ્રોગ્રામિંગ ભાષાની વ્યાખ્યાઓ સામે છે.

    2.    મારિયો જણાવ્યું હતું કે

      😐 હું આશા રાખું છું કે હું ખૂબ અસંસ્કારી લાગતો નથી

      1.    મેરિયા એન્ટોનિઆટિયા ડે મેન્યુએલા કાર્ડેનાસ જણાવ્યું હતું કે

        ના શાંત તમે ફક્ત આપણા જીવનનો નાશ કર્યો

      2.    મારિયો જણાવ્યું હતું કે

        hahahahaha, perdoooon. તે મારો ઇરાદો એક્સડી નહોતો

    3.    કાર્લોસ જણાવ્યું હતું કે

      જાવા એ પ્રોગ્રામિંગ ભાષા છે. કારણ કે તમે કોઈ એપ્લિકેશન વિકસાવી શકો છો અને જ્યારે તમે કમ્પાઇલ કરો ત્યારે તમે જે.આર.એમ. દ્વારા અર્થઘટન કરવામાં આવે છે તે જકાર બનાવો. પછી તમારા અજગરના તર્ક અનુસાર તે ક્યાં તો અર્થઘટન નથી કરતું, પરંતુ તે જુદા જુદા એક્ઝેક્યુટેબલ સાથે કમ્પાઈલ કરવામાં આવે છે ...

  7.   ઇલિયાસ મgeન્ગલોસ જણાવ્યું હતું કે

    ખૂબ સારી માહિતી

  8.   કાર્લોસ આર્ટુરો જણાવ્યું હતું કે

    સારી માહિતી પરંતુ મને એક શંકા છે, અન્ય એનાલોગિસ અથવા સ softwareફ્ટવેર પર આધાર રાખ્યા વિના શરૂઆતથી નવી પ્રોગ્રામિંગ લેંગ્વેજ બનાવવાનું શક્ય બનશે. હું તે જ રીતે બોલું છું કે અન્ય ભાષાઓ જાવા અથવા એચટીએમએલ જેવી બનાવવામાં આવી હતી.
    હું આ પ્રશ્ન પર તમારી મદદની ખૂબ પ્રશંસા કરીશ.