Да ли је Мојо најбољи језик за развој вештачке интелигенције?

За машинско учење и вештачку интелигенцију, Питхон је увек изгледао као доминантан програмски језик, са моћним библиотекама као што су НумПи, ТенсорФлов и ПиТорцх. Али брза провера ГитХуб страница ових библиотека ће вам показати да је већи део њиховог изворног кода написан у Ц и Ц++.

То је зато што је Питхон сувише спор за АИ. Мојо је нови програмски језик који покушава да комбинује брзину Ц/Ц++ са елеганцијом Питхон-а.

Мојо: Преглед

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

Користи парадигму СИМД – појединачна инструкција, више података да би искористила предност паралелизма. Такође је компајлиран тачно на време и ефикасан је у меморији.

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

Мојо је развио Модулар, компанија коју је основао Цхрис Латтнер – творац ЛЛВМ-а и програмског језика Свифт.

У закључку, Мојо је нови програмски језик дизајниран да буде синтаксички сличан Питхон-у, али брз као Ц/Ц++. Намењен је да се користи у развоју вештачке интелигенције и системском програмирању. Иако пројекат није завршен, он је невероватно обећавајући, а у следећем одељку ћемо разговарати зашто.

Карактеристике Мојо-а у односу на друге програмске језике

Мојо је постао невероватно популаран иако још није јавно доступан. То је зато што носи неколико значајних предности у односу на друге програмске језике када се изводи машинско учење и прави софтвер на нивоу система. У овом одељку ћемо разговарати о овим предностима.

#1. Изворна подршка за АИ и задатке машинског учења

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

  Како да закажете састанке у Оутлоок-у и повећате своју продуктивност

За већину језика опште намене као што је Питхон, потребне су додатне библиотеке да би се ово постигло, али Мојо то подржава одмах из кутије.

#2. Поједностављена синтакса и апстракције високог нивоа

Да бисмо писали брз и ефикасан софтвер, обично бисмо морали да користимо језике као што су Ц, Ц++ и Руст. Иако су ови језици брзи, они су изазовнији за учење и рад са њима. То је зато што вас терају да радите на ниском нивоу како бисте имали већу контролу.

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

#3. Интеграција са популарним АИ оквирима и библиотекама

Као што је раније поменуто, Мојо није потпуно нов језик – то је надскуп Питхон-а. Као резултат тога, добро се интегрише са постојећим библиотекама као што су НумПи и ПиТорцх. То значи да, подразумевано, Мојо има екосистем велики као Питхон.

#4. Ефикасно руковање подацима и могућности манипулације

Мојо је дизајниран да паралелно ефикасно манипулише више вредности. Ово је најкорисније када се изводи линеарна алгебра, на коју се машинско учење у великој мери ослања. Мојо је такође компајлиран тачно на време, тако да је бајт код оптимизован за брзину. Ово чини рад са подацима и машинско учење ефикасним у Мојо-у.

#5. Подршка за скалабилност и паралелно рачунарство

Као што је раније поменуто, Мојо је направљен да подржи парадигму „Једна инструкција – више података“ паралелног рачунарства. Ово је уграђено у Мојо и чини га бржим из кутије. Такође надмашује Питхон библиотеке као што је НумПи.

Кључни елементи Мојо-а

У овом одељку ћемо разговарати о томе како писати програме у Мојо-у. Пошто Мојо треба да буде надскуп Питхон-а, као што је ТипеСцрипт надскуп ЈаваСцрипт-а, сав важећи Питхон код је важећи Мојо код, али није сав Мојо код важећи Питхон код.

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

  Мусиек додаје банер заснован на покретима са контролама за пуштање музике [Jailbreak]

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

Синтакса и граматика

Пошто је Мојо надскуп Питхон-а, њихове синтаксе су идентичне. Као и Питхон, програм се састоји од изјава. Ове изјаве се могу груписати у блокове под функцијама, петљама или условним. Изјаве унутар блока су увучене. Ево примера програма написаног у Мојо:

def odd_or_even():
     for i in range(1, 101):
        if i % 2 == 0:
            print("Even")
        else:
            print("Odd")

odd_or_even()

Ово је савршено идентично Питхон програму. Међутим, Мојо нуди додатне функције које ћете видети у одељцима који следе.

Декларације променљивих

Уз Мојо, имате два додатна начина за декларисање променљивих. Можете користити кључну реч лет или вар. Кључна реч лет декларише непроменљиву променљиву. Једном иницијализована, не можете да доделите њену вредност нечему другом. С друге стране, променљиве декларисане помоћу вар могу се поново доделити пошто су променљиве.

Главна предност променљивих декларисаних помоћу лет или вар је та што подржавају спецификације типа. Следећи пример илуструје како су променљиве декларисане у Мојо-у.

let pi: Float64 = 3.141
var greeting = "Hello, World"

# This would be impossible
# pi = 6.283

# But this is possible
greeting = "Ola"

print(pi, greeting)

Структуре

Поред тога, на другачији начин декларисања променљивих, Мојо подржава структуре. Једноставан начин да видите структуре је да су као класе осим што су ригидније. За разлику од класа, не можете да додајете/уклањате или мењате методе док се извршавају, а сви чланови морају бити декларисани помоћу кључних речи вар или лет. Ова чвршћа структура омогућава Мојо-у да ефикасније управља меморијом и перформансама. Ево примера структуре:

struct Person:
    var name: StringLiteral
    var age: Int32
    
    fn __init__(inout self, name: StringLiteral, age: Int32):
        self.name = name
        self.age = age


john = Person("John Doe", 32)
print(john.name, john.age)

Функције

Из структуре изнад, можда сте приметили да смо декларирали метод __инит__ користећи кључну реч фн уместо деф. То је зато што у Мојо-у можете декларисати функције користећи фн и деф. Функција декларисана коришћењем фн је строжа у поређењу са деф.

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

fn say_hello(name: StringLiteral):
    print("Hello,", name)
    
# This would be invalid
# fn say_hello(name):
#     print("Hello,", name)

say_hello("John")

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

fn will_raise_error() raises:
    raise Error('Some error')
    
will_raise_error()

Преоптерећење

Мојо такође подржава операторе преоптерећења на основу различитих типова података. Ово подржава објектно оријентисани принцип полиморфизма.

fn add_numbers(a: Int32, b: Int32) -> Int32:
    return a + b

fn add_numbers(a: Int32, b: Int32, c: Int32) -> Int32:
    return a + b + c

let first_total = add_numbers(2, 3)
let second_total = add_numbers(1, 2, 3)

print(first_total, second_total)

Како се Мојо користи у развоју вештачке интелигенције

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

  Како подесити Енпасс на Линуку

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

Да ли је Мојо будућност развоја вештачке интелигенције

Тешко је предвидети како ће се технологија развити и усвојити. Већина предвиђања је погрешна, али то не значи да не можемо покушати. Да бисмо предвидели да ли ће Мојо вероватно заменити Питхон, размотримо Мојоове предности и недостатке/ограничења:

Предности

  • Веома је брз и направљен да искористи предност паралелизма без много рада, што је од суштинског значаја за машинско учење јер модели обуке могу да потрају много времена.
  • То је надскуп Питхон-а, стога је лакши за учење и има нежнију криву учења. Ово смањује трење за усвајање.
  • Смањује шансе за добијање грешака у продукцији јер се грешке као што су погрешно откуцана имена променљивих или неподударања типова хватају током времена компајлирања. Ово га чини пожељнијим.

Недостаци

  • Тренутно је недовршен. Али наравно, тим у Модулару ради на издавању језика и његовог преводиоца.
  • Колико год да поједностављује рад произвођача оквира, можда неће имати велику предност за кориснике оквира јер они већ користе оквире за машинско учење у Питхон-у.
  • Још увек нема велики екосистем алата и ресурса за учење. Иако можете да користите Питхон-ове библиотеке у Мојо-у, још увек можете да користите Питхон-ове библиотеке у Питхон-у. Да би Мојо имао било какву предност у односу на Питхон, потребне су му библиотеке које носе брзину Мојо-а.

Завршне речи

Ако постоји тренутна популарност, Мојо ће вероватно постати популаран АИ језик. Мислим да је сама брзина довољна да подстакне људе да се пребаце. Његова једноставност је плус. Али као што ТипеСцрипт није у потпуности заменио ЈаваСцрипт, вероватно је да Мојо неће у потпуности заменити Питхон.

Мојо је дефинитивно језик који треба да држите на свом радару када на крају сазри.

Затим погледајте тип у односу на интерфејс у ​​ТипеСцрипт-у.