Skip to main content

Ocaml handel system


Jag är helt ny på Algorithmic Trading-domänen. Jag har precis avslutat en kurs som var Ocaml-baserad och läs om Jane Street. Självklart är de ett stort företag med en stor mängd resurser men det är möjligt att använda Ocaml för små algoritmiska handel . Jag vet att det förmodligen verkar som en dum fråga, men från vad jag har funnit finns det inga handels API för Ocaml. Det skulle innebära att man skulle behöva skriva från början. En annan insikt skulle bli uppskattat killar, som jag sa att jag är en komplett noob till denna domain. asked apr 19 13 på 15 12.closed as off ämne av chrisaycock martin clayton Luc M Dan Esparza Peter O Apr 19 13 på 17 54.Questions on Stack Overflow förväntas relatera till programmering inom ramen definierad av samhället Överväg att redigera frågan eller lämna kommentarer till förbättring om du tror att frågan kan omformuleras för att passa inom ramen Läs mer om att återuppta frågor här Om denna fråga kan omformuleras för att passa reglerna i Hjälpcenter vänligen redigera frågan. OCAML är den mest populära varianten av Caml-språket. Från en språklig synpunkt utökar den det centrala Caml-språket med ett fulländat objektorienterat lager, samt ett kraftfullt modulsystem som alla är anslutna av en Ljud, polymorf typsystem med typinferens. OCaml-systemet är en implementering av industriell styrka av detta språk, med en högpresterande native code compiler ocamlopt för 9 processorarkitekturer IA32, PowerPC, AMD64, Alpha, Sparc, Mips, IA64, HPPA, StrongArm, samt en bytecode compiler ocamlc och en interaktiv read-eval-print-loop ocaml för snabb utveckling och portabilitet. OCaml-distributionen innehåller ett omfattande standardbibliotek, en replay-debugger ocamldebug, lexer ocamllex och parser ocamlyacc generatorer, processor pretty-printer camlp4 och en dokumentationsgenerator ocamldoc. OCaml-systemet är öppen källkodsprogram som kompilatorn distribueras enligt villkoren i Q Public License, och jag ts-biblioteket är under LGPL, läs licensdokumentet för mer information. En licens för BSD-stil är också tillgänglig mot en avgift via Caml Consortium. Den senaste versionen kan laddas ner gratis på den här webbplatsen, och dess användarhandbok finns också tillgänglig online . Senast uppdaterad av den här sidan 2004-05-01 Webbplatskarta Sök INRIA 1995-2013 Alla rättigheter reserverade. Sammanfattning för massorna. Varför nästa språk du lär dig ska vara funktionellt. Jeron Minsky, Jane Street. Ibland är den eleganta implementeringen en Funktion Inte en metod Inte en klass Inte en ram En funktion bara - John Carmack. Funktionell programmering är en gammal idé med en framstående historia Lisp, ett funktionellt språk inspirerat av Alonzo Church s lambda-calculus, var ett av de första programmeringsspråk som utvecklats på gryning av datoråldern Statiskt typade funktionsspråk som OCaml och Haskell är nyare, men deras rötter går djupt ML, från vilket de faller, går tillbaka till arbetet av Robin Milner i början av 70-talet om pionjären Ingående LCF Logic för Computable Functions teoremprover. Funktionell programmering har också varit enormt inflytelserik Många grundläggande framsteg inom programmeringsspråk design, från skräpsamling till generics för att skriva inferens, kom ut ur funktionsvärlden och var vanliga där årtionden innan de gjorde det till andra Språk. De funktionella språken gjorde aldrig det vanliga. De kom närmast kanske i Symbolics och Lisps maskiner, men dessa dagar verkar ganska avlägsna. Trots en återkommande funktionell programmering under de senaste åren är det fortfarande en Tekniken talade mer än använd. Det är frestande att dra slutsatsen att funktionsspråk inte har vad som krävs. De kan vara meningsfulla för vissa begränsade applikationer och innehålla användbara begrepp som ska importeras till andra språk men nödvändiga och objektorienterade språk är helt enkelt bättre lämpade för de flesta mjukvaruutvecklingarna. Att missa det är det här n har fel Jag har använt OCaml i en produktionsmiljö i nästan ett årtionden och över den tiden har jag blivit övertygad om att funktionella språk, och särskilt statiskt skrivna som OCaml och Haskell, är utmärkta generella programmeringsverktyg bättre än något befintligt vanligt språk De har också ett enormt utbud, som passar bra för små skriptuppgifter samt storskaliga högpresterande applikationer. De är inte rätt verktyg för alla jobb, men de kommer överraskande nära. Flytta till OCaml. De flesta av mina erfarenhetsprogrammering i OCaml kom genom mitt arbete på Jane Street, ett finansiellt företag grundat år 2000 För nio år sedan hade ingen på Jane Street hört talas om OCaml. Idag är Jane Street den största industriella användaren av språket, med nästan två miljoner linjer med OCaml-kod och 65 som slutligen räknar med anställda som använder språket dagligen. Förmodligen är det bästa sättet att förklara vad som gör OCaml ett så effektivt verktyg att börja med att förklara hur och varför t Hat transformation ägde rum För att förstå det måste du först förstå något om vad Jane Street gör. Jane Street s kärnverksamhet ger likviditet på världens elektroniska marknader Det är i huvudsak en mellanhand Den lägger ständigt order på många olika värdepapper på Många olika utbyten Varje order uttrycker en vilja att antingen köpa eller sälja en viss säkerhet till ett visst pris, och tillsammans är de en annons till marknaderna i Jane Streets tjänster. Genom dessa order köper företaget från personer som behöver sälja och sälja till personer som behöver köpa, tjäna pengar från klyftan mellan köp - och försäljningspriserna. Alltid konkurrerar det om priset med andra spelare som försöker göra samma sak. Den elektroniska likviditetsbestämmelsen är tekniskt intensiv, inte bara på grund av beräkningsresurserna som behöver användas en enorm mängd data måste konsumeras, analyseras och reageras i realtid, men också när det gäller Komplexiteten i företagshandeln kan korsa flera börser, regleringssystem, säkerhetsklasser och tidszoner Att hantera den resulterande komplexiteten är en skrämmande uppgift som kräver en betydande investering i programvara. Allt denna teknik bär risk. Det finns inget snabbare sätt för ett handelsföretag att Förstör sig än att distribuera en del av handelsprogramvara som gör ett dåligt beslut om och om igen i en tight loop Del av Jane Street s reaktion på dessa tekniska risker var att lägga ett mycket starkt fokus på att bygga programvara som var lättförståelig programvara som var läsbar. Reading code var en del av företagets strategi att riskera innan vi hade skrivit vår första rad av OCaml Early on, ett par av de äldsta handelsföretagen, inklusive en av grundarna engagerade sig i att läsa varje kodlinje som gick in i core trading System, innan dessa system gick i produktion Detta var en enorm pågående tidsinvestering och återspeglade den höga nivån av oro för tekniken risk. Jag börjar Ed på Jane Street året efter att jag avslutat min Ph D-jobb där på deltid medan jag gjorde en post doc. Mitt arbete på Jane Street var inriktat på statistisk analys och optimering av handelsstrategier och OCaml var det primära redskapet jag brukade få analysen varför Varför OCaml jag hade lärt mig det på grundskolan och blev kär i språket då Och OCaml var en bra match för denna typ av snabbprototyparbete mycket prestanda, men ändå snabbare och mindre felaktig än kodning i C, C, eller Java. Jag var övertygad om att min stint på Jane Street skulle vara kort och koden jag skrev var all bortkastning så jag valde att maximera min egen produktivitet utan att oroa sig för om andra skulle kunna använda koden senare Sex månader och 80 000 rader av kod senare insåg jag att jag hade fel Jag tog en heltidsposition på Jane Street och började snart anställa för att skapa en forskargrupp där. Vid denna tid kastade företaget för ett nytt tillvägagångssätt för att bygga programvara. Systemen som driver företaget in de första åren var huvudsakligen skrivna i VBA och C. Kärnhandelssystemen var själva Excel-kalkylblad med en hel del anpassad VBA-kod. Det var ett bra sätt att snabbt komma igång, men det var klart från början att detta var Inte ett hållbart tillvägagångssätt. Under 2003 började Jane Street skriva om sina kärn handelssystem i Java. Omskrivningen avbröts så småningom, delvis för att den resulterande koden var för svår att läsa och motiverade om mycket svårare än VBA att Ersattes En stor del av detta var Java s verbositet, men det var mer än att VBA-koden skrevs i en tät, rakt framåt stil som var ganska lätt att följa. Men på något sätt när man kodade i Java byggde vi upp ett bo av Klasser som lämnade människor att skrapa huvudet när de ville förstå precis vilken kodkod som faktiskt åberopades när en viss metod kallades Kod som gjorde stor användning av arv var särskilt svårt att tänka på, delvis b Av det sätt som arvet anländer under abstraktionsgränser. Under 2005, inrymd av forskningsgruppens framgång, inledde Jane Street ytterligare en omskrivning av sina kärnhandelssystem, den här gången i OCaml Den första prototypen gjordes om tre månader och var uppe och handel tre månader efter det. Användningen av OCaml i företaget har bara utvidgats sedan dess. Idag används det för att lösa problem i alla delar av företaget, från redovisning till systemadministration, och den ansträngningen fortsätter att växa. Under de senaste åren har handeln sidan av företaget har ökat sin användning av språket och OCaml-utbildning är nu en standard del av läroplanen för nya handelshyror Övergripande har övergången till OCaml varit en stor framgång, vilket resulterade i en starkare teknik än vad vi kunde ha uppnått annars . Vad handlar det om språket som får det att fungera så bra Här är en kort sammanfattning av vad jag uppfattar som OCaml s nyckelstyrkor. Konklusion Vår erfarenhet av OCaml på forskningssidan övertygade oss om att vi kunde bygga mindre, enklare och lättare förstå system i OCaml än vi kunde på språk som Java eller C För en organisation som värderades läsbarhet var det en stor vinst. Feldetektering Programmerare som är nya för OCaml blir ofta övertygade om graden av vilken typsystemet fångar buggar. Det intryck du får är att när du klarar av att få typkontrollen att godkänna din kod finns inga fel kvar. Det här är inte riktigt sant, självklart, OCaml s typsystem är hjälplöst mot många buggar. Det finns dock en överraskande bred bit av buggar mot vilka typsystemet är effektivt, inklusive många buggar som är ganska svåra att klara av genom testning. Prestanda Vi fann att OCamls prestanda var i nivå med eller bättre än Java s, och inom spridningsavstånd för språk som C eller C Förutom att ha en högkvalitativ kodgenerator har OCaml en inkrementell GC sopsamlare. Detta betyder GC kan ställas in för att göra små bitar av arbete åt gången, vilket gör den mer lämplig för mjukvara i realtid, som elektronisk handel. Ren, för det mesta Trots hur funktionella programmerare ofta talar om det är mutable state en grundläggande del av programmeringen, och en som inte kan och bör inte göras bort med att skicka ett nätverkspaket eller skriva till disk är exempel på mutability Ett fullständigt engagemang för oföränderlighet är ett åtagande att aldrig bygga någonting real. Mutable State har sina kostnader, men mutationsfri kod är i allmänhet lättare att motivera, vilket gör interaktioner och beroenden mellan olika delar av din kodbas tydligt och lättare att hantera OCaml slår en bra balans här, vilket gör mutation Enkelt, men att göra oföränderliga datastrukturer som standard En välskriven OCaml-system har nästan alltid mutabel stat, men det tillståndet är noggrant begränsat. Det är kanske det enklaste av dessa fördelar att visa konkret är det för koncisionen. lika kort, kortare kod är lättare att läsa, lättare att skriva och lättare att underhålla. Det finns självklart gränser, inget bra är det E genom att reducera alla dina funktionsnamn till enstaka tecken, men korthet är ändå viktigt, och OCaml gör mycket för att hålla kodbasen liten. En fördel som OCaml tar till bordet är typinferens, vilket undanröjer behovet av många typdeklarationer. Detta lämnar du med kod som är ungefär lika kompakt som kod skrivet i dynamiska språk som Python och Ruby Samtidigt får du prestanda och korrekthet av statiska typer. Tänk på följande OCaml-funktionskarta för att omvandla elementen i en tuple. Here , kartan definieras som en funktion med två argument en funktion f och en trippel x, y, z Observera att fx är syntaxen för att tillämpa funktionen f till x. Nå fundera på hur detta skulle se ut i C 4 0 C-koden, Medan funktionellt ekvivalent ser rodd ut, med den verkliga strukturen fördunklad av syntaktisk brus. En annan källa till koncision är OCaml s-notation för att beskriva typer. I hjärtat av den här notationen är begreppet algebraisk datatyp Algebraisk data typerna är vad du får när du har ett system som innehåller två sätt att bygga upp nya typer av produkter och summor. En produkttyp är mer bekant av de två Tuples, poster, structs och objekt är alla exempel på produkttyper. En produkttyp Kombinerar flera värden av olika typer i ett enda värde. Dessa kallas produkttyper eftersom de matematiskt motsvarar kartesiska produkter av de ingående typerna. En sumtyp motsvarar en ojämn fackförening av de olika typerna och den används för att uttrycka flera möjligheter. Var produkt Typer används när du har flera saker samtidigt a och b och c, summa typer används när du vill räkna upp olika möjligheter a eller b eller c Sumtyper kan simuleras om än något klumpigt i objektorienterade språk som Java Med hjälp av underklasser och de visas som facktyper i C Men stödet i typsystemen i de flesta språk för att interagera med summor på ett säkert sätt är överraskande svagt. Figur 1 pro Vet ett exempel på algebraiska datatyper på jobbet Koden definierar en typ för att representera booleska uttryck över en uppsättning baspresikat och en funktion för att utvärdera dessa uttryck Koden är generisk över uppsättningen av baspredikat, så ämnet för dessa uttryck kan vara allt från heltal ojämlikheter till inställningarna för compiler flaggor. Summan typ expr anges av rören som skiljer deklarationens olika armar. Vissa av dessa armar, som True och False, är enkla taggar, inte väsentligt annorlunda än element i en uppräkning i Java eller C Andra, till exempel och och inte har tillhörande data, och att data varierar mellan fallen. Denna typ innehåller faktiskt både summor och produkter, med och och eller grenar som innehåller tupler. Typer som består av lagrade kombinationer av produkter och summor är vanliga Och kraftfullt idiom i OCaml. En anmärkningsvärd bit av syntax är typvariabeln en A-variabel kan instanseras med vilken som helst typ, och det här gör det möjligt för Kod för att vara generisk över uppsättningen av baspredikat Detta liknar hur generiska typer hanteras i Java eller C Således skulle Java s A List återges som en lista i OCaml. Funktionen eval tar två argument expr, uttrycket att vara Utvärderas och utvärderar en funktion för att utvärdera baspredikaten Koden är generisk i den meningen att eval kan användas för uttryck över vilken typ av baspredikat som helst, men evalbase måste tillhandahållas för att utvärdera sanningen eller falskheten hos dessa baspredikater Funktionen eval Definieras som stenografi för att åberopa rekursiva samtal till eval med evalbase som argument. Slutligen används matchningsuppsättningen för att göra en fallanalys av de möjliga strukturerna i uttrycket, kallar sig till evalbase vid utvärdering av ett basprotikat och på annat sätt fungerar som en Enkel återgång över strukturen hos datatyperna. Figur 2 visar hur samma kod kan göras i Java. Omsättningen är omedelbart slående. Lägga till ett enda fall, som t. ex. Kes två korta rader i OCaml och åtta i Java och Java-koden är faktiskt ganska minimal eftersom dessa saker går. Om du vill tillåta skapandet av andra algoritmer kring denna uttryckstyp som inte är bakad i klassdefinitionen, vill du förmodligen Använd besökarmönstret, vilket kommer att blåsa upp räkneantalet avsevärt. En annan fasett på språket som kräver ytterligare förklaring är att typsystemet kan fånga buggar. Människor som inte är bekanta med OCaml och relaterade språk och vissa som ofta gör misstag att underskatta kraften i typsystemet Det är lätt att dra slutsatsen att allt som typsystemet gör för dig är att du passerade parametrarna korrekt, till exempel att du gav en flottör där du skulle ge en flottör. Men det är s Mer till det än att även naiv användning av typsystemet är otroligt bra att fånga buggar. Överväga följande Python-kod för att förstöra en lista, dvs ta bort sekventiella duplikat. Denna kod lo Okej ganska enkelt, men det har en bugg det gör det inte ordentligt att hantera slutet av listan Här är ett sätt att fixa det. Nu får vi se vad som händer när man skriver mer eller mindre samma funktion i OCaml, med mer eller mindre samma sak Bug. This använder OCaml s mönster-matchande syntax för att få tillgång till elementen i listan Här är listkonstruktören och indikerar en tom lista Således matchar fallet den tomma listan och xy resten fallen matchar listor som minst har två element, x och y Den variabla viljan avser den potentiellt tomma resten av listan. Liksom Python-exemplet misslyckas den här koden med att tänka på vad som händer när du kommer till slutet av listan och har bara ett element kvar. I det här fallet, men du hittar reda på problemet inte vid körning men vid kompileringstid Kompilatorn ger följande fel. Det saknade fallet är en lista med ett enda element. Du kan fixa koden och uppfylla kompilatorn genom att lägga till en hanterare för den saknade fallet. Felet här är en trivial en skulle lätt kunna hittas genom att testa men typsystemet gör lika bra för att exponera fel som är svåra att testa, antingen för att de bara dyker upp i udda hörnfall som är lätta att missa i testning eller för att de dyker upp i komplexa system som är svåra att mocka upp och träna uttömmande. Tryck ut ur lådan, OCaml är ganska bra för att fånga buggar, men det kan göra ännu mer om du utformar dina typer noggrant. Tänk på följande exempel för att representera tillståndet för en nätverksanslutning. Typen för anslutningsstationen är en enkel uppräkning av tre namngivna stater att anslutningen kan vara i anslutningsinfo är en skivtyp som innehåller ett antal fält som beskriver olika aspekter av en anslutning. Observera att fälten som har alternativet i slutet av typen är i huvudsak nollställbara Fält Som standard garanteras värden i OCaml att vara icke-null. Annars än det finns ingenting om den här koden som är allt som skiljer sig från vad du kanske skriver i Java eller C. Här finns några i bildning på de enskilda skivfälten och hur de relaterar till varandra. servern anger serverns identitet på andra sidan anslutningen. lastningtime och lastpingid är avsedda att användas som en del av ett protokoll som håller levande Observera att båda dessa fält ska vara närvarande, eller att ingen av dem också borde vara närvarande endast när staten är ansluten. Sessionsperioden är en unik identifierare som väljs upp varje gång anslutningen återupprättas. Den bör också vara närvarande endast när staten är ansluten. närinitiated är för att hålla reda på när försöket att starta anslutningen började, som kan användas för att bestämma när försöket att ansluta bör överges. Detta bör vara närvarande endast när tillståndet är Anslut. Whendisconnected håller reda på när anslutningen gick i avkopplat tillstånd och borde vara närvarande endast i det tillståndet. Som du kan se, knyter ett antal invariants samman de olika skivfälten Att behålla sådana invariants tar verkligt arbete Du måste dokumentera dem noggrant så att du Don t resa över dem senare måste du skriva tester för att verifiera invarianterna och du måste utöva varaktig försiktighet för att inte bryta invarianterna när koden utvecklas. Men vi kan bättre. Tänk på följande omskrivning. Vi har nu en kombination av produkt och summa typer som mer exakt representerar uppsättningen tillåtna tillstånd för en anslutning I synnerhet finns en annan skivtyp för var och en av de tre staterna, som varje innehåller den information som är relevant bara för det tillståndet. Information som alltid är relevant i detta fall, bara Servern är skjuten till toppnivån. Vi har också gjort det tydligt att lastningstiden och sistnämnden antingen är närvarande eller båda frånvarande genom att representera th em som lastning vilket är ett valfritt par. Genom att göra allt detta har vi inbäddat i typen många av de nödvändiga invarianerna Nu när invarianterna är en del av typerna kan kompilatorn upptäcka och avvisa kod som skulle bryta mot dessa invarianter. Detta är både mindre arbete och mer tillförlitligt än att behålla sådana invarianter för hand. Exemplet använder algebraiska datatyper för att koda invarianter, men OCaml har andra verktyg för att göra samma OCaml s modulsystem är ett exempel som låter dig ange invariants i gränssnittet för en modul Till skillnad från de flesta objektorienterade språk gör OCaml det möjligt att uttrycka komplexa gemensamma invarianter över flera olika typer. Ocaml s moduler är i allmänhet ett kraftfullt verktyg för att bryta ner en kodbas i små, förståbara bitar där interaktionerna mellan dessa bitar ligger under Programmerarens explicit kontroll. Typsystemets förmåga att fånga buggar är värdefull även för små ensamma projekt, men det skiner verkligen i en samarbetsmiljö ent där flera utvecklare arbetar tillsammans med en långvarig kodbas Förutom att hitta buggar spelar signaturer en överraskande värdefull roll som en slags garanterad korrekturdokumentation. I samband med en utvecklad kodbas, varierar invarianter av typen Systemet har fördelen av att vara mer hållbar än de som verkställs enligt konventionen, eftersom de är mindre benägna att bli brutna av en annan utvecklare av misstag. Inget av detta är att säga att OCaml är utan sina brister. Det finns ju alla problem associerad med att vara ett minoritetsspråk OCaml har en bra community som har genererat en rik uppsättning bibliotek, men den samlingen av bibliotek pales i jämförelse med vad som är tillgängligt för Python, C eller Java På liknande sätt utvecklingsverktyg som IDEs, profilers och debuggers finns där, men är betydligt mindre mogna och funktionella än deras kusiner på mer vanliga språk. En annan begränsning av OCaml har att göra med parallellitet. OCaml runtime har en enda r untime lock, vilket innebär att man måste använda flera processer för att utnyttja flera kärnor på en enda maskin. För det mesta passar detta till vår utvecklingsmodell, och vi föredrar att meddelandet skickas till delade minnesgängor som en programmeringsmodell för parallellitet, eftersom det Leder till kod som är lättare att räkna om och det vågar bättre till system som korsar flera fysiska maskiner. Verktygen som finns i den bredare OCaml-världen för att göra denna typ av multiprocessprogrammering är emellertid fortfarande mogna. Men OCaml s begränsningar är inte grundläggande i natur De har mer att göra med detaljerna i genomförandet eller språkets popularitet och inte med själva språket. I slutändan är det det som jag tycker mest förbryllande. Jag är nu ganska övertygad om att kärnidéerna bakom OCaml är enormt värdefulla, vilket framgår av det faktum att OCaml själv, oavsett dess begränsningar, är ett djupt effektivt och kraftfullt verktyg. Dessa idéer förblir dock envis utanför mainstream. Perha ps detta är äntligen på väg att byta språk som F och Scala tar med sig några av idéerna bakom OCaml och Haskell till en bredare publik genom att integrera sig inom Dotnet - och Java-ekosystemen. Kanske 10 år från nu kommer vi inte längre måste fråga varför dessa idéer har misslyckats med att fånga på i den bredare världen Men det finns ingen anledning att vänta Du kan lägga till OCaml till din verktygslåda nu. LOVE IT, HATE IT LET US KNOW. Yaron Minsky tog sin Ph D i datavetenskap från Cornell University 2002, med fokus på distribuerade system Under 2003 gick han med i Jane Street där han grundade den kvantitativa forskargruppen och sedan 2007 har han lyckats med teknologikoncernen där 2011 ACM 1542-7730 11 0900 10 00. Ursprungligen publicerad i Queue vol 9, nr 9 se denna post i ACM Digital Library. Robert C Seacord - Uninitialized Read Förstå de föreslagna revisionerna till C-språket. Carlos Baquero, Nuno Pregui a - Varför logiska klockor är lätta Ibland är allt du behöver rätt lan Guage. Erik Meijer, Kevin Millikin, Gilad Bracha - Spicing Up Dart med biverkningar En uppsättning förlängningar till Dart-programmeringsspråket, utformat för att stödja asynkron - och generatorfunktioner. Dave Long - META II Digital Vellum i Digital Scriptorium Revisiting Schorre s 1962 Compiler-compiler. Bilyan Borisov fre, 24 jan 2014 15 01 30 UTC. Storartikel Enligt min mening har de flesta kritikerna av OCaml i kommentarerna förbisett det faktum att språket kan sammanställas inte bara till byte-kod utan också till inbyggd kod I det långa loppet kommer en kompilerad applikation alltid att vara snabbare än ett Python-Ruby-Perl-skript. Avsaknad, trots att jag helt håller med om att funktionella språk, med OCaml som exempel, är mycket kortare än Java C, statisk typning och typinferens är enormt bra även för måttliga och småprojekt. Återigen är det här en personlig preferens, men logiskt sett kan ett dynamiskt typat språk låta dig göra otäcka saker som. alse i Python, vilket kommer att ge upphov till en ton av buggar som endast semantisk testning kan fånga eftersom detta är syntaktiskt OK. Därför, även om vi antar att Python är lika kortfattat som OCaml eller något annat statiskt skrivet och sammanställt funktionsspråk, kommer det alltid vara långsammare och kommer att lämna en större marginal för att införa buggar i enorma codebases Men, som författaren föreslår, har Python en mycket allvarlig fördel, nämligen dess omfattande uppsättning bibliotek, men jag tror personligen att de ger en oerfaren programmerare en falsk mening Av awesomeness eftersom du får illusionen att kunna göra mycket utan mycket ansträngning. I slutet av dagen är språk fortfarande verktyg och vi älskar dem fortfarande och försvarar dem skönt, så jag antar att allt går i vilket programmeringsspråk som är bäst Diskussion. Kevin Kinnell tors, 11 okt 2012 19 59 40 UTC. Första klassen är en CS-definition och enligt den definitionen har CL förstklassiga funktioner som jag fick fel, för jag sa inte riktigt vad jag menade. Jag borde ha sagt lätt användbara första klasssfunktioner. Skynda på det. Jesse Talbutt Sun, 19 aug 2012 16 10 16 UTC. Unnu är roboten i fråga den som är i Robocops första scen. Då använder jag antagligen ett starkare typat språk. Jesse Talbutt Sun, 19 Aug 2012 15 59 42 UTCmon LISP gör faktiskt Har förstklassiga funktioner Det är en av språkens sinuskvantiteter - jag är inte säker på hur någon kan få det fel. Huvudskillnaden mellan LISP och Scheme är att LISP använder separata namnområden för sina funktioner och dess variabler, vilket är en Abstrakt som är både oerhört kraftfullt och otroligt farligt allt som krävs är en smart kodförfattare som använder den funktionen för att spricka upp en stängning och du får oförutsägbara bieffekter. Jag läser denna artikel undrar om de ska använda OCaml, varför inte bara gå hela gris och använd LISP men jag Se problemet nu - OCaml är som en LISP där du offrar kraft som du förmodligen aldrig kommer att använda i utbyte mot säkerhet, sannolikt en premie när du hanterar stora finansiella transaktioner i realtid istället för att säga att du skapar ett naturligt språk DSL för robots. kevin kinnell mån, 11 juni 2012 23 17 33 UTC. Drat menade de senaste styckena C est l ecriture. Kevin Kinnell mån, 11 juni 2012 23 03 35 UTC. Läsbarheten av någon kod är relaterad till kunskap om 1 syftet av koden, 2 språket som koden är skrivet i, och 3 - och tack om pungen - kunskapen om kodaren. Man kan argumentera för att den litterära programmeringen eliminerar 1 men vad det egentligen verkar göra i praktiken är att lägga till Ett högtekniskt naturligt språkligt berättande som försvinner programmets flöde Det blir något som att läsa en juridisk kort Fin - om du är advokat, med omfattande kunskaper om det galna meta-språket, mina ursäkter, Dr Knuth, men där det är Den faktiska botemedlet för 1 är en kombination av en gå od beskrivning av syftet med koden, och goda kommentarer. 3 är mer eller mindre en kombination av medfödd förmåga och erfarenhet, oavsett om vi pratar om författaren eller läsaren av koden som jag tror ingen kod läser som ett naturligt språk, men det finns säkert ingen som läser som engelska om du tror det gör det för att du har förmåga och erfarenhet. Förmodligen verkar processen att tala i ett programmeringsspråk spegla processen att lära sig ett naturligt språk. I synnerhet är det hela språket hos infödda talare där - du kan få barn att prata med Spädbarn, spädbarn pratar med vuxna, välutbildade vuxna som pratar med mindre utbildade vuxna osv. Det är ganska roligt att observera Kodarens kunskap, både läsaren och författaren, är en stor del av läsbarheten. Vem som helst som kan göra en Språk som på något sätt kjolar detta är enligt min mening något slags övernaturligt väsen. Det som lämnar 2, språket som koden är skrivet i Det närmaste objektivet är att jag tror hur snabbt en läsare kan förstå det övergripande Syftet med en kod G-sekvensen och integrera det i ett programflöde Med andra ord, kan koden bli grokked enkelt. Du kan skapa ett språk som gör det nästan omöjligt att uppnå - APL kommer i åtanke Ingen kan argumentera för att APL inte är kortfattad Att få den erfarenhet som krävs för att kunna läsa APL som ett naturligt språk förmodas förmodligen de flesta vanliga dödliga med sin begränsade livslängd. Jag tvivlar på att någon kan hugga APL, även om de skrev koden. På andra sidan finns COBOL och Java en programmerare S mening, självklart Om du faktiskt kan grok kod skriven i någon av dessa kan du göra en hög med pengar, men du har sålt din själ. Lips tenderar att vara avbrutna av sina stängande parentes, men du kan lära dig att inte se dem Lisps Använd även en REPL, vilket ger dem nytta av inkrementell kodning Tyvärr, förutom Skaldialekter kan funktioner som är första klass i Lisps Lisp vara grokked, men det saknar viss uttrycksfull kraft, särskilt byggprogrammerbara typer och typkontroll g, making computation with types a huge burden on the programmer. Perl goes beyond Lisp in concision, and its scope-control is as good as it gets But Perl has a steep learning curve for fluency, and functions aren t really first-class, Perl lacks a usable REPL, and Perl is missing automated type checking. OCaml manages to be concise, allows computation with types, makes functions first-class objects, has a visually clean syntax, has a REPL, does not require purity thus allowing coder-readable access to the real world and seems to be quite easy to learn--can you imagine a trading company requiring its traders to learn any of the languages in the last paragraph. Well expressed OCaml code is easy to grok. I think Dr Minsky makes his case. Fredrik Skeel Lkke Tue, 13 Mar 2012 18 25 46 UTC. It would be wonderfull to hear how the language plays out in the context of tests Especially regarding tests involving stubbing of external resources. Rowan Fri, 09 Mar 2012 05 41 37 UTC. name on more practical Actually, monadic effects and the like are quite common in OCaml In fact about 1 month before you posted your comment, Yaron the author also announced a new monadic concurrency library called Async. For unintended side-effects, it s more a library issue than a language issue it s pretty easy in OCaml to encapsulate effects in a monadic library, and then only use the monadic versions, banning other uses or considering them unsafe in a similar sense to Haskell s unsafePerformIO. To me the main reason I tend not to use Haskell except for small projects is that I ve hit the unintended side-effect of allocating massive amounts of memory and thrashing or crashing and sometimes been unable to resolve it without digging deep into the source code of multiple libraries written by different authors This is improving in Haskell, but I d still trust OCaml much more for critical systems like the one described. gkannan Thu, 12 Jan 2012 15 57 31 UTC. name Thu, 22 Dec 2011 22 27 19 U TC. more practical Wow, those are weasel words if ever I heard them. Haskell is way more practical you see what I did there for me than O Caml O Caml is great, but it doesn t even try to prevent unintended side-effects The whole Applicative Semiring Monoid Monad MonadT is insanely useful and rewarding if you just try it fo realz.2016 ACM, Inc All Rights Reserved.

Comments

Popular posts from this blog

Visual jforex forum

Jag skapar strategi med VJF baserat på FIBPIVOT-indikatorn (handelsperiod 1H, FIBPIVOT period 1 DAY). När teststrategi i VJF var allt OK, men efter att ha kopierat källkoden och klistra in i JF (kompilering lyckades) fick följande meddelanden: 11:09:24 Fel i indikator: java. lang. ClassCastException: com. dukascopy. api. Perioden kan inte kastas till java. lang. Integer com. dukascopy. indicators. FibonacciPivotIndicator. setOptInputParameter (FibonacciPivotIndicator. java:252) 11:09:24 Fel i indikator: java. lang. ClassCastException: com. dukascopy. api. Period kan inte vara cast till java. lang. Integer com. dukascopy. indicators. FibonacciPivotIndicator. setOptInputParameter (FibonacciPivotIndicator. java:252) 11:09:24 Fel i indikator: java. lang. ClassCastException: com. dukascopy. api. Period kan inte kastas till java. lang. Integer com. dukascopy. indicators. FibonacciPivotIndicator. setOptInputParameter (FibonacciPivotIndicator. java:252) 11:09:24 Fel i indikator: java. lang. Cl...

Glidande medelvärde filter nedir

Är det möjligt att implementera ett glidande medelvärde i C utan att det behövs ett fönstersamtal Ive har funnit att jag kan optimera lite genom att välja en fönsterstorlek som är en kraft av två för att tillåta bitskiftning istället för att dela men behöver inte en buffert skulle vara trevligt. Finns det ett sätt att uttrycka ett nytt glidande medelresultat endast som en funktion av det gamla resultatet och det nya provet Definiera ett exempel glidande medelvärde, över ett fönster med 4 prov att vara: Lägg till nytt prov e: Ett glidande medel kan implementeras rekursivt , men för en exakt beräkning av glidande medelvärde måste du komma ihåg det äldsta inmatningsprovet i summan (dvs. a i ditt exempel). För ett längd N rörligt medelvärde beräknar du: var yn är utsignalen och xn är ingångssignalen. Eq. (1) kan skrivas rekursivt som Så du måste alltid komma ihåg provet xn-N för att beräkna (2). Som påpekat av Conrad Turner kan du använda ett (oändligt långt) exponentiellt fönster istället...

Rsi lager strategi

Relative Strength Index - RSI. BREAKING DOWN Relative Strength Index - RSI. Relativstyrkindexet beräknas med följande formel. RSI 100 - 100 1 RS. Var RS Genomsnittlig vinst på uppe perioder under den angivna tidsramen Genomsnittlig förlust av nedperioder under Den angivna tidsramen. RSI ger en relativ utvärdering av styrkan i en säkerhets s senaste prisprestanda, vilket gör det till en momentumindikator. RSI-värden varierar från 0 till 100 Standard tidsramen för att jämföra uppperioder till nedperioder är 14, som På 14 handelsdagar. Traditionell tolkning och användning av RSI är att RSI-värden på 70 eller högre indikerar att en säkerhet överköps eller övervärderas och kan därför grundas på en trendomvandling eller korrigeringsfel i pris. På andra sidan RSI Värden, en RSI-avläsning av 30 eller lägre tolkas vanligtvis som en indikation på ett överlämnat eller undervärderat tillstånd som kan signalera en trendbyte eller korrigeringsprisomvandling till uppsidan. Tips om användning RSI Indi...