Objective Caml Trading System


Jeg er helt ny i Algorithmic Trading-domenet. Jeg har nettopp fullført et kurs som var Ocaml basert, og les om Jane Street. Åpenbart er de et stort selskap med en stor mengde ressurser, men det er mulig å bruke Ocaml for liten algoritmisk handel. Jeg vet at det sannsynligvis virker som et dumt spørsmål, men fra det jeg har funnet det, er det ingen trading APIer for Ocaml. Dette ville bety at man måtte skrive fra grunnen riktig. Enhver innsikt ville bli verdsatt folkens, som jeg sa jeg er en komplett noob til dette domenet. Skrevet Apr 19 13 på 15 12.Closed as off Emne av chrisaycock martin clayton Luc M Dan Esparza Peter O Apr 19 13 på 17 54. Spørsmål om Stack Overflow forventes å forholde seg til programmering innenfor det definerte området av samfunnet Vurder å redigere spørsmålet eller la kommentarer til forbedring hvis du mener at spørsmålet kan omformuleres for å passe inn i omfanget Les mer om gjenåpning av spørsmål her Hvis dette spørsmålet kan omformuleres for å passe til reglene i hjelpesenter, vennligst rediger spørsmålet. OLAM er den mest populære varianten av Caml-språket. Fra et språkperspektiv utvider den kjernen Caml-språket med et fullverdig objektorientert lag, i tillegg til et kraftig modulsystem, alle sammenkoblet av en lyd, polymorphic type system med typegjennomgang. OCaml-systemet er en implementering av industriell styrke av dette språket, med en høyverdig native code compiler ocamlopt for 9 prosessorarkitekturer IA32, PowerPC, AMD64, Alpha, Sparc, Mips, IA64, HPPA, StrongArm, samt en bytecode kompilator ocamlc og en interaktiv les-eval-print loop ocaml for rask utvikling og bærbarhet. OCaml-distribusjonen inkluderer et omfattende standardbibliotek, en replay debugger ocamldebug, lexer ocamllex og parser ocamlyacc generatorer, prosessor pretty-printer camlp4 og en dokumentasjonsgenerator ocamldoc. The OCaml-systemet er åpen kildekode-programvare, kompilatoren er distribuert under betingelsene i Q Public License, og jeg ts biblioteket er under LGPL vennligst les lisensdokumentet for mer informasjon. En BSD-stil lisens er også tilgjengelig for et gebyr gjennom Caml Consortium. Den nyeste utgivelsen kan lastes ned gratis på dette nettstedet, og brukerhåndboken er også tilgjengelig på nett. Lastest oppdatering av denne siden 2004-05-01 Nettkart Søk INRIA 1995-2013 Alle rettigheter reservert. Sammendrag for massene. Hvorfor det neste språket du lærer skal være funksjonelt. Jeron Minsky, Jane Street. Noen ganger er den elegante gjennomføringen en funksjon Ikke en metode Ikke en klasse Ikke et rammeverk Bare en funksjon - John Carmack. Funksjonell programmering er en gammel ide med en fremtredende historie Lisp, et funksjonelt språk inspirert av Alonzo Church s lambda-kalkulator, var et av de første programmeringsspråkene som ble utviklet på daggry av beregningsalderen Statisk typede funksjonelle språk som OCaml og Haskell er nyere, men deres røtter går dypt ML, hvorfra de kommer ned, går tilbake til arbeid av Robin Milner på 70-tallet om pioner innføring av LCF Logic for Computable Functions teoremprover. Funksjonell programmering har også vært enormt innflytelsesrik Mange grunnleggende fremskritt innen programmeringsspråkutforming, fra søppelsamling til generikk for å skrive innfall, kom ut av den funksjonelle verden og var vanlig der tiår før de gjorde det til andre språk. De funksjonelle språkene har aldri gjort det til vanlige. De kom nærmest kanskje i Symbolics og Lisps maskiner, men disse dagene virker ganske fjernt nå Til tross for en funksjonell programmering i de siste årene, er det fortsatt en teknologi snakkes om enn brukt. Det er fristende å konkludere med at denne funksjonen ikke har funksjonelle språk. Det kan være fornuftig for visse begrensede applikasjoner, og inneholder nyttige konsepter som skal importeres til andre språk, men imperative og objektorienterte språk er ganske enkelt bedre egnet til de aller fleste programvare engineering tasks. Tempting som det er, dette conclusio Jeg har feil Jeg har brukt OCaml i et produksjonsmiljø i nesten et tiår, og over den tiden har jeg blitt overbevist om at funksjonelle språk, og spesielt statisk skrevet som OCaml og Haskell, er gode generelle programmeringsverktøy bedre enn et eksisterende vanlig språk De har også et enormt utvalg, som er velegnet til små skriptoppgaver, samt store, høyytende applikasjoner. De er ikke det rette verktøyet for hver jobb, men de kommer overraskende nært. Flytt til OCaml. Mesteparten av min erfaring med programmering i OCaml kom gjennom arbeidet mitt på Jane Street, et finansielt firma grunnlagt i 2000 For ni år siden hadde ingen på Jane Street hørt om OCaml. I dag er Jane Street den største industrielle brukeren av språket, med nesten to millioner linjer med OCaml-kode og 65 til slutt teller ansatte som bruker språket daglig. Sannsynligvis den beste måten å forklare hva som gjør OCaml til et effektivt verktøy er å begynne med å forklare hvordan og hvorfor t Hatttransformasjon fant sted For å forstå det må du først forstå noe om hva Jane Street gjør. Jane Street s kjernevirksomhet gir likviditet på verdens elektroniske markeder. Det er i hovedsak en mellommann. Det stiller kontinuerlig ordrer for mange forskjellige verdipapirer på mange forskjellige utvekslinger Hver ordre uttrykker villighet til å kjøpe eller selge en gitt sikkerhet til en gitt pris, og samlet sett er de en reklame til markedene i Jane Streets tjenester. Gjennom disse ordrene kjøper firmaet fra folk som trenger å selge og selge til folk som trenger å kjøpe, tjene penger fra gapet mellom kjøps - og salgspriser. Hele tiden konkurrerer det seg med prisen med andre spillere som prøver å gjøre det samme. Elektronisk likviditetsbestemmelse er teknologisk intens, ikke bare på grunn av Beregningsressursene som må distribueres en enorm mengde data må konsumeres, analyseres og reageres i sanntid, men også når det gjelder Kompleksiteten i bedriftshandelen kan krysse flere utvekslinger, regelverk, sikkerhetsklasser og tidssoner. Managing den resulterende kompleksiteten er en skremmende oppgave som krever en betydelig investering i programvare. Alt denne teknologien bærer risiko. Det er ingen raskere måte for et handelsfirma å ødelegge seg selv enn å distribuere et stykke handelsprogramvare som gjør en dårlig beslutning om og om igjen i en stram krets Del av Jane Street s reaksjon på disse teknologiske risikoene var å legge et sterkt fokus på å bygge programvare som var lett forståelig programvare som var lesbar. Reading kode var en del av firmaets tilnærming til risiko fra før vi hadde skrevet vår første linje av OCaml Tidlig på, et par av de eldste handelsmennene, inkludert en av grunnleggerne forpliktet til å lese hver linje av kode som gikk inn i kjernevirksomheten systemer, før disse systemene gikk i produksjon Dette var en enorm pågående tidsinvestering og reflekterte det høye nivået av bekymring for teknologivare. Jeg starter ed på Jane Street året etter at jeg avsluttet Ph D-jobben der, deltid, mens jeg gjorde en postdok. Mitt arbeid på Jane Street var fokusert på statistisk analyse og optimalisering av handelsstrategier, og OCaml var det primære verktøyet jeg pleide å få analyse gjort Hvorfor OCaml jeg hadde lært det i gradskole og ble forelsket i språket da Og OCaml var en flott kamp for denne typen raske prototypingsarbeid, ypperlig, men raskere og mindre feilaktig enn koding i C, C, eller Java. Jeg var overbevist om at min stint på Jane Street ville være kort og koden jeg skrev var alt kaste bort, så jeg gjorde et valg for å maksimere min egen produktivitet uten å bekymre deg for om andre kunne bruke koden senere seks måneder og 80 000 kodelinjer senere skjønte jeg at jeg tok feil Jeg tok en heltidsposisjon på Jane Street og begynte snart å ansette for å skape en forskningsgruppe der. På denne tiden stod firmaet for en ny tilnærming til å bygge programvare. Systemene som drev selskapet i de første årene var først og fremst skrevet i VBA og C. Kjernehandelssystemene var selv Excel-regneark med mye tilpasset VBA-kode. Dette var en fin måte å komme raskt opp, men det var klart fra starten at dette var ikke en bærekraftig tilnærming. I 2003 begynte Jane Street å omskrive sine kjernehandelssystemer i Java. Omskrivningen ble til slutt forlatt, delvis fordi den resulterende koden var for vanskelig å lese og begrunnet om langt vanskeligere, faktisk enn VBA at ble erstattet En stor del av dette var Java s verbositet, men det var mer enn at VBA-koden ble skrevet i en tett, rett fremstilt stil som var ganske lett å følge. Men på en eller annen måte, når det ble kodet i Java, bygde vi et rede på klasser som lot folk skrape hodet når de ønsket å forstå akkurat hvilket stykke kode som faktisk ble påkalt når en bestemt metode ble kalt Kode som gjorde stor bruk av arv, var spesielt vanskelig å tenke på, delvis b fordi han arresterer under abstraksjonsgrenser. I 2005 ble Jane Street initiert en ny omskrivning av sine kjernevaringssystemer, denne gangen i OCaml. Den første prototypen ble ferdig om tre måneder, og var oppe og handel tre måneder etter det. Bruk av OCaml i selskapet har bare utvidet siden da. I dag er det vant til å løse problemer i alle deler av selskapet, fra regnskap til systemadministrasjon, og at innsatsen fortsetter å vokse. De siste årene har handelen siden av firmaet har økt bruken av språket, og OCaml-trening er nå en standard del av læreplanen for nye handelsavtaler. Overgangen til OCaml har i stor grad vært en stor suksess, noe som resulterer i langt sterkere teknologi enn vi kunne ha oppnådd ellers Hva er det med språket som gjør det så bra? Her er en kort oppsummering av hva jeg oppfatter som OCaml s hovedstyrker. Konklusjon Vår erfaring med OCaml på forskningssiden overbeviste oss om at vi kunne bygge mindre, enklere, enklere å forstå systemer i OCaml enn vi kunne på språk som Java eller C For en organisasjon som verdsatt lesbarhet, var dette en stor seier. Feilsøking Programmerere som er nye for OCaml, blir ofte overrasket av graden som type systemet fanger feil på. Inntrykket du får er at når du klarer å få typekontrollen til å godkjenne koden din, er det ingen feil igjen. Dette er egentlig ikke sant, selvfølgelig er OCaml s typesystem hjelpeløst mot mange feil. Det er imidlertid en overraskende bred bølge av bugs mot hvilken type systemet er effektivt, inkludert mange bugs som er ganske vanskelig å komme seg gjennom gjennom testing. Ytelse Vi fant at OCamls ytelse var på nivå med eller bedre enn Java s, og innenfor spyttet avstand for språk som C eller C I tillegg til å ha en kvalitetskodgenerator, har OCaml en inkrementell GC søppelkollektor. Dette betyr at GC kan stilles inn for å gjøre små arbeidsstykker om gangen, noe som gjør den mer egnet for myke sanntidsapplikasjoner som elektronisk handel. Rent, for det meste Til tross for hvordan funksjonelle programmerere ofte snakker om det, er omgjengelig tilstand en grunnleggende del av programmeringen, og en som ikke kan og bør ikke gjøres unna med å sende en nettverkspakke eller skrive til disk er eksempler på mutability En fullstendig forpliktelse til uforanderlighet er en forpliktelse til å aldri bygge noe ekte. Mutabel tilstand har sine kostnader, men mutasjonsfri kode er generelt lettere å begrunne, noe som gjør interaksjoner og avhengigheter mellom ulike deler av kodebasen din eksplisitt og enklere å administrere OCaml oppnår en god balanse her, noe som gjør mutasjon enkelt, men å lage uutviklede datastrukturer som standard Et godt skrevet OCaml-system har nesten alltid mutable tilstand, men den tilstanden er omhyggelig begrenset. Kanskje det enkleste av disse fordelene å demonstrere konkret er det med konsisjonen. Viktigheten av konsisjon er tydelig andre ting like, kortere kode er lettere å lese, lettere å skrive, og lettere å vedlikeholde. Det er selvsagt grenser, ikke bra, er det e ved å redusere alle funksjonsnavnene dine til enkeltpersoner, men korthet er likevel viktig, og OCaml gjør mye for å holde kodebasen liten. En fordel OCaml-bringer til bordet er typegodkjenning, noe som eliminerer behovet for mange typer erklæringer. Dette etterlater du med kode som er omtrent like kompakt som kode skrevet i dynamiske språk som Python og Ruby Samtidig får du ytelse og korrekthetsfordel ved statiske typer. Vurder følgende OCaml-funksjonskart for å transformere elementene i en tuple. Here , kartet er definert som en funksjon med to argumenter en funksjon f og en triple x, y, z Merk at fx er syntaksen for å bruke funksjonen f til x. Nå vurdere hvordan dette vil se ut i C 4 0 C-koden, mens funksjonelt ekvivalent, ser rotete ut, med den virkelige strukturen skjult av syntaktisk støy. En annen kilde til konsisjon er OCaml s notasjon for å beskrive typer. I hjertet av denne notasjonen er begrepet algebraisk datatype Algebraiske data typer er det du får når du har et system som inneholder to måter å bygge opp nye typer produkter og summer. En produkttype er mer kjent av de to Tuples, poster, structs og objekter er alle eksempler på produkttyper. En produkttype kombinerer flere verdier av forskjellige typer til en enkelt verdi. Disse kalles produkttyper fordi de matematisk samsvarer med kartesiske produkter av de bestandige typene. En summetype tilsvarer en uensartet forening av bestanddelene, og den brukes til å uttrykke flere muligheter. Hvor produkt typer brukes når du har flere ting samtidig a og b og c, summetypene brukes når du vil oppregne forskjellige muligheter a eller b eller c Sumtyper kan simuleres om enn noe klumpete i objektorienterte språk som Java bruker underklasser, og de vises som foreningstyper i C Men støtten i typesystemene til de fleste språk for samhandling med summetypene på en trygg måte er overraskende svak. Figur 1 pro kjenner et eksempel på algebraiske datatyper på jobben Koden definerer en type for å representere boolske uttrykk over et sett med basiske predikater og en funksjon for å evaluere disse uttrykkene Koden er generisk over settet av basiske predikater, så emnet for disse uttrykkene kan være noe fra heltall ulikheter til innstillingene av compiler flagg. Sum type expr er indikert av rørene som adskiller de ulike armer av erklæringen Noen av disse armene, som True og False, er enkle koder, ikke vesentlig forskjellig fra elementene i en oppsummering i Java eller C Andre, for eksempel og og ikke har tilknyttede data, og at dataene varierer mellom sakene Denne typen inneholder faktisk både summer og produkter, med og og grenene som inneholder tupler Typer som består av lagdelte kombinasjoner av produkter og summer er vanlige og kraftig idiom i OCaml. En bemerkelsesverdig bit av syntaks er typen variabel en A-variabel kan bli instantiated med hvilken som helst type, og dette gjør det mulig for kode for å være generisk over settet av basispreikatene Dette ligner hvordan generiske typer håndteres i Java eller C. Java s A List vil bli gjengitt som en liste i OCaml. Funksjonen eval tar to argumenter expr, uttrykket som skal være evalueres og evaluerer en funksjon for å evaluere basispredikater Koden er generisk i den forstand at eval kan brukes til uttrykk over hvilken som helst type basisprotikat, men evalbase må gis for å evaluere sannheten eller falskheten til de basale predikatene Funksjonen eval er definert som stenografi for å påkalle rekursive samtaler til eval med evalbase som argument. Endelig brukes kampoppstillingen for å gjøre en saksanalyse av de mulige strukturer av uttrykket, utrope til evalbase når man vurderer et basisprotikat og ellers fungerer som en enkel rekursjon over strukturen til datatyper. Figur 2 viser hvordan den samme koden kan bli gjengitt i Java. Omsetningen er umiddelbart slående. Legge til en enkelt sak som og ta kes to korte linjer i OCaml og åtte i Java og Java-koden er faktisk ganske minimal som disse tingene går. Hvis du vil tillate opprettelsen av andre algoritmer rundt denne uttrykkstypen som ikke er bakt inn i klassedepartementet, vil du sannsynligvis Bruk besøksmønsteret som vil oppblåse linjene betydelig. En annen fasett av språket som krever ytterligere forklaring, er at typesystemet kan fange feil. Folk som ikke er kjent med OCaml og tilhørende språk, og noen som ofte gjør det feil å undervurdere kraften i typesystemet Det er lett å konkludere med at alt det typesystemet gjør for deg, er at du passerer parametrene dine riktig, for eksempel at du ga en flottør der du skulle gi en flyte. Men det er s mer til det enn at Selv naiv bruk av typen systemet er ærlig bra til å fange feil. Vurder følgende Python-kode for å destuttere en liste, dvs fjerne sekvensielle duplikater. Denne koden lo Det er ganske greit, men det har en feil, men det er ikke riktig å håndtere slutten av listen. Her er en måte å fikse den på. Nå la vi se hva som skjer når du skriver mer eller mindre den samme funksjonen i OCaml, med omtrent det samme bug. This bruker OCaml s mønster-matching syntaks for å få tilgang til elementene i listen Her er listen konstruktør, og angir en tom liste Dermed faller saken i den tomme listen, og xy resten tilfellet samsvarer med lister som har minst to elementer, x og y Den variable resten refererer til den potensielt tomme resten av listen. I likhet med Python-eksempelet mislykkes denne koden til å tenke på hva som skjer når du kommer til slutten av listen og har bare ett element igjen. I dette tilfellet, Men du finner ut om problemet ikke ved kjøretid, men på kompileringstid Kompilatoren gir følgende feil. Den manglende saken er en liste med et enkelt element. Du kan fikse koden og tilfredsstille kompilatoren ved å legge til en handler for den manglende tilfellet. Feilen her er en triviell en som ville bli funnet enkelt ved å teste Men typesystemet gjør like bra i å utsette feil som er vanskelig å teste, enten fordi de bare vises i ulike hjørnesaker som er lette å savne ved testing, eller fordi de dukker opp i komplekse systemer som er vanskelig å mocke opp og trene ut. Sluk ut av esken, OCaml er ganske god til å fange feil, men det kan gjøre enda mer hvis du utformer dine typer nøye. Tenk for eksempel følgende typer for å representere tilstanden til en nettverkstilkobling. Tilkoblingsstasjonstypen er en enkel oppsummering av tre navngitte stater som forbindelsen kan være i forbindelseinfo, er en posttype som inneholder et antall felter som beskriver ulike aspekter av en forbindelse. Merk at feltene som har alternativet ved slutten av typen, egentlig er nullstillbare felt Som standard er verdier i OCaml garantert å være ikke-null. Annet enn det, er det ingenting om denne koden som er alt som er forskjellig fra hva du kan skrive i Java eller C. Her er noen i formasjon på de enkelte rekordfeltene og hvordan de forholder seg til hverandre. server indikerer identiteten til serveren på den andre siden av tilkoblingen. Lastpingtime og Lastpingid er ment å bli brukt som en del av en Keep-Live-protokoll. Merk at begge disse feltene skal være til stede, eller ingen av dem bør også være tilstede bare når staten er koblet til. Sessionid er en unik identifikator som velges igjen hver gang forbindelsen gjenopprettes. Den bør også være tilstede bare når staten er koblet til. Når det er påbegynt, er det for å holde øye med når forsøket på å starte forbindelsen begynte, som kan brukes til å bestemme når forsøk på å koble til, bør overlates. Dette bør kun være tilstede når tilstanden er Tilkobling. whendisconnected holder oversikt over når tilkoblingen kom inn i frakoblet tilstand, og bør bare være tilstede i denne tilstanden. Som du kan se, knytter en rekke invariants sammen de forskjellige rekordfeltene. Vedlikehold av slike invariants tar ekte arbeid Du må dokumentere dem nøye slik at du ikke gå over dem senere må du skrive tester for å verifisere invariants, og du må utøve forsiktighet for ikke å bryte innvariantene ettersom koden utvikler seg. Men vi kan gjøre det bedre. Vurder følgende omskrivning. Vi har nå en kombinasjon av produkt og sum typer som mer presist representerer settet av tillatte tilstander til en forbindelse Spesielt er det en annen posttype for hver av de tre statene, som hver inneholder informasjonen som er relevant bare for den staten. Informasjon som alltid er relevant i dette tilfellet, bare serveren er presset til toppnivå-posten også, vi har gjort det eksplisitt at lasting og lasting er enten tilstede eller begge fraværende ved å representere th em som lasting som er et valgfritt par. Ved å gjøre alt dette, er vi innebygd i typen mange av de nødvendige invariants Nå som invariants er en del av typene, kan kompilatoren oppdage og avvise kode som vil krenke disse invariants Dette er både mindre arbeid og mer pålitelig enn å opprettholde slike invariants for hånden. Eksemplet bruker algebraiske datatyper til å kode innvariants, men OCaml har andre verktøy for å gjøre det samme OCaml s modulsystem er et eksempel, slik at du kan spesifisere invariants i grensesnittet til en modul I motsetning til de fleste objektorienterte språk gjør OCaml det mulig å uttrykke komplekse fellesinvariants over flere forskjellige typer Mer generelt er OCaml s moduler et kraftig verktøy for å bryte ned en kodebase i små, forståelige stykker der samspillet mellom disse brikkene er under programmerer s eksplisitt kontroll. Typesystemets evne til å fange feil er verdifullt selv for små ensomme prosjekter, men det skinner virkelig i et samarbeidsmiljø hvor flere utviklere samarbeider om en langvarig kodebase I tillegg til å finne bugs, spiller typografiske signaturer en overraskende verdifull rolle som en slags garantert korrekt dokumentasjon. I sammenheng med en utviklende kodebase, opprettholdes invariants av typen systemet har fordelen av å være mer holdbare enn de som håndheves av konvensjonen, fordi de er mindre tilbøyelige til å bli brutt ved et uhell av en annen utvikler. Ingen av dette er å si at OCaml er uten sine feil. Det er selvsagt alle problemene assosiert med å være et minoritetsspråk OCaml har et stort samfunn som har generert et rikt sett med biblioteker, men den samlingen av biblioteker pales i forhold til hva som er tilgjengelig for Python, C eller Java På samme måte utviklingsverktøy som IDEer, profiler og debuggere er der, men er betydelig mindre modne og funksjonelle enn deres fettere i mer vanlige språk. En annen begrensning av OCaml har å gjøre med parallelisme OCaml runtime har en enkelt r untime lock, noe som betyr at man må bruke flere prosesser for å utnytte flere kjerner på en enkelt maskin. For det meste passer dette til vår utviklingsmodell, og vi foretrekker at meldingen overføres til delte minne tråder som en programmeringsmodell for parallellisme, siden den fører til kode som er enklere å begrunnelse om, og det skaleres bedre til systemer som krysser flere fysiske maskiner. Verktøyene som er tilgjengelige i den bredere OCaml-verdenen for å gjøre denne typen multiprocessprogrammering, er imidlertid fortsatt modne. Men OCaml s begrensninger er ikke grunnleggende i natur De har mer å gjøre med detaljene i implementeringen eller populariteten til språket og ikke med språket selv. Til slutt er det det jeg finner mest forvirrende. Jeg er nå ganske overbevist om at kjernenes ideer bak OCaml er enormt verdifulle, som det fremgår av det faktum at OCaml selv, uansett sine begrensninger, er et dypt effektivt og kraftig verktøy. Imidlertid forblir disse ideene stædig utenfor det vanlige. Pereha ps dette er endelig på tvers av å skifte språk som F og Scala bringer noen av ideene bak OCaml og Haskell til et bredere publikum ved å integrere seg i Dotnet og Java-økosystemene. Hvert år vil vi kanskje ikke lenger trenger å spørre hvorfor disse ideene har unnlatt å fange seg i den videre verden Men det er ingen grunn til å vente. Du kan legge OCaml til verktøykassen din nå. LOV DET, HATE IT LET US KNOW. Yaron Minsky fikk sin Ph D i datavitenskap fra Cornell University i 2002, med fokus på distribuerte systemer I 2003 kom han til Jane Street hvor han grunnla den kvantitative forskergruppen, og siden 2007 har han klart teknologikoncernen there.2011 ACM 1542-7730 11 0900 10 00.Originally published in Queue vol 9, nr 9 se dette elementet i ACM Digital Library. Robert C Seacord - Uninitialized Les Forstå de foreslåtte revisjonene til C-språket. CARLOS Baquero, Nuno Pregui a - Hvorfor logiske klokker er enkle Noen ganger er alt du trenger riktig lan guage. Erik Meijer, Kevin Millikin, Gilad Bracha - Spicing Up Dart med bivirkninger Et sett med utvidelser til Dart-programmeringsspråket, designet for å støtte asynkron - og generatorfunksjoner. Dave Long - META II Digital Vellum i Digital Scriptorium Revisiting Schorre s 1962 kompilator-compiler. Bilyan Borisov fre, 24 jan 2014 15 01 30 UTC. Stor artikkelen Etter min mening har de fleste kritikerne av OCaml i kommentarene oversett det faktum at språket kan kompileres ned ikke bare til bytekode, men også til Inngangskode I det lange løp vil en kompilert søknad alltid være raskere enn et Python-Ruby-Perl-skript. Forholdet til side, selv om jeg helt enig er i at funksjonelle språk, med OCaml som et eksempel, er mye mer kortfattede enn Java C, statisk skriving og type inferansen er enormt bra, selv for moderate og småprosjekter. Dette er igjen en personlig preferanse, men logisk sett kan et dynamisk skrevet språk gi deg ekkel ting som. som vurderer å F Alse i Python, som vil gi opphav til en TON av feil som kun semantisk testing kan fange, siden dette er syntaktisk OK. Derfor, selv om vi antar at Python er like kortfattet som OCaml eller noe annet statisk skrevet og sammensatt funksjonelt språk, vil det alltid være langsommere og vil gi en større margin for å introdusere feil i store kodebaser. Men igjen, som forfatteren antyder, har Python en svært alvorlig fordel, nemlig sitt omfattende sett med biblioteker, men jeg tror personlig at de gir den uerfarne programmøren en falsk forstand av awesomeness siden du får illusjonen om å være i stand til å gjøre mye uten mye anstrengelse. I slutten av dagen er språk fortsatt verktøy og vi elsker fortsatt dem og forsvarer dem kjære, så jeg antar at alt går i hvilket programmeringsspråk som er best diskusjon. Kevin Kinnell tors, 11 okt 2012 19 59 40 UTC. Første klasse er en CS-definisjon, og i henhold til den definisjonen har CL førstegangsfunksjoner, jeg fikk det galt, fordi jeg egentlig ikke sa hva jeg mente. Jeg burde ha sagt enkelt brukbare førsteklasses funksjoner. Sorg om det. Jesse Talbutt Sun, 19 Aug 2012 16 10 16 UTC. Under den aktuelle roboten er den i Robocop første scene. Da bruker jeg sannsynligvis et sterkere skrevet språk. Jesse Talbutt Sun, 19 Aug 2012 15 59 42 UTCmon LISP gjør faktisk, har førsteklasses funksjoner Det er en av språkens sinusnormer - jeg er ikke sikker på hvordan noen kan få det galt. Hovedforskjellen mellom LISP og Scheme er at LISP bruker separate navneområder for sine funksjoner og dets variabler, som er en abstrakt som er både utrolig kraftig og utrolig farlig, alt som trengs, er en smart kodeforfatter som bruker den funksjonen til å sprekke et lukke og du får uforutsigbare bivirkninger. Jeg leser denne artikkelen og lurer på om de skal bruke OCaml, hvorfor ikke bare gå Hele hog og bruk LISP, men jeg se problemet nå - OCaml er som et LISP hvor du ofrer kraft som du sikkert ikke vil bruke i bytte for sikkerhet, sannsynligvis en premie når du håndterer store finansielle transaksjoner i sanntid i stedet for å si, opprette et naturlig språk DSL for robots. kevin kinnell ma, 11 jun 2012 23 17 33 UTC. Drat mente de siste par avsnittene C ec lcriture. Kevin Kinnell Mon, 11 Jun 2012 23 03 35 UTC. Lestligheten av en kode er relatert til kunnskap om en hensikt av koden, 2 språket som koden er skrevet inn i, og 3 - og vær så gratulerer med ordspillet - Kunnskapen om koderen. Man kan hevde at literat programmering eliminerer 1, men hva det egentlig synes å gjøre i praksis er å legge til en høyteknologisk natursproglig fortelling som ødelegger programmets strøm Det blir noe som å lese en juridisk kort Fin - hvis du er advokat, med omfattende kunnskap om det galane meta-språket, min unnskyldning, Dr Knuth, men der det er den faktiske kur for 1 er en kombinasjon av en gå od beskrivelse av formålet med koden, og gode kommentarer. 3 er mer eller mindre en kombinasjon av medfødt evne og erfaring, enten vi snakker om forfatteren eller leseren til koden jeg d ser INGEN KODE leser som et naturlig språk, men absolutt er det ikke noe som leser som engelsk Hvis du tror det gjør det, fordi du har evne og erfaring. Prosessen med å snakke i et programmeringsspråk ser ut som å speile prosessen med å lære et naturlig språk. Spesielt er det hele spekteret av morsmål som er der - du kan få babyer til å snakke med babyer, spedbarn som snakker med voksne, velutdannede voksne som snakker med mindre utdannede voksne osv. Det er litt morsomt å observere. Kunnskapen om koderne, både leseren og forfatteren, er en stor del av lesbarheten. Noen som kan lage en språk som på en eller annen måte skjørter dette, er etter min mening en slags overnaturlig vesen. Det etterlater 2, språket som koden er skrevet i. Det nærmeste til objektiv syn på det er, tror jeg, hvor raskt en leser kan forstå det generelle Formålet med et codin g-sekvensen, og integrere det i programflyten Med andre ord, kan koden bli grokked easily. You kan lage et språk som gjør dette nesten umulig å oppnå - APL kommer i tankene Ingen kan argumentere for at APL ikke er konsistent Å få den erfaringen som er nødvendig for å kunne lese APL som et naturlig språk, sannsynligvis nektet de fleste vanlige dødelige med sin endelige levetid. Jeg tviler på at noen kan kaste APL, selv om de skrev koden. I den andre ekstremen er det COBOL og Java en programmerer selvfølgelig Hvis du faktisk kan grok kode skrevet i noen av disse, kan du lage en haug med penger, men du har solgt din sjel. Lispene pleier å bli avbrutt av deres lukkede parenteser, men du kan lære å ikke se dem Lisps Bruk også en REPL, noe som gir dem fordel for inkrementell koding. Dessverre, unntatt Skal dialekter, er funksjoner som er førsteklasses i Lisps Lisp, mulige, men det mangler noen uttrykksdyktig kraft, spesielt byggprogrammerbare typer og type checkin 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