Представљамо Пацкем: супер брзи експериментални пакет написан у Русту

Пацкем је експериментални прекомпајлирани пакет модула ЈаваСцрипт који је примарно имплементиран у Руст. Такође може да ради са разним другим врстама датотека као што су ИАМЛ / ТОМЛ, фрагмент фрајдерске датотеке и још много тога. Да бисте брзо започели, погледајте веб локацију или ГитХуб страницу.

Пацкем решава зависности модула и поново их хидрира у графички модул, равну листу која садржи интерфејсе модула који су у суштини референце на променљиве структуре података засноване на гомили која садржи посебне метаподатке модула у графичком модулу.

Већина пословне логике апстрахована је у Русту помоћу ФФИ веза како би се омогућиле интеракције на ниском нивоу између оба краја. Русти бинарни фајлови су доступни као прекомпајлирани додаци Ноде Ц / Ц ++ у Пацкем-овом репо-у. ЦИ заснован на облаку користи се за покретање неколико скрипти са пре-гип инсталацијама, дајући бинарне датотеке специфичне за ОС са подршком за касније верзије Ноде-а (8, 9, 10).

Овај слој језгра Пацкема је оно што се назива логичким контекстом (ЛЦ) . Све остале операције које нису изричито приоритетне регресиране су у Ноде-ово опште време извршавања, што је Пацкем-овим терминима Рунтиме Цонтект (РЦ) . Прочитајте више о контекстима овде.

Теоретски, графикон модула се држи равним како би се избегле уобичајене замке које би довеле до непотребних заокрета ако би се дрво користило на месту. То омогућава РЦ-у да, између осталог, на одговарајући начин, уз минималне импликације на перформансе или нежељене ефекте, прати случајеве као што су дубоке кружне зависности или јако угнежђени динамички увоз (подела кода).

Више детаља можете пронаћи на Пацкем-овом РЕАДМЕ.мд.

Имао сам на уму ову идеју, али никада нисам планирао да је извршим док се нисам удружио са Садамом М. Заиста ми је било у интересу да повезивање модула видим као концепт сигуран за било кога да научи, разуме и примени. Имати проблема са конфигурацијама, документацијом и додатцима, било је ужасно и волео бих да ризикујем да то променим. Са вама. Са Пацкемом.

Брза историја

Требало ми је времена да исцрпим већину пакета написаних у окружењу које није ЈаваСцрипт. Открио сам да је већина њих заборавила да би требало да буду пакет, а не Ц / Ц ++ библиотека из мрачних 19-их.

Оно што сам желео био је пакет који ради већину тешког дизања на језику блиском металу за корисника, не захтевајући никакву интеракцију са његовим унутрашњим компонентама. Тада сам пронашао Руст. Паметан и језгровит системски језик који показује неке похвалне карактеристике попут неустрашивог модела подударности, сигурности типа и још много тога! Очекивао бих исто толико од коришћења Ц / Ц ++, али радије бих се држао Руста јер је прилично једноставан када је реч о управљању меморијом.

Зашто још један пакет?

Па, шта је овде? Зашто нам је потребан још један алат за изградњу, јер већ имамо невероватне попут вебпацк-а, Парцеле, Роллупа, итд? Узећу вас са неколико разлога зашто. Можда бисте могли имати сопствене интересе да вам се знатно смањи време развоја и производње.

2019. година, више нам не требају спори алати

Иако је Пацкем бржи од вебпацк-а 4, више је него двоструко бржи од Парцела (са вишејезгреном компилацијом) . У бенчмарк тесту смо Лодасх в4.17.1 повезали са Пацкем-ом и Парцелом и ово је био резултат:

Никада немојте узимати клупе по номиналној вредности. Можете га сами тестирати овде.

Разлог зашто се нисам потрудио да упоредим Парцел са вебпацк-ом био је тај што је вебпацк 4 знатно бржи од Парцела. Доказао сам ову чињеницу користећи сопствене клупе Сеана Т. Ларкина, а нит на Твиттеру можете пронаћи овде.

Јер можемо. Свако може, зар не?

Наравно, оно што ће имати највише смисла је зато што то можемо . Имали смо идеју о бржем повезивању са Русти интерфејсом било са ФФИ или ВАСМ (до тада још увек нисмо били сигурни). ФФИ је био разумнији што се тиче брзине и ДКС-а, па смо пристали на то да Пацкем буде имплементиран у Руст ФФИ везиве.

Искусили смо неколико проблема повезаних са нитима, па нисмо превише користили доступне ресурсе. Као резултат, користили смо подређене процесе више чворова (са ноде-воркер-фарм ) , исту технику коју Парцел користи за вишејезгрену компилацију, али за веће графичке модуле, јер додаје значајно време покретања поврх времена рада Ноде-а када се користи са мањим графичким модулима .

Стил конфигурације

Ово је био зезнут део. Било је пуно питања на која је потребан добар одговор да би се надокнадио одабир правог стила конфигурације. Статички или динамички? ЈСОН / ИАМЛ / ТОМЛ? Наш избор се заснивао у потпуности на томе да ли нам је Пацкем потребан :

  1. Имајте уреднији стил конфигурације и
  2. Будите агностични према другим прилагођеним корисничким конфигурацијама попут .бабелрц или пацкаге.јсон .

У крајњој линији, наставили смо са статичким стилом конфигурације, јер смо утврдили да је тачно оно што нам треба. Нешто што би могло декларативно рећи Пацкему како да управља циклусом снопа . Јасна су сва ограничења за статичку конфигурацију.

Још један аспект од интереса је врста датотеке коју бисмо требали користити за конфигурацију. ЈСОН који је уобичајени за претежну већину програмера ЈаваСцрипт-а или ИАМЛ / ТОМЛ / КСМЛ-стил који су ређи, али имају своје предности. Ипак је дат предлог за подршку за ЈСОН (бр. 5).

ЈСОН једноставно није исечен због свих непотребних наводника у низу, завојних и блок заграда, што има смисла јер је реч о формату за размену података . КСМЛ-исх приступ не заслужује поштовање у погледу употребе као конфигурационог формата, јер погоршава ствари од ЈСОН-а што се тиче непотребних знакова. ТОМЛ је представио пуно нових линија, а отклањање грешака угнежђених опција није изгледало привлачно јер смо знали да Пацкем додаци могу заиста постати гадни.

Коначни победник је био ИАМЛ! Успео је да прође кроз све аспекте исправног конфигурационог формата (барем за Пацкем). То:

  1. Чини конфигурацију безболном.
  2. Користи елегантан приступ.
  3. Још увек је познат ЈаваСцрипт окружењу
  4. Дизајниран је посебно за овај случај (конфигурације) .

Ево примера типичне Пацкем конфигурације ( пацкем.цонфиг.имл) . Проверите сами и размислите о писању истог садржаја у ЈСОН / ТОМЛ / КСМЛ стилу.

ФИИ, потребне су само прве две опције! ?

Продужава Пацкем

Ова функција још увек није примењена.

Понекад ћемо можда морати да користимо функцију која још увек не постоји , можда се неће применити у Пацкему или је врло специфична за наш пројекат . У том случају имали бисте два начина да решите своје потребе:

  1. Направите Пацкем додатак за свој случај употребе (што је препоручена опција).
  2. Направите прилагођени РЦ на врху Пацкемових бинарних датотека.

Коришћење Руста даје нам шансу да реформишемо ЛЦ у друге бинарне формате, као што је ВебАссембли, што ће омогућити Пацкему да покаже више циљева компајлирања:

  1. Додатак Ц / Ц ++ заснован на НАПИ са бинарним датотекама специфичним за платформу које захтева Пацкемов задати РЦ.
  2. Бинарни систем заснован на ВебАссембли који је вишеплатформан и убризгава се у РЦ.
  3. Пацкемов подразумевани самостални софтвер који користи ВебАссембли са имплементацијом РЦ-а компатибилном са прегледачем.
Последња два још нису на радару, јер се унутрашња рефакторизација још увек сређује.

Очекује се да ће вам напредни водич ускоро показати како да направите прилагођени алат за изградњу помоћу Пацкемових бинарних датотека како би одговарао вашим потребама у случају да Пацкем требате користити изван прегледача и Ноде окружења. Ови бинарни фајлови довршавају целокупно генерисање графова и дуплирају филтрирање и друге аспекте повезане са графовима. То значи да можете да користите свој прилагођени сериализатор, програм за надгледање датотека, систем додатака итд. Слично је томе како можете да направите свој прилагођени приказивач преко ОпенГЛ-а.

  1. И даље можете прихватити Пацкем-ов систем додатака, јер ће вам омогућити да интегришете Пацкем-ов екосистем додатака са вашим прилагођеним пакетом.
  2. Ако нисте сигурни да ли ћете морати да направите прилагођени пакет, знајте да то не би увек требало. Покушајте прво да поднесете проблем.
  3. То је гаранција да ће ови бинарни програми убрзати ваш радни процес у зависности од вашег конкретног случаја (а) употребе.

Тренутно стање

  • Сплит Подјела кода за развојне и производне начине.
  • ? Побољшани ЦЛИ (`- вербосе`) за боље информације о циклусу спајања.
  • ? Интерфејси модула који омогућавају лаку манипулацију графом модула.
  • ✔ Одговарајући приоритет. Изворне функционалности се савршено уклапају у ЛЦ. То значи да су веће шансе за брзе израде.
  • ? Извезите Н ativeUtils за спољну употребу изворних функционалности, укључујући г, enerateModuleGraph који поново покреће процес генерисања графичког модула. Тежак је, али још увек користан у случајевима када вам треба клон тренутног графикона активног модула. Коришћење значи удвостручавање времена израде, па га користите пажљиво.

Шта је следеће?

То су карактеристике за које се надамо да ћемо их ускоро имати у предстојећим издањима. Уз ваше напоре могли бисмо да извршимо повезивање на прави начин . Када Пацкем достигне 1.0 , очекујемо пуну подршку за све функције наведене у наставку и остале наведене у пакету Пацкема.

  • Самостални Пацкем са ЛЦ-ом у прегледачу ВебАссембли компатибилан са прегледачем ради ближе интеграције са основним системом. Акел Раусцхмаиер је већ поднео захтев за додавање верзије компатибилне са Ноде-ом у ВАСМ-у. За записник, ускоро ћемо радити на оба.
  • Тресење дрвета, али напредно. Решавање именованог / неименованог увоза и уклањање мртвог кода требало би да буде лагано. То значи да библиотеке попут лодасх можете користити уместо лодасх-а, без бриге да ли ће ваш код бити избрисан или не.
  • Ауто Цонфиг. Као и Зеро Цонфиг, али подразумевано оријентисан за додатну флексибилност.
  • Напредне ЦЛИ опције чине развој са Пацкемом другом природом.
  • Боље извештавање о грешкама.
  • Више циљева околине. Пацкем од сада може да се испоручује само за прегледач. На крају, очекујемо да подржимо Ноде ЦЈС и друге формате.
  • Још додатака. Треба нам још додатака! Пацкем има скуп уобичајених додатака за бржи почетак. Али да бисмо развили заједницу, биће нам потребан сјајан екосистем додатака. Проверите доступне уобичајене додатке или одељак додатака на веб локацији да бисте одмах започели развој додатка.
  • И још много тога…

Ресурси

  • Пацкем на ГитХуб-у
  • Мапа пута и захтеви за карактеристике
  • Службена страница компаније Пацкем
  • Креирање додатака са Пацкем-ом
  • Раздвајање кода помоћу Пацкема
  • Графикон модула

Пацкем није до 1.0 још . Ако сте закључили да вам је Пацкем уопште занимљив, покушајте да допринесете самом Пацкему стварањем додатака, ажурирањем документације, финансијском подршком, представљањем Пацкема на конференцијама или на било који други начин. Ценимо ваш труд!

Срећно спајање! ???