3.6% ti awọn ibi ipamọ Python ni idanwo ni awọn aṣiṣe komama sonu

Awọn abajade iwadi lori ailagbara ti koodu Python si awọn aṣiṣe ti o ni ibatan si lilo ti ko tọ ti aami idẹsẹ ninu koodu naa ni a ti tẹjade. Awọn iṣoro naa jẹ idi nipasẹ otitọ pe nigba kika, Python ṣe idapọ awọn okun ti o wa ninu atokọ laifọwọyi ti wọn ko ba yapa nipasẹ aami idẹsẹ, ati pe o tun ṣe itọju iye bi tuple ti iye naa ba tẹle nipasẹ aami idẹsẹ kan. Lẹhin ṣiṣe itupalẹ adaṣe adaṣe ti awọn ibi ipamọ 666 GitHub pẹlu koodu Python, awọn oniwadi ṣe idanimọ awọn ọran idẹsẹ ti o ṣeeṣe ni 5% ti awọn iṣẹ akanṣe ti a ṣe iwadi.

Ayewo afọwọṣe siwaju fihan pe awọn aṣiṣe gidi wa ni awọn ibi ipamọ 24 nikan (3.6%), ati pe 1.4% ti o ku jẹ awọn idaniloju eke (fun apẹẹrẹ, aami idẹsẹ kan le ṣe akiyesi mọọmọ laarin awọn ila lati ṣajọpọ awọn ọna faili laini pupọ, awọn hashes gigun, HTML awọn bulọọki tabi awọn ọrọ SQL). O ṣe akiyesi pe laarin awọn ibi ipamọ 24 pẹlu awọn aṣiṣe gidi ni iru awọn iṣẹ nla bi Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield ati django-helpdesk. Bibẹẹkọ, awọn iṣoro pẹlu aami idẹsẹ kii ṣe pato si Python ati nigbagbogbo dagba ni awọn iṣẹ akanṣe C/C++ (awọn apẹẹrẹ ti awọn atunṣe aipẹ jẹ LLVM, Mono, Tensorflow).

Awọn oriṣi akọkọ ti awọn aṣiṣe ti a ṣe iwadi:

  • Lairotẹlẹ sonu aami idẹsẹ kan ninu awọn atokọ, tuples, ati awọn eto, nfa ki awọn gbolohun ọrọ pọ dipo ki a tumọ bi awọn iye lọtọ. Fun apẹẹrẹ, ni Sentry, ọkan ninu awọn idanwo padanu aami kan laarin awọn okun “awọn idasilẹ” ati “ṣawari” ninu atokọ naa, eyiti o yorisi ṣiṣe ayẹwo oluṣakoso “/releasesdiscover” ti ko si tẹlẹ, dipo ti ṣayẹwo “/ awọn idasilẹ” ati “ / iwari" lọtọ.
    3.6% ti awọn ibi ipamọ Python ni idanwo ni awọn aṣiṣe komama sonu

    Apeere miiran ni pe aami idẹsẹ ti o padanu ni rapidpro fa awọn ofin oriṣiriṣi meji lati dapọ lori laini 572:

    3.6% ti awọn ibi ipamọ Python ni idanwo ni awọn aṣiṣe komama sonu

  • Aami idẹsẹ ti o padanu ni opin asọye tuple-ẹyọkan, nfa iṣẹ iyansilẹ lati fi iru deede dipo tuple kan. Fun apẹẹrẹ, ikosile "awọn iye = (1,)" yoo ja si iṣẹ iyansilẹ si oniyipada ti tuple kan ti eroja kan, ṣugbọn “awọn iye = (1)” yoo ja si iṣẹ iyansilẹ ti iru odidi kan. Awọn akọmọ ti o wa ninu awọn iṣẹ iyansilẹ ti o wa loke ko ni ipa iru asọye ati pe o jẹ iyan, ati pe wiwa tuple kan jẹ ipinnu nipasẹ parser nikan da lori wiwa aami idẹsẹ. REST_FRAMEWORK = {'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # ni ao yan okun kan dipo tuple kan. )}
  • Ipo idakeji jẹ aami idẹsẹ afikun lakoko iṣẹ iyansilẹ. Ti aami idẹsẹ kan ba wa lairotẹlẹ silẹ ni opin iṣẹ iyansilẹ, tuple kan yoo jẹ ipin bi iye dipo iru deede (fun apẹẹrẹ, ti “iye = 1,” ni pato dipo “iye = 1”).

orisun: opennet.ru

Fi ọrọìwòye kun