Hallo, Habr! Ik presenteer onder uw aandacht een vertaling van het bericht van Stephen Wolfram
Vereisten voor de consistentie van de Wolfram-taal
Vandaag staan we op de drempel van grote prestaties samen met de programmeertaal
De Wolfram Function Repository is mogelijk gemaakt door de unieke aard van de Wolfram-taal, niet alleen als programmeertaal, maar ook als een
De functierepository van Wolfram bevat bijvoorbeeld al
Ook meer dan
Om naar de pagina te gaan, kopieert u het bovenstaande object (functie BLOB), plakt u het in de invoerregel en voert u vervolgens de functie uit - het is al ingebouwd in de Wolfram-taal en wordt standaard ondersteund, te beginnen met
Hierbij moet worden opgemerkt dat bij de verwerking
Ik hoop dat met de steun
Functies uit de repository kunnen kleine of grote stukjes code bevatten die zijn geschreven in de Wolfram-taal. Dit kunnen bijvoorbeeld oproepen zijn
De shell- en programmeerstructuur van de Wolfram Feature Repository is zo ontworpen dat iedereen op de meest eenvoudige en handige manier kan bijdragen aan het gemeenschappelijke doel - in feite gewoon
Er zijn veel afwegingen en details in deze aanpak, maar ons doel is om de Wolfram-functierepository te optimaliseren, zowel voor de gebruikerservaring als om ervoor te zorgen dat nieuwe gebruikersfuncties op betekenisvolle wijze bijdragen aan de ontwikkeling van de taal. Naarmate we groeien, twijfel ik er niet aan dat we nieuwe methoden zullen moeten uitvinden voor het verwerken en valideren van functies die in de repository zijn ingebouwd, niet in de laatste plaats voor het organiseren van grote aantallen functies en het vinden van de functies die gebruikers nodig hebben. Het is echter bemoedigend dat het pad dat we hebben gekozen een goed begin is. ik persoonlijk
Verhoging van de efficiëntie terwijl de kosten worden verlaagd
Zelfs vóór het internet waren er manieren om Wolfram Language-code te delen (ons eerste grote gecentraliseerde project was
Al meer dan 30 jaar heeft ons bedrijf hard gewerkt om de integriteit van de Wolfram-taalstructuur te behouden, en dit is van cruciaal belang om ervoor te zorgen dat de Wolfram-taal niet alleen een programmeertaal wordt, maar ook een
In de implementatiestructuur van elke functie vinden verschillende rekenprocessen plaats. Hierbij dient te worden opgemerkt dat het noodzakelijk is dat de functie een duidelijke en uniforme uitstraling en visuele leesbaarheid voor de gebruiker heeft. In deze context worden de ingebouwde functies van de Wolfram-taal gepresenteerd met meer dan 6000 opeenvolgende voorbeelden van hoe functies correct kunnen worden geprogrammeerd (dit zijn onze
Het creëren van een repository die echt goed werkt, is een interessante metaprogrammeringstaak. Een teveel aan beperkingen in het programma zal het bijvoorbeeld niet mogelijk maken om de vereiste unificatie en universaliteit van het algoritme te verkrijgen. Net als bij een onvoldoende aantal functionele beperkingen, zult u niet in staat zijn een voldoende correcte volgorde van algoritme-uitvoering te implementeren. Verschillende eerdere voorbeelden van de implementatie van een compromis van deze benaderingen, geïmplementeerd door ons bedrijf, werkten redelijk stabiel - deze zijn:
Alle bovenstaande voorbeelden hebben een fundamenteel kenmerk: de objecten en functies die in het project zijn verzameld, hebben een zeer hoge mate van structurering en distributie van processen. Natuurlijk kunnen de details van de structuur van wat een demo of een neuraal netwerk of iets anders is enorm variëren, maar de fundamentele structuur voor elke huidige repository blijft altijd hetzelfde. Dus wat is jouw mening, beste gebruiker, over het creëren van zo'n repository die uitbreidingen toevoegt aan de Wolfram-taal? De Wolfram-taal is ontworpen om extreem flexibel te zijn, zodat deze op elke manier kan worden uitgebreid en aangepast. Deze omstandigheid is uiterst belangrijk voor het vermogen om snel verschillende grootschalige softwareprojecten in de Wolfram-taal te creëren. Hierbij moet worden opgemerkt dat naarmate de flexibiliteit van de taal toeneemt, de kosten van projecten die in een dergelijke taal worden geïmplementeerd onvermijdelijk zullen stijgen. Dit komt door het feit dat hoe meer de gebruiker een dergelijke taal gebruikt, hoe meer specifieke functionaliteit hij krijgt, maar we mogen niet vergeten dat deze aanpak ook negatieve kanten kan hebben in termen van het onvermogen om consistente consistentie van programmamodules te garanderen.
Er is een veelvoorkomend probleem met bibliotheken in traditionele programmeertalen: als u bijvoorbeeld één bibliotheek gebruikt, werkt de code correct, maar als u meerdere bibliotheken probeert te gebruiken, is er geen garantie dat deze correct met elkaar zullen communiceren . Bovendien is er in traditionele programmeertalen - in tegenstelling tot een volwaardige computertaal - geen manier om de aanwezigheid van consistente ingebouwde representaties te garanderen voor andere functies of gegevenstypen dan hun basisstructuren. Maar in feite is het probleem nog groter dan het op het eerste gezicht lijkt: als je een grootschalige verticale functionaliteit bouwt, dan is het zonder de enorme kosten van gecentraliseerde projectprogrammering die we in de Wolfram-taal stoppen, onmogelijk om consistentie bereiken. Het is daarom belangrijk dat alle softwaremodules altijd correct samenwerken.
Het idee achter de Wolfram feature repository is dus om het hierboven geschetste probleem te vermijden door eenvoudigweg uitbreidingen aan de taal toe te voegen in relatief kleine stukjes code via individuele features die gemakkelijker te ontwikkelen zijn als samenhangende modules. Dat gezegd hebbende, zijn er programmeerfuncties die niet handig kunnen worden gemaakt met behulp van individuele functies (en ons bedrijf is van plan in de nabije toekomst een geoptimaliseerd programmeeralgoritme uit te brengen om grootschalige softwarepakketten te helpen implementeren). Op basis van de functies die al in de Wolfram-taal zijn ingebouwd, zijn er echter veel programmeermogelijkheden die worden geïmplementeerd op basis van individuele functies. Het idee hier is dat het met relatief weinig programmeerinspanning mogelijk is om een aantal nieuwe en zeer nuttige functies te creëren die voldoende samenhang in het ontwerp zullen bieden, goed op elkaar zullen worden afgestemd en bovendien zullen in de toekomst gemakkelijk en op grote schaal in de taal kunnen worden gebruikt.
Deze aanpak is uiteraard een compromis. Als er een groter pakket zou worden geïmplementeerd, zou er een hele nieuwe wereld van functionaliteit kunnen worden bedacht die buitengewoon krachtig en nuttig zou zijn. Als er behoefte is aan nieuwe functionaliteit die bij al het andere past, maar u niet bereid bent veel moeite te besteden aan de ontwikkeling van het project, kan dit helaas leiden tot een verkleining van de reikwijdte van uw project. Het idee achter de Wolfram feature repository is om functionaliteit te bieden aan een bepalend deel van een project; deze aanpak zal krachtige functionaliteit toevoegen en het tegelijkertijd gemakkelijker maken om een goede consistentie in een programmeerproject te behouden.
Hulp bij het toevoegen van aangepaste functies aan de functierepository
Ons team heeft hard gewerkt om het voor gebruikers gemakkelijk te maken om bij te dragen aan de functies van de Wolfram-repository. Op het bureaublad (al aanwezig
Er zijn twee hoofdstappen die u moet uitvoeren: ten eerste noteert u de code voor uw functie en ten tweede schrijft u documentatie op die illustreert hoe uw functie zou moeten werken.
Klik bovenaan op de knop 'Voorbeeld openen' om een voorbeeld te zien van wat u moet doen:
In wezen probeer je iets te creëren dat lijkt op een ingebouwde functie in de Wolfram-taal. Behalve dat het iets veel specifiekers kan doen dan een ingebouwde functie. Tegelijkertijd zullen de verwachtingen ten aanzien van de volledigheid en betrouwbaarheid veel lager zijn.
U moet uw functie een naam geven die voldoet aan de richtlijnen voor functienaamgeving van Wolfram Language. Bovendien moet u documentatie voor uw functie ontwikkelen, vergelijkbaar met de ingebouwde functies van de taal. Ik zal hier later meer in detail over praten. Merk voorlopig op dat er in de rij met knoppen bovenaan het definitienotitieboekjebestand een knop staat
Wanneer u zeker weet dat alles goed is ingevuld en u klaar bent, klikt u op de knop “Controleren”. Het is volkomen normaal dat u nog niet alle details kent. De functie "Check" wordt dus automatisch uitgevoerd en voert veel stijl- en consistentiecontroles uit. Vaak wordt u onmiddellijk gevraagd de correcties te bevestigen en te accepteren (bijvoorbeeld: "Deze regel moet eindigen met een dubbele punt", en wordt u gevraagd een dubbele punt in te voeren). Soms zal ze je vragen om zelf iets toe te voegen of te wijzigen. We zullen voortdurend nieuwe functies toevoegen aan de automatische functionaliteit van de knop Controleren, maar in feite is het doel ervoor te zorgen dat alles wat u indient in de functierepository al zoveel mogelijk stijlrichtlijnen volgt.
Dus nadat u "Check" hebt uitgevoerd, kunt u "Preview" gebruiken. Met "Preview" wordt een voorbeeld gemaakt van de documentatiepagina die u voor uw functie hebt gedefinieerd. U kunt ook een voorbeeld maken van een bestand dat op uw computer is gemaakt of van een bestand dat zich in de cloudopslag bevindt. Als u om wat voor reden dan ook niet tevreden bent met wat u in het voorbeeld ziet, ga dan gewoon terug en breng de nodige correcties aan, en klik vervolgens opnieuw op de knop Voorbeeld.
Nu bent u klaar om uw functie naar de repository te pushen. De knop Implementeren biedt u vier opties:
Het belangrijkste bij deze stap is dat u uw functie kunt indienen bij de Wolfram-functierepository, zodat deze voor iedereen beschikbaar is. Tegelijkertijd kunt u uw functie ook voor een beperkt aantal gebruikers plaatsen. U kunt bijvoorbeeld een functie maken die lokaal op uw computer wordt gehost, zodat deze beschikbaar is wanneer u die specifieke computer gebruikt. Of u kunt het in uw
Stel dat u uw functie daadwerkelijk wilt indienen bij de kennisbank van Wolfram-functies. Om dit te doen, klikt u op de knop "Verzenden" naar de repository. Dus wat gebeurt er op dit moment dan? Uw aanvraag wordt onmiddellijk in de wachtrij geplaatst voor beoordeling en goedkeuring door ons toegewijde team van curatoren.
Naarmate uw aanvraag het goedkeuringsproces doorloopt (wat doorgaans enkele dagen duurt), ontvangt u mededelingen over de status ervan en mogelijk suggesties voor toekomstig gebruik. Maar zodra uw functie is goedgekeurd, wordt deze onmiddellijk gepubliceerd in de Wolfram Feature Repository en kan deze door iedereen worden gebruikt. (En dit zal verschijnen in
Wat moet er in de opslag zitten?
Opgemerkt moet worden dat ons bedrijf zeer hoge eisen stelt aan volledigheid, betrouwbaarheid en algehele kwaliteit, en dat van de meer dan 6000 functies die we de afgelopen 30+ jaar al in de Wolfram-taal hebben ingebouwd, allemaal aan de bovenstaande vereisten voldoen. Het doel van de Wolfram Function Repository is om alle structuur en functionaliteit die al bestaat in de Wolfram-taal te gebruiken om zoveel mogelijk lichtere functies (dat wil zeggen functies met hogere prestaties) toe te voegen.
Uiteraard moeten functies in de Wolfram-functierepository voldoen aan de ontwerpprincipes van de Wolfram-taal - zodat ze volledig kunnen communiceren met andere functies en de verwachtingen van gebruikers over hoe de functie goed zou moeten werken. De functies hoeven echter niet even volledig of betrouwbaar te zijn.
Bij de ingebouwde functies van de Wolfram-taal werken we er hard aan om programmeerfuncties zo algemeen mogelijk te maken. Dat gezegd hebbende, als er in de Wolfram-functierepository niets mis is met het hebben van een functie daarin die eenvoudigweg een heel specifiek maar nuttig geval afhandelt. De functie bijvoorbeeld
Een ander punt met betrekking tot de ingebouwde functies is dat ons bedrijf er alles aan doet om alle atypische gevallen af te handelen, onjuiste invoer correct af te handelen, enzovoort. In een functierepository is het volkomen normaal dat er een speciale functie is die de belangrijkste gevallen van het oplossen van een probleem afhandelt en alle andere negeert.
Het voor de hand liggende punt is dat het beter is om functies te hebben die meer en beter doen, maar optimalisatie voor een functierepository (in tegenstelling tot de ingebouwde functies van de Wolfram-taal) zou meer functies moeten hebben, gebundeld met meer functies, in plaats van zich te verdiepen in de implementatieprocessen van elke specifieke functie.
Laten we nu eens kijken naar een voorbeeld van het testen van functies in een repository. De consistentieverwachtingen voor dergelijke functies zijn uiteraard veel lager dan voor ingebouwde taalfuncties. Dit geldt vooral in gevallen waarin functies afhankelijk zijn van externe bronnen zoals API's. Het is belangrijk om voortdurend consistente tests uit te voeren, wat automatisch gebeurt binnen de verificatiealgoritmen. In het nb-bestand kunt u expliciet definities opgeven (in de sectie Aanvullende informatie) en zoveel tests opgeven als gedefinieerd door invoer- en uitvoerreeksen of objecten met volledige karakters van het type
Als gevolg hiervan zal de functierepository een aantal implementatiecomplexiteiten kennen. Sommige zullen slechts één regel code bevatten, andere kunnen uit duizenden of tienduizenden regels bestaan, waarbij waarschijnlijk gebruik wordt gemaakt van vele helperfuncties. Wanneer is het de moeite waard om een functie toe te voegen waarvoor heel weinig code nodig is om te definiëren? Kortom, als er een functie is
Het belangrijkste doel van een functierepository (zoals de naam al doet vermoeden) is het introduceren van nieuwe functies in de taal. Als u nieuwe gegevens wilt toevoegen of
Er zijn eigenlijk twee manieren. Mogelijk wilt u een nieuw objecttype introduceren dat zal worden gebruikt in nieuwe functies in de functierepository. En in dit geval kunt u altijd gewoon de symbolische representatie ervan opschrijven en deze gebruiken bij het invoeren of uitvoeren van functies in een functierepository.
Maar wat als u een object wilt vertegenwoordigen en vervolgens, via bestaande functies in de Wolfram-taal, wilt definiëren dat u ermee wilt werken? De Wolfram-taal heeft hiervoor altijd een lichtgewicht mechanisme gehad, genaamd
Dus, wat kan er in de functiecode in een functierepository staan?
Moet alle code voor de Wolfram-functierepository in Wolfram worden geschreven? Zeker, de code in de externe API mag niet in de Wolfram-taal worden geschreven, die niet eens de taalcode maakt. Als u een functie in vrijwel elke externe taal of bibliotheek vindt, kunt u een wrapper maken waarmee u deze in de Wolfram-functierepository kunt gebruiken. (Meestal moet u hiervoor de ingebouwde functies gebruiken
Dus wat heeft het voor zin om dit te doen? In wezen stelt dit u in staat het volledige geïntegreerde Wolfram Language-systeem en de volledige uniforme set softwaremogelijkheden te gebruiken. Als u de basisimplementatie van een externe bibliotheek of taal verkrijgt, kunt u vervolgens de rijke symbolische structuur van de Wolfram-taal gebruiken om een handige functie op het hoogste niveau te creëren waarmee gebruikers eenvoudig alle reeds geïmplementeerde functionaliteit kunnen gebruiken. Dit zou op zijn minst haalbaar moeten zijn in een ideale wereld waarin alle bouwstenen voor het laden van bibliotheken enz. bestaan, in welk geval ze automatisch door de Wolfram-taal zouden worden afgehandeld. (Opgemerkt moet worden dat er in de praktijk problemen kunnen optreden
Trouwens, als je voor het eerst naar typische externe bibliotheken kijkt, lijken ze vaak te complex om in slechts een paar functies te worden behandeld, maar in veel gevallen komt een groot deel van de complexiteit voort uit het creëren van de infrastructuur die nodig is voor de bibliotheek en alle functies om deze te kunnen beheren. steun het. Wanneer echter de Wolfram-taal wordt gebruikt, is de infrastructuur doorgaans al in de pakketten ingebouwd, en het is dus niet nodig om al deze ondersteunende functies in detail bloot te leggen, maar alleen functies te creëren voor de "topste" applicatiespecifieke functies in de bibliotheek. .
"Ecosysteem" van de kennisbank
Als u functies heeft geschreven die u regelmatig gebruikt, dient u deze in bij de Wolfram Function Repository! Als hier niet meer uit komt (taalontwikkeling), dan is het zelfs dan veel handiger voor u om de functies voor persoonlijk gebruik te gebruiken. Het is echter logisch om aan te nemen dat als je de functies regelmatig gebruikt, andere gebruikers ze misschien ook nuttig zullen vinden.
Uiteraard kan het voorkomen dat u in een situatie terechtkomt waarin u uw functies niet kunt of wilt delen of waarin u toegang krijgt tot privé-informatiebronnen. Zelfs in dergelijke gevallen kunt u de functies eenvoudig in uw eigen cloudaccount implementeren,
De functies die u indient bij de Wolfram-functierepository hoeven niet perfect te zijn; ze moeten gewoon nuttig zijn. Dit lijkt een beetje op de sectie "Fouten" in klassieke Unix-documentatie - in de sectie "Definities" is er een sectie "Aantekeningen van de auteur" waar u beperkingen, problemen, enz. kunt beschrijven die u al kent over uw functie. Bovendien kunt u, wanneer u uw object naar de repository verzendt, indieningsnotities toevoegen die door een toegewijd team van curatoren worden gelezen.
Zodra een artikel is gepubliceerd, heeft de pagina onderaan altijd twee links: "
Soms wil je gewoon functies uit de Wolfram-functierepository gebruiken, zoals ingebouwde functies, zonder naar hun code te kijken. Als je echter even binnen wilt kijken, staat er bovenaan altijd een Kladblok-knop. Klik erop en u krijgt uw eigen kopie van het originele definitienotitieboekje dat naar de functierepository is verzonden. Soms kunt u het gewoon als voorbeeld gebruiken voor uw behoeften. Tegelijkertijd kunt u ook uw eigen aanpassing van deze functie ontwikkelen. Misschien wilt u deze functies die u uit de repository heeft gevonden op uw computer of in uw bladluis-cloudopslagaccount plaatsen, misschien wilt u ze indienen bij de functiekennisbank, misschien als een verbeterde, uitgebreide versie van de originele functie.
In de toekomst zijn we van plan om forking in Git-stijl te ondersteunen voor feature repository's, maar voor nu proberen we het simpel te houden, en we hebben altijd maar één geaccepteerde versie van elke feature ingebouwd in de taal. Vaker wel dan niet (tenzij ontwikkelaars stoppen met het onderhouden van de functies die ze hebben ontwikkeld en reageren op inzendingen van gebruikers), neemt de oorspronkelijke auteur van de functie de controle over de updates ervan en dient hij nieuwe versies in, die vervolgens worden beoordeeld en, als ze het beoordelingsproces doorstaan, , gepubliceerd in de taal.
Laten we eens kijken naar de vraag hoe "versiebeheer" van ontwikkelde functies werkt. Wanneer u op dit moment een functie uit de functierepository gebruikt, wordt de definitie ervan permanent opgeslagen op uw computer (of in uw cloudaccount als u de cloud gebruikt). Als er een nieuwe versie van een functie beschikbaar is, ontvangt u de volgende keer dat u deze gebruikt een bericht waarin u hiervan op de hoogte wordt gesteld. En als u de functie naar een nieuwe versie wilt bijwerken, kunt u dit doen met de opdracht
Een van de mooie dingen van de Wolfram Function Repository is dat elk Wolfram Language-programma, waar dan ook, functies ervan kan gebruiken. Als een programma in een notitieblok verschijnt, is het vaak handig om de repositoryfuncties te formatteren als gemakkelijk leesbare "functie binair object"-functies (misschien met een geschikte versieset).
U kunt altijd via tekst toegang krijgen tot elke functie in de functierepository
Hoe werkt het?
Binnen de functies in de Wolfram-repository is dit mogelijk met precies hetzelfde
Overwegen
Binnenin kun je wat informatie zien met behulp van de functie
Hoe werkt het instellen van een resourcefunctie? De eenvoudigste is een puur lokaal geval. Hier is een voorbeeld waarin een functie (in dit geval slechts een pure functie) wordt gebruikt en deze wordt gedefinieerd als een bronfunctie voor een bepaalde programmasessie:
Nadat u de definitie heeft gemaakt, kunt u de resourcefunctie gebruiken:
Houd er rekening mee dat er een zwart pictogram in deze functie-blob staat . Dit betekent dat de BLOB-functie verwijst naar de bronfunctie in het geheugen die voor de huidige sessie is gedefinieerd. Een bronfunctie die permanent op uw computer of cloudaccount is opgeslagen, heeft een grijs pictogram . En er is een oranje pictogram voor een officiële bronfunctie in de Wolfram Feature Repository .
Dus wat gebeurt er als u het menu Uitvouwen in het Definition Notebook gebruikt? Ten eerste neemt het alle definities in het notitieblok en creëert daaruit een symboliek
Lokale implementatie van een functie vanuit een repository op uw computer wordt uitgevoerd met behulp van de opdracht
Als u op de knop Verzenden klikt voor een functierepository, wat gebeurt er daaronder?
Standaard worden inzendingen gedaan onder de naam die is gekoppeld aan uw Wolfram-ID. Maar als u namens een ontwikkelteam of organisatie een aanvraag indient, kan dat wel
Nadat u een van uw functies hebt ingediend bij de functiekennisbank, wordt deze in de wachtrij geplaatst voor beoordeling. Als u als reactie hierop commentaar ontvangt, heeft dit doorgaans de vorm van een tekstbestand waaraan extra “commentaarcellen” zijn toegevoegd. U kunt de status van uw aanvraag altijd controleren door naar te gaan
Enkele subtiliteiten op het werk
Op het eerste gezicht lijkt het misschien alsof je gewoon een definitienotitieboekje kunt nemen en het woordelijk in een functierepository kunt plaatsen, maar er komen eigenlijk heel wat subtiliteiten bij kijken - en het hanteren ervan vereist behoorlijk complexe metaprogrammering en het omgaan met symbolische verwerking als de code die de functie definieert, en het Kladblok zelf is gedefinieerd. Het meeste hiervan gebeurt intern, achter de schermen, maar het kan enkele implicaties hebben die de moeite waard zijn om te begrijpen als je gaat bijdragen aan de kennisbank van functies.
Eerste onmiddellijke subtiliteit: wanneer u het Definition Notebook invult, kunt u eenvoudig overal naar uw functie verwijzen met een naam als Mijn Functie, wat lijkt op een gewone naam voor een functie in de Wolfram-taal, maar voor documentatie over functierepository's is dit vervangen
De tweede subtiliteit: wanneer u een resourcefunctie maakt vanuit het Definition Notebook, moeten alle afhankelijkheden die betrokken zijn bij de functiedefinitie worden vastgelegd en expliciet worden opgenomen. Om er echter voor te zorgen dat de definities modulair blijven, moet je alles in een uniek bestand stoppen
Normaal gesproken zult u nooit enig spoor zien van de code die wordt gebruikt om deze naamruimte te configureren. Maar als u om de een of andere reden een te weinig uitgevoerd symbool binnen uw functie aanroept, zult u zien dat dit symbool zich in de interne context van de functie bevindt. Bij het verwerken van het Definitiekladblok is echter in ieder geval het symbool dat overeenkomt met de functie zelf
De functierepository is bedoeld voor het definiëren van nieuwe functies. En deze functies kunnen opties hebben. Vaak zijn deze parameters (bijvoorbeeld
De meeste functies doen gewoon wat ze moeten doen elke keer dat ze worden aangeroepen, maar sommige functies moeten worden geïnitialiseerd voordat ze in een bepaalde sessie kunnen worden uitgevoerd - en om dit probleem op te lossen is er een sectie "Initialisatie" in de sectie Definitie.
Functies uit een repository kunnen andere functies gebruiken die zich al in de repository bevinden; om definities in te stellen voor een functierepository die twee (of meer) functies bevat die naar elkaar verwijzen, moet u deze in uw programmasessie implementeren, zodat u verwijzing zoals op hen
Ontwikkelingsperspectieven. Wat moet er gebeuren als de repository echt groot wordt?
Vandaag lanceren we net de Wolfram Feature Repository, maar in de loop van de tijd verwachten we dat de omvang en functionaliteit ervan dramatisch zullen toenemen, en naarmate de ontwikkeling ervan groeit, zullen er verschillende problemen optreden waarvan we al verwachten dat ze zich kunnen voordoen.
Het eerste probleem betreft functienamen en hun uniciteit. De functierepository is zo ontworpen dat u, net als de ingebouwde functies in de Wolfram-taal, naar elke bepaalde functie kunt verwijzen door simpelweg de naam ervan op te geven. Maar dit betekent onvermijdelijk dat functienamen globaal uniek moeten zijn in de hele repository, zodat er bijvoorbeeld maar één kan zijn
Dit lijkt in eerste instantie misschien een groot probleem, maar het is de moeite waard om te beseffen dat het in principe hetzelfde probleem is als voor zaken als internetdomeinen of social media-handvatten. En het feit is dat het systeem eenvoudigweg een registrar nodig heeft - en dit is een van de rollen die ons bedrijf zal vervullen voor de kennisbank van de Wolfram-functie. (Voor privéversies van een repository kunnen hun registrars beheerders zijn.) Natuurlijk kan een internetdomein worden geregistreerd zonder dat er iets op staat, maar in een functierepository kan een functienaam alleen worden geregistreerd als er een daadwerkelijke definitie is van de functie.
Een deel van onze rol bij het beheren van de kennisbank van Wolfram-functies is ervoor te zorgen dat de naam die voor een functie wordt gekozen logisch is gezien de definitie van de functie en dat deze de naamgevingsconventies van Wolfram Language volgt. We hebben meer dan 30 jaar ervaring met het benoemen van ingebouwde functies in de Wolfram-taal, en ons team van curatoren zal die ervaring ook naar de functierepository brengen. Natuurlijk zijn er altijd uitzonderingen. Het lijkt bijvoorbeeld de voorkeur te hebben om voor een bepaalde functie een korte naam te hebben, maar het is beter om te ‘verdedigen’ met een langere, specifiekere naam, omdat de kans kleiner is dat je iemand tegenkomt die in de toekomst een vergelijkbare functienaam wil maken. .
(Hier moet worden opgemerkt dat het simpelweg toevoegen van een lidtag om functies ondubbelzinnig te maken niet het beoogde effect zal hebben. Tenzij u erop staat altijd een tag toe te wijzen, moet u voor elke gegeven functie een standaardtag definiëren en ook auteurtags toewijzen. , waarvoor opnieuw mondiale coördinatie nodig zou zijn.)
Naarmate de kennisbasis van Wolfram-functies groeit, is een van de problemen die zich waarschijnlijk zullen voordoen de vindbaarheid van functies, waarvoor het systeem zorgt
Voor ingebouwde functies in de Wolfram-taal is er een zogenaamde detectielaag voorzien
De Wolfram-functierepository is geconfigureerd als een persistente functierepository, waarbij elke functie daarin altijd zal werken. Uiteraard kunnen er nieuwe versies van functies beschikbaar komen, en we verwachten dat sommige functies na verloop van tijd verouderd zullen raken. De functies zullen werken als ze in programma's worden gebruikt, maar hun documentatiepagina's zullen linken naar nieuwe, meer geavanceerde functies.
De Wolfram Feature Repository is ontworpen om u te helpen snel nieuwe functies te ontdekken en nieuwe manieren te leren om de Wolfram-taal te gebruiken. We zijn erg optimistisch dat een deel van wat in de feature repository is onderzocht uiteindelijk zinvol zal zijn om ingebouwde delen van de Wolfram-kerntaal te worden. De afgelopen tien jaar hebben we een soortgelijke set gehad
Het belangrijkste hier is dat een functie in een functierepository iets is dat op dit moment door elke gebruiker kan worden gebruikt. Het is mogelijk dat een functie in de moedertaal veel beter en performanter zou kunnen zijn, maar een functierepository zou gebruikers in staat stellen meteen toegang te hebben tot alle nieuwe functies. En het allerbelangrijkste: dankzij dit concept kan iedereen alle nieuwe functies toevoegen die hij of zij wil.
Eerder in de geschiedenis van de Wolfram-taal zou dit idee niet zo goed hebben gewerkt als nu, maar in dit stadium wordt er zoveel moeite in de taal gestoken en is er zo'n diep begrip van de taalontwerpprincipes dat het nu heel erg lijkt Het is voor een grote gemeenschap van gebruikers mogelijk om functies toe te voegen die de ontwerpconsistentie behouden en ze bruikbaar maken voor een breed scala aan gebruikers.
Er is een ongelooflijke geest van talent (?) in de gebruikersgemeenschap van Wolfram Language. (Natuurlijk omvat deze gemeenschap veel vooraanstaande R&D-mensen op verschillende gebieden.) Ik hoop dat de Wolfram Feature Repository een effectief platform zal bieden voor het ontsluiten en verspreiden van deze geest van talent. Alleen samen kunnen we iets creëren dat het gebied waarop het Wolfram-taalcomputerparadigma kan worden toegepast aanzienlijk zal uitbreiden.
In meer dan 30 jaar hebben we een lange weg afgelegd met de Wolfram-taal. Laten we nu samen nog verder gaan. Ik moedig alle gerespecteerde gebruikers van de Wolfram-taal over de hele wereld sterk aan om de functionele repository als platform hiervoor te gebruiken, evenals het nieuwe softwareproject zoals de Free Wolfram Engine for Developers.
Bron: www.habr.com