Hacker News

ការសរសេរកម្មវិធីមេតាគំរូ C++ រចនាប័ទ្ម Lisp

មតិយោបល់

2 min read Via github.com

Mewayz Team

Editorial Team

Hacker News
<រាងកាយ>

ប្រភេទផ្សេងគ្នានៃ Compiler Magic: Lisp-Style C++ Template Metaprogramming

នៅក្នុងទិដ្ឋភាពដ៏ធំនៃការអភិវឌ្ឍន៍កម្មវិធី C++ មានភាពល្បីល្បាញដោយសារថាមពល និងដំណើរការរបស់វា។ ទោះជាយ៉ាងណាក៏ដោយ ការជាប់គាំងនៅក្នុងដំណើរការចងក្រងដ៏ស្មុគស្មាញរបស់វា គឺជាគំរូមួយដែលមានអារម្មណ៍ថាស្ទើរតែជាជនបរទេស៖ ការសរសេរកម្មវិធីមេតាគំរូ (TMP) ។ នៅពេលដែលត្រូវបានគេយកទៅជាឡូជីខលរបស់វា C ++ TMP ចាប់ផ្តើមស្រដៀងនឹងភាសាសរសេរកម្មវិធីដែលមានមុខងារនៅក្នុងសិទ្ធិរបស់វា ដែលដំណើរការទាំងស្រុងនៅពេលចងក្រង។ ភាពស្រដៀងគ្នាទៅនឹង Lisp ដែលជាភាសាសរសេរកម្មវិធីដ៏ចំណាស់បំផុត និងមានឥទ្ធិពលបំផុតគឺមានភាពទាក់ទាញ និងស៊ីជម្រៅ។ វិធីសាស្រ្តនេះអនុញ្ញាតឱ្យអ្នកអភិវឌ្ឍន៍អាចបិទដំណើរការការគណនាស្មុគស្មាញ និងតក្កវិជ្ជាពីពេលដំណើរការទៅម៉ោងចងក្រង ដោយបង្កើតកូដប្រកបដោយប្រសិទ្ធភាពខ្ពស់ និងសុវត្ថិភាពប្រភេទ។ ការយល់ដឹងអំពីវិធីសាស្រ្តបែប Lisp នេះ គឺជាគន្លឹះក្នុងការដោះសោកម្រិតថ្មីនៃភាពអរូបី ដែលជាគោលការណ៍ដែលយើងឱ្យតម្លៃយ៉ាងជ្រាលជ្រៅចំពោះ Mewayz នៅពេលស្ថាបត្យកម្មប្រព័ន្ធអាជីវកម្មដ៏រឹងមាំ និងម៉ូឌុល។

ភាសាសរសេរកម្មវិធីដោយចៃដន្យនៅក្នុង C++

គំរូ C++ ដើមឡើយត្រូវបានរចនាឡើងសម្រាប់ការជំនួសប្រភេទសាមញ្ញ ដូចជាការបង្កើត `List` ឬ `List` ជាដើម។ ទោះយ៉ាងណាក៏ដោយ ស្តង់ដារ C ++ ក្នុងការស្វែងរកភាពទូទៅរបស់វាបានបង្កើតភាសារង Turing-complete ដោយចៃដន្យ។ នេះមានន័យថាតាមទ្រឹស្ដី ការគណនាណាមួយដែលអាចត្រូវបានអនុវត្តដោយកម្មវិធីក៏អាចត្រូវបានអនុវត្តដោយ C++ compiler កំឡុងពេលដំណើរការបង្កើតគំរូ។ ការ​រក​ឃើញ​សមត្ថភាព​នេះ​បាន​នាំ​ឱ្យ​មាន​ការ​ចាប់​កំណើត​នៃ metaprogramming គំរូ។ វាត្រូវបានគេរកឃើញថាដោយប្រើគំរូឯកទេស ការហៅឡើងវិញ និងប៉ារ៉ាម៉ែត្រគំរូ មនុស្សម្នាក់អាចសរសេរកម្មវិធីដែលកម្មវិធីចងក្រងប្រតិបត្តិនៅពេលបង្កើតកម្មវិធីរបស់អ្នក។ "ភាសា" ពេលវេលាចងក្រងនេះមិនមានអថេរក្នុងន័យប្រពៃណីទេ។ ស្ថានភាពរបស់វាត្រូវបានបញ្ចូលក្នុងប៉ារ៉ាម៉ែត្រគំរូដោយខ្លួនឯង ហើយរចនាសម្ព័ន្ធគ្រប់គ្រងរបស់វាគឺផ្អែកលើការហៅឡើងវិញ និងការចងក្រងតាមលក្ខខណ្ឌ។

ការឱបក្រសោបនូវផ្នត់គំនិតដែលមានមុខងារដូច Lisp

ដើម្បី​សរសេរ​កម្មវិធី​មេតា​គំរូ​ឱ្យ​មាន​ប្រសិទ្ធភាព អ្នក​ត្រូវ​តែ​ប្រកាន់​យក​ផ្នត់​គំនិត​កម្មវិធី​ដែល​មាន​មុខងារ ដូច​ជា​អ្នក​សរសេរ​កម្មវិធី Lisp ដែរ។ មិនមានស្ថានភាពដែលអាចផ្លាស់ប្តូរបានឬរង្វិលជុំនៅក្នុងន័យបុរាណទេ។ ជំនួសមកវិញ អ្វីគ្រប់យ៉ាងត្រូវបានសម្រេចតាមរយៈការហៅឡើងវិញ និងការរៀបចំនៃប្រភេទ និងការចងក្រងពេលវេលាថេរ។ ពិចារណាឧទាហរណ៍សាមញ្ញមួយ៖ ការគណនាហ្វាក់តូរីស។ នៅក្នុង Lisp អ្នកអាចប្រើមុខងារ recursive ។ នៅក្នុង C++ TMP វិធីសាស្រ្តគឺស្រដៀងគ្នាគួរឱ្យកត់សម្គាល់ ប៉ុន្តែវាដំណើរការជាមួយប្រភេទ និងតម្លៃ។

  • ទិន្នន័យដែលមិនអាចផ្លាស់ប្តូរបាន៖ ដូចនៅក្នុង Lisp ទិន្នន័យនៅក្នុង TMP គឺមិនអាចផ្លាស់ប្តូរបានទេ។ នៅពេលដែលប៉ារ៉ាម៉ែត្រគំរូត្រូវបានកំណត់ វាមិនអាចផ្លាស់ប្តូរបានទេ។ អ្នកអាចបង្កើត "instances" ថ្មីដែលមានប៉ារ៉ាម៉ែត្រផ្សេងគ្នាប៉ុណ្ណោះ។
  • Recursion as Iteration: ដោយសារមិនមាន "for" ឬ "while" loops នោះ recursion គឺជាយន្តការចម្បងសម្រាប់ប្រតិបត្តិការម្តងទៀត។ គំរូហៅខ្លួនវាជាមួយនឹងប៉ារ៉ាម៉ែត្រដែលបានធ្វើបច្ចុប្បន្នភាពរហូតដល់ករណីមូលដ្ឋាន (តាមរយៈឯកទេសគំរូ) ត្រូវបានឈានដល់។
  • ការចាត់ចែងប្រភេទ មិនមែនត្រឹមតែតម្លៃទេ៖ ទិដ្ឋភាពដ៏មានឥទ្ធិពលបំផុតនៃ TMP គឺសមត្ថភាពរបស់វាក្នុងការគណនាជាមួយប្រភេទ។ អ្នក​អាច​បង្កើត​បញ្ជី​ប្រភេទ ពិនិត្យ​មើល​លក្ខណៈ​សម្បត្តិ​ប្រភេទ និង​ជ្រើសរើស​ប្រភេទ​ដោយ​ផ្អែក​លើ​លក្ខខណ្ឌ ដោយ​អនុញ្ញាត​ឱ្យ​ប្រើ​បច្ចេកទេស​កម្មវិធី​ទូទៅ​ដ៏មាន​ឥទ្ធិពល។

គំរូ​នេះ​បង្ខំ​ឱ្យ​មាន​វិធី​គិត​ផ្សេង​គ្នា ដែល​ផ្តល់​អាទិភាព​ដល់​តក្កវិជ្ជា​ប្រកាស​លើ​ជំហាន​ចាំបាច់ ដែល​នាំ​ឱ្យ​មាន​កូដ​រឹងមាំ និង​ធន់​នឹង​កំហុស។

"ការសរសេរកម្មវិធីមេតាគំរូគឺជាភាសាមុខងារដែលបង្កប់នៅក្នុង C++។ វាជាឧបករណ៍ដ៏មានឥទ្ធិពល ប៉ុន្តែវាទាមទារឱ្យគិតអំពីកម្មវិធីក្នុងវិធីផ្សេង ដែលជាវិធីដែលច្រើនតែមានលក្ខណៈអរូបី និងគណិតវិទ្យា។" - សមាជិកគណៈកម្មាធិការស្តង់ដារ C++

ការអនុវត្តជាក់ស្តែងនៅក្នុងប្រព័ន្ធម៉ូឌុល

ខណៈពេលដែលឧទាហរណ៍ Factorial គឺជាការសិក្សា ថាមពលពិតនៃ TMP រចនាប័ទ្ម Lisp បញ្ចេញពន្លឺនៅក្នុងកម្មវិធីជាក់ស្តែង ដែលទទួលបានអត្ថប្រយោជន៍ពីការ abstractions សូន្យ-រត់-លើសម៉ោង។ ជាឧទាហរណ៍ វាអាចត្រូវបានប្រើដើម្បីបង្កើតរចនាសម្ព័ន្ធទិន្នន័យដែលបានធ្វើឱ្យប្រសើរខ្ពស់ជាក់លាក់ចំពោះប្រភេទដែលបានផ្ដល់ឱ្យ សុពលភាពនៃការកំណត់រចនាសម្ព័ន្ធស្មុគស្មាញនៅពេលចងក្រង ឬអនុវត្តគំរូរចនាដ៏ស្មុគ្រស្មាញដូចជាការរចនាផ្អែកលើគោលការណ៍។ នៅក្នុងបរិបទនៃវេទិកាដូចជា Mewayz ដែលមានបំណងក្លាយជាប្រព័ន្ធប្រតិបត្តិការអាជីវកម្មម៉ូឌុល បច្ចេកទេសទាំងនេះមានតម្លៃមិនអាចកាត់ថ្លៃបាន។ ពួកគេអនុញ្ញាតឱ្យយើងបង្កើតសមាសធាតុស្នូលដែលមានទាំងភាពបត់បែនមិនគួរឱ្យជឿ និងមានប្រសិទ្ធភាពពិសេស។ API របស់ម៉ូឌុលអាចត្រូវបានរចនាដោយប្រើ TMP ដើម្បីអនុវត្តច្បាប់អាជីវកម្ម និងទំនាក់ទំនងទិន្នន័យនៅកម្រិតប្រភេទ ដោយចាប់យកការកំណត់រចនាសម្ព័ន្ធមិនត្រឹមត្រូវជាយូរមុនពេលកម្មវិធីត្រូវបានដាក់ឱ្យប្រើប្រាស់។ សុវត្ថិភាពពេលវេលាចងក្រងនេះមានសារៈសំខាន់ណាស់សម្រាប់ការកសាងប្រព័ន្ធដែលអាចទុកចិត្តបាន និងអាចធ្វើមាត្រដ្ឋានបាន ដែលអាជីវកម្មពឹងផ្អែកលើ។

ការវិវត្តន៍ និងអនាគតជាមួយ `constexpr`

ដើម C++ TMP ជារឿយៗត្រូវបានរិះគន់ចំពោះវាក្យសម្ព័ន្ធគ្រីប និងពេលវេលានៃការចងក្រងយឺត។ ដោយទទួលស្គាល់នេះ គណៈកម្មាធិការស្តង់ដារ C ++ ចាប់តាំងពីពេលនោះមកបានណែនាំលក្ខណៈពិសេសពេលវេលាចងក្រងដែលងាយស្រួលសម្រាប់អ្នកអភិវឌ្ឍន៍ ជាពិសេសគឺ 'constexpr' និង 'consteval' នាពេលថ្មីៗនេះ។ លក្ខណៈពិសេសទាំងនេះអនុញ្ញាតឱ្យការគណនាជាច្រើនដែលធ្លាប់ទាមទារល្បិចគំរូស្មុគ្រស្មាញត្រូវបានសរសេរដោយប្រើវាក្យសម្ព័ន្ធ C++ ដែលធ្លាប់ស្គាល់ និងចាំបាច់ដែលប្រតិបត្តិនៅពេលចងក្រង។ ទោះជាយ៉ាងណាក៏ដោយ វិធីសាស្រ្ត TMP រចនាប័ទ្ម Lisp នៅតែពាក់ព័ន្ធសម្រាប់ការគណនាតាមប្រភេទ និងសេណារីយ៉ូដែលទាមទារការគ្រប់គ្រងជាមូលដ្ឋានបំផុតលើដំណើរការបង្កើតគំរូ។ អ្នកអភិវឌ្ឍន៍ C++ ទំនើបឥឡូវនេះមានឧបករណ៍ជាច្រើនចាប់ពី TMP ប្រពៃណីដល់មុខងារ `constexpr` ដែលអនុញ្ញាតឱ្យពួកគេជ្រើសរើសឧបករណ៍ត្រឹមត្រូវសម្រាប់ការងារ និងសរសេរកម្មវិធីមេតាដែលអាចរក្សាបានកាន់តែស្អាត និងស្អាតជាងមុន។

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

សំណួរដែលគេសួរញឹកញាប់

ប្រភេទផ្សេងគ្នានៃ Compiler Magic: Lisp-Style C++ Template Metaprogramming

នៅក្នុងទិដ្ឋភាពដ៏ធំនៃការអភិវឌ្ឍន៍កម្មវិធី C++ មានភាពល្បីល្បាញដោយសារថាមពល និងដំណើរការរបស់វា។ ទោះជាយ៉ាងណាក៏ដោយ ការជាប់គាំងនៅក្នុងដំណើរការចងក្រងដ៏ស្មុគស្មាញរបស់វា គឺជាគំរូមួយដែលមានអារម្មណ៍ថាស្ទើរតែជាជនបរទេស៖ ការសរសេរកម្មវិធីមេតាគំរូ (TMP) ។ នៅពេលដែលត្រូវបានគេយកទៅជាឡូជីខលរបស់វា C ++ TMP ចាប់ផ្តើមស្រដៀងនឹងភាសាសរសេរកម្មវិធីដែលមានមុខងារនៅក្នុងសិទ្ធិរបស់វា ដែលដំណើរការទាំងស្រុងនៅពេលចងក្រង។ ភាពស្រដៀងគ្នាទៅនឹង Lisp ដែលជាភាសាសរសេរកម្មវិធីដ៏ចំណាស់បំផុត និងមានឥទ្ធិពលបំផុតគឺមានភាពទាក់ទាញ និងស៊ីជម្រៅ។ វិធីសាស្រ្តនេះអនុញ្ញាតឱ្យអ្នកអភិវឌ្ឍន៍អាចបិទដំណើរការការគណនាស្មុគស្មាញ និងតក្កវិជ្ជាពីពេលដំណើរការទៅម៉ោងចងក្រង ដោយបង្កើតកូដប្រកបដោយប្រសិទ្ធភាពខ្ពស់ និងសុវត្ថិភាពប្រភេទ។ ការយល់ដឹងអំពីវិធីសាស្រ្តបែប Lisp នេះ គឺជាគន្លឹះក្នុងការដោះសោកម្រិតថ្មីនៃភាពអរូបី ដែលជាគោលការណ៍ដែលយើងឱ្យតម្លៃយ៉ាងជ្រាលជ្រៅចំពោះ Mewayz នៅពេលស្ថាបត្យកម្មប្រព័ន្ធអាជីវកម្មដ៏រឹងមាំ និងម៉ូឌុល។

ភាសាសរសេរកម្មវិធីដោយចៃដន្យនៅក្នុង C++

គំរូ C++ ដើមឡើយត្រូវបានរចនាឡើងសម្រាប់ការជំនួសប្រភេទសាមញ្ញ ដូចជាការបង្កើត 'List' ឬ 'List' ជាដើម។ ទោះយ៉ាងណាក៏ដោយ ស្តង់ដារ C ++ ក្នុងការស្វែងរកភាពទូទៅរបស់វាបានបង្កើតភាសារង Turing-complete ដោយចៃដន្យ។ នេះមានន័យថាតាមទ្រឹស្ដី ការគណនាណាមួយដែលអាចត្រូវបានអនុវត្តដោយកម្មវិធីក៏អាចត្រូវបានអនុវត្តដោយ C++ compiler កំឡុងពេលដំណើរការបង្កើតគំរូ។ ការ​រក​ឃើញ​សមត្ថភាព​នេះ​បាន​នាំ​ឱ្យ​មាន​ការ​ចាប់​កំណើត​នៃ metaprogramming គំរូ។ វាត្រូវបានគេរកឃើញថាដោយប្រើគំរូឯកទេស ការហៅឡើងវិញ និងប៉ារ៉ាម៉ែត្រគំរូ មនុស្សម្នាក់អាចសរសេរកម្មវិធីដែលកម្មវិធីចងក្រងប្រតិបត្តិនៅពេលបង្កើតកម្មវិធីរបស់អ្នក។ "ភាសា" ពេលវេលាចងក្រងនេះមិនមានអថេរក្នុងន័យប្រពៃណីទេ។ ស្ថានភាពរបស់វាត្រូវបានបញ្ចូលក្នុងប៉ារ៉ាម៉ែត្រគំរូដោយខ្លួនឯង ហើយរចនាសម្ព័ន្ធគ្រប់គ្រងរបស់វាគឺផ្អែកលើការហៅឡើងវិញ និងការចងក្រងតាមលក្ខខណ្ឌ។

ការឱបក្រសោបនូវផ្នត់គំនិតដែលមានមុខងារដូច Lisp

ដើម្បី​សរសេរ​កម្មវិធី​មេតា​គំរូ​ឱ្យ​មាន​ប្រសិទ្ធភាព អ្នក​ត្រូវ​តែ​ប្រកាន់​យក​ផ្នត់​គំនិត​កម្មវិធី​ដែល​មាន​មុខងារ ដូច​ជា​អ្នក​សរសេរ​កម្មវិធី Lisp ដែរ។ មិនមានស្ថានភាពដែលអាចផ្លាស់ប្តូរបានឬរង្វិលជុំនៅក្នុងន័យបុរាណទេ។ ជំនួសមកវិញ អ្វីគ្រប់យ៉ាងត្រូវបានសម្រេចតាមរយៈការហៅឡើងវិញ និងការរៀបចំនៃប្រភេទ និងការចងក្រងពេលវេលាថេរ។ ពិចារណាឧទាហរណ៍សាមញ្ញមួយ៖ ការគណនាហ្វាក់តូរីស។ នៅក្នុង Lisp អ្នកអាចប្រើមុខងារ recursive ។ នៅក្នុង C++ TMP វិធីសាស្រ្តគឺស្រដៀងគ្នាគួរឱ្យកត់សម្គាល់ ប៉ុន្តែវាដំណើរការជាមួយប្រភេទ និងតម្លៃ។

ការអនុវត្តជាក់ស្តែងនៅក្នុងប្រព័ន្ធម៉ូឌុល

ខណៈពេលដែលឧទាហរណ៍ Factorial គឺជាការសិក្សា ថាមពលពិតនៃ TMP រចនាប័ទ្ម Lisp បញ្ចេញពន្លឺនៅក្នុងកម្មវិធីជាក់ស្តែង ដែលទទួលបានអត្ថប្រយោជន៍ពីការ abstractions សូន្យ-រត់-លើសម៉ោង។ ជាឧទាហរណ៍ វាអាចត្រូវបានប្រើដើម្បីបង្កើតរចនាសម្ព័ន្ធទិន្នន័យដែលបានធ្វើឱ្យប្រសើរខ្ពស់ជាក់លាក់ចំពោះប្រភេទដែលបានផ្ដល់ឱ្យ សុពលភាពនៃការកំណត់រចនាសម្ព័ន្ធស្មុគស្មាញនៅពេលចងក្រង ឬអនុវត្តគំរូរចនាដ៏ស្មុគ្រស្មាញដូចជាការរចនាផ្អែកលើគោលការណ៍។ នៅក្នុងបរិបទនៃវេទិកាដូចជា Mewayz ដែលមានបំណងក្លាយជាប្រព័ន្ធប្រតិបត្តិការអាជីវកម្មម៉ូឌុល បច្ចេកទេសទាំងនេះមានតម្លៃមិនអាចកាត់ថ្លៃបាន។ ពួកគេអនុញ្ញាតឱ្យយើងបង្កើតសមាសធាតុស្នូលដែលមានទាំងភាពបត់បែនមិនគួរឱ្យជឿ និងមានប្រសិទ្ធភាពពិសេស។ API របស់ម៉ូឌុលអាចត្រូវបានរចនាដោយប្រើ TMP ដើម្បីអនុវត្តច្បាប់អាជីវកម្ម និងទំនាក់ទំនងទិន្នន័យនៅកម្រិតប្រភេទ ដោយចាប់យកការកំណត់រចនាសម្ព័ន្ធមិនត្រឹមត្រូវជាយូរមុនពេលកម្មវិធីត្រូវបានដាក់ឱ្យប្រើប្រាស់។ សុវត្ថិភាពពេលវេលាចងក្រងនេះមានសារៈសំខាន់ណាស់សម្រាប់ការកសាងប្រព័ន្ធដែលអាចទុកចិត្តបាន និងអាចធ្វើមាត្រដ្ឋានបាន ដែលអាជីវកម្មពឹងផ្អែកលើ។

ការវិវត្តន៍ និងអនាគតជាមួយ `constexpr`

ដើម C++ TMP ជារឿយៗត្រូវបានរិះគន់ចំពោះវាក្យសម្ព័ន្ធគ្រីប និងពេលវេលានៃការចងក្រងយឺត។ ដោយទទួលស្គាល់នេះ គណៈកម្មាធិការស្តង់ដារ C ++ ចាប់តាំងពីពេលនោះមកបានណែនាំលក្ខណៈពិសេសពេលវេលាចងក្រងដែលងាយស្រួលសម្រាប់អ្នកអភិវឌ្ឍន៍ ជាពិសេសគឺ 'constexpr' និង 'consteval' នាពេលថ្មីៗនេះ។ លក្ខណៈពិសេសទាំងនេះអនុញ្ញាតឱ្យការគណនាជាច្រើនដែលធ្លាប់ទាមទារល្បិចគំរូស្មុគ្រស្មាញត្រូវបានសរសេរដោយប្រើវាក្យសម្ព័ន្ធ C++ ដែលធ្លាប់ស្គាល់ និងចាំបាច់ដែលប្រតិបត្តិនៅពេលចងក្រង។ ទោះជាយ៉ាងណាក៏ដោយ វិធីសាស្រ្ត TMP រចនាប័ទ្ម Lisp នៅតែពាក់ព័ន្ធសម្រាប់ការគណនាតាមប្រភេទ និងសេណារីយ៉ូដែលទាមទារការគ្រប់គ្រងជាមូលដ្ឋានបំផុតលើដំណើរការបង្កើតគំរូ។ អ្នកអភិវឌ្ឍន៍ C++ ទំនើបឥឡូវនេះមានឧបករណ៍ជាច្រើនចាប់ពី TMP ប្រពៃណីដល់មុខងារ `constexpr` ដែលអនុញ្ញាតឱ្យពួកគេជ្រើសរើសឧបករណ៍ត្រឹមត្រូវសម្រាប់ការងារ និងសរសេរកម្មវិធីមេតាដែលអាចរក្សាបានកាន់តែស្អាត និងស្អាតជាងមុន។

ត្រៀមខ្លួន​ដើម្បី​សម្រួល​ប្រតិបត្តិការ​របស់អ្នក​ហើយឬនៅ?

ថាតើអ្នកត្រូវការ CRM, វិក្កយបត្រ, ធនធានមនុស្ស, ឬម៉ូឌុលទាំង 208 — Mewayz បានរ៉ាប់រងអ្នកហើយ។ អាជីវកម្ម 138K+ បានធ្វើការផ្លាស់ប្តូររួចហើយ។

ចាប់ផ្តើមដោយឥតគិតថ្លៃ →

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime