Linux 5.18 માટે વિવિધ સમસ્યાઓ ઉકેલવા માટે કોડને C ના વધુ વર્તમાન સંસ્કરણ પર ખસેડવાનું આયોજન છે. 

Linux શું છે અને તે શેના માટે છે?

ની પ્રક્રિયા દરમિયાન વિકાસકર્તા ચર્ચા લિનક્સ કર્નલનું વિશે અનેl ના સમૂહની થીમ નબળાઈઓને ઠીક કરવા માટે પેચો લિંક કરેલી યાદીઓ સાથે કામ કરવા માટે કોડમાં સ્પેક્ટરનું તે સ્પષ્ટ થઈ ગયું ઘણા વિકાસકર્તાઓ માટે કે સમસ્યા જો વધુ સરળતાથી ઉકેલી શકાય છે કર્નલ કોડમાં મંજૂરી આપવામાં આવી હતી C que ધોરણના નવા સંસ્કરણને અનુરૂપ છે. 

અને તે એ છે કે હાલમાં Linux કર્નલમાં ઉમેરવામાં આવેલ કોડ ANSI C (C89) સ્પષ્ટીકરણનું પાલન કરે છે, જે 1989 માં રચવામાં આવ્યું હતું.

તે જ છે સ્પેક્ટર સંબંધિત સમસ્યા કોડમાં હતો કારણ કે se ઇટરરેટરનો ઉપયોગ કરવાનું ચાલુ રાખ્યું લૂપ પછી અલગથી વ્યાખ્યાયિત.

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

તેવો ઉલ્લેખ છે મેક્રોનો ઉપયોગ લિંક કરેલ સૂચિના ઘટકો પર પુનરાવર્તન કરવા માટે થાય છે, અને લૂપ ઇટરરેટર આ મેક્રોને પસાર કરવામાં આવ્યું હોવાથી, તે લૂપની બહાર જ વ્યાખ્યાયિત થયેલ છે અને લૂપ પછી ઉપલબ્ધ રહે છે. C99 સ્ટાન્ડર્ડનો ઉપયોગ કરવાથી વિકાસકર્તાઓને for() બ્લોકમાં લૂપ માટે ચલોને વ્યાખ્યાયિત કરવાની મંજૂરી મળશે, જે ઉકેલની શોધ કર્યા વિના સમસ્યાને હલ કરશે.

કમનસીબે, કર્નલમાં બહુવિધ સ્થાનો છે જ્યાં સૂચિ છે
ઇટરરેટરનો ઉપયોગ લૂપ પછી થાય છે જે આવા ફેરફાર પર તૂટી જાય છે. સદભાગ્યે
ત્યાં સ્ક્રિપ્ટ use_after_iter.cocci છે જેનો ઉપયોગ આવા ઓળખવા માટે કરી શકાય છે
કોડ સ્થાનો. મારે સ્ક્રિપ્ટને થોડી અનુકૂલિત કરવી પડી કારણ કે તે ખોટાને ઘટાડે છે
મૂળ ઉપયોગ કેસમાં હકારાત્મક, પરંતુ તે આ પેચ સાથે સંબંધિત છે.

નોંધાયેલ કોડ સ્થાનોની વિશાળ વિવિધતા ફક્ત પછી સૂચિ પુનરાવર્તકનો ઉપયોગ કરે છે
ચક્ર જો ત્યાં વહેલું બહાર નીકળવું (બ્રેક/ગોટો) હતું અને તેથી તે નથી
સંબંધિત.

બીજી તરફ, લિનસ ટોરવાલ્ડ્સ આ વિચાર સાથે સંમત થયા નવા સ્પષ્ટીકરણો માટે આધારને અમલમાં મૂકવા માટે સક્ષમ થવા માટે અને 5.18 માં રજૂ કરાયેલ C11 ધોરણનો ઉપયોગ કરવા માટે કર્નલ 2011 પર આગળ વધવાનું સૂચન કર્યું હતું.

તે પછી, પ્રારંભિક ચકાસણી દરમિયાન, નવા મોડમાં GCC અને ક્લેંગ પર માઉન્ટ કરવાનું વિચલન વિના પસાર થયું. જ્યાં સુધી વધુ વ્યાપક પરીક્ષણને કારણે અણધારી સમસ્યાઓ ઊભી ન થાય ત્યાં સુધી, 5.18 કર્નલ બિલ્ડ સ્ક્રિપ્ટ્સ '–std=gnu89' વિકલ્પને '–std=gnu11 -Wno-shift-negative-value' માં બદલશે.

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

આ પ્રકારની બિન-અનુમાનિત ભૂલ થવાનું મુખ્ય કારણ એ છે કે ઐતિહાસિક રીતે અમારી પાસે C99-શૈલી "લૂપમાં ચલોની ઘોષણા કરો" નથી. તેથી list_for_each_entry() - અને અન્ય તમામ - મૂળભૂત રીતે હંમેશા છેલ્લી HEAD એન્ટ્રીને લૂપમાંથી ફિલ્ટર કરો, ફક્ત એટલા માટે કે આપણે લૂપમાં જ ઇટરેટર વેરીએબલ જાહેર કરી શક્યા નથી.

તે પણ ઉલ્લેખનીય છે C17 ધોરણનો ઉપયોગ કરવાની શક્યતા ધ્યાનમાં લેવામાં આવી હતી, પરંતુ આ કિસ્સામાં GCC ના ન્યૂનતમ સમર્થિત સંસ્કરણને વધારવું જરૂરી રહેશે, કારણ કે C11 માટે સમર્થનનો સમાવેશ GCC સંસ્કરણ (5.1) માટે વર્તમાન આવશ્યકતાઓને અનુરૂપ છે.

છેલ્લે જો તમને તેના વિશે વધુ જાણવામાં રસ છે, તમે માં વિગતો ચકાસી શકો છો નીચેની કડી


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

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

*

*

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