Sunday 24 December 2017

System handlu ocaml


Jestem kompletnie nowy w dziedzinie handlu algorytmicznego Właśnie skończyłam kurs, który był Ocaml oparty i przeczytał o Jane Street Oczywiście są to ogromna firma z dużą ilością zasobów, ale czy jest możliwe, aby używać Ocaml do małych czasowych algorytmicznych transakcji . Wiem, że prawdopodobnie wydaje się to głupie pytanie, ale z tego, co znalazłem tam żadnych transakcji API dla Ocaml Oznaczałoby to, że ktoś musiałby napisać od podstaw poprawnie. Każdy wgląd byłby bardzo mile widziany facetów, jak powiedziałem jestem pełny noob w tej domenie. zadzwonił do 19 kwietnia 13 w 15 12. zamknięty jako temat off przez chrisaycock martin clayton Luc M Dan Esparza Peter O 19 kwietnia 13 w 17 54. Pytania dotyczące przepełnienia stosu mają się odnosić do programowania w zdefiniowanym zakresie przez społeczność Zastanów się nad edytowaniem pytania lub pozostawieniem komentarzy do ulepszeń, jeśli uważasz, że można ponownie przeredagować kwestię, aby mieściła się w zasięgu Więcej informacji na temat ponownego otwierania pytań tutaj Jeśli można to przeredagować, aby pasowały do ​​reguł w Centrum pomocy proszę edytować pytanie. OCaml jest najpopularniejszym wariantem języka Caml Z punktu widzenia języka rozszerza podstawowy język Camlera o w pełni rozwiniętą warstwę zorientowaną na obiekt, a także potężny system modułów, wszystkie połączone przez dźwięk, system polimorficzny z uwzględnieniem inferencji typu. System OCaml to implementacja tego języka, wykorzystująca wysokiej klasy kompilator ocamlopt dla 9 architektur procesorów IA32, PowerPC, AMD64, Alpha, Sparc, Mips, IA64, HPPA, StrongArm, jak również ocamlc kompilatora bajtów i interaktywna ocaml do odczytu i ewaluacji, umożliwiająca szybki rozwój i przenośność dystrybucji OCaml zawiera obszerną bibliotekę standardową, debatę odtwarzania ocamldebug, ocxel ocamllex i generatory ocamlyacc parsera, procesor pretty-printer camlp4 i generator dokumentacji ocamldoc. System OCaml jest oprogramowaniem open source, kompilator jest dystrybuowany zgodnie z warunkami licencji Q Public i biblioteka ts znajduje się pod kontrolą LGPL, przeczytaj dokument licencyjny, aby uzyskać więcej informacji. Licencja typu BSD dostępna jest także za opłatą za pośrednictwem konsorcjum Caml. Najnowsza publikacja może zostać bezpłatnie pobrana na tej stronie, a podręcznik użytkownika jest również dostępny on-line Najświeższa aktualizacja tej strony 2004-05-01 Mapa serwisu Szukaj INRIA 1995-2017 Wszystkie prawa zastrzeżone. PLam na Mszy św. Dlaczego kolejny język, jaki uczysz, powinien być funkcjonalny. Yaron Minsky, Jane Street. funkcja Not a method Not a class Nie jest to ramy Jedyna funkcja - John Carmack. Funkcjonalne programowanie jest starym pomysłem o wybitnej historii. Lisp, funkcjonalny język zainspirowany alonzo Church's lambda calculus, był jednym z pierwszych języków programowania opracowanych w świt w erze komputerowej Stale wpisane języki funkcjonalne, takie jak OCaml i Haskell są nowsze, ale ich korzenie sięgają głęboko ML, od którego zejdą, nawiązuje do pracy Robin Milnera na początku lat siedemdziesiątych odnoszącej się do pioniera a także logika LCF Logic for Progu Obliczeniowego Funkcjonalności. Funkcjonowanie wielofunkcyjne miało ogromny wpływ Wiele fundamentalnych osiągnięć w projektowaniu języków programowania, od zbierania śmieci do generatorów do typu wnioskowania, wyszło z funkcjonalnego świata i było powszechne tam dziesięciolecia, zanim trafiły one do innych languages. Yet języki funkcjonalne nigdy naprawdę nie dotarły do ​​głównego nurtu Były najbliżej, być może, w czasach Symbolics i maszyn Lisp, ale te dni wydają się dość odległe Pomimo odrodzenia funkcjonalnego programowania w ciągu ostatnich kilku lat, pozostaje technologia bardziej mówiona niż używana. Kuszenie wyciągnąć z tego zapisu, że języki funkcjonalne nie mają tego, czego potrzebują Mogą mieć sens w niektórych ograniczonych zastosowaniach i zawierają przydatne pojęcia, które mają zostać zaimportowane do innych języków, ale konieczne i zorientowane obiektowo języki są po prostu lepiej dostosowane do większości zadań związanych z inżynierią oprogramowania. W ten sposób jest to konkluzja n jest niewłaściwy Od blisko dziesięciu lat używałem OCaml w środowisku produkcyjnym i przez pewien czas przekonałem się, że języki funkcjonalne, a zwłaszcza statycznie wpisywane takie, jak OCaml i Haskell, są doskonałymi narzędziami programowania ogólnego przeznaczenia lepiej niż jakikolwiek istniejący język głównego języka Posiadają także olbrzymią skalę, nadaje się do małych zadań skryptowych, a także do dużych aplikacji o wysokiej wydajności. Nie są one odpowiednim narzędziem dla każdego zadania, ale przynoszą zaskakująco bliskie. Przenieś do OCaml. Większość mojego doświadczenia w programowaniu w OCaml pojawiła się w mojej pracy na Jane Street, firmie finansowej założonej w 2000 roku Dziewięć lat temu, nikt na ulicy Jane nie słyszał o OCaml Today, Jane Street jest największym użytkownikiem przemysłowym tego języka, z prawie dwoma miliony linii kodu OCaml i 65 w końcu liczą pracowników, którzy używają języka na co dzień Prawdopodobnie najlepszym sposobem na wyjaśnienie tego, co czyni OCaml tak skutecznym narzędziem jest zacząć od wyjaśnienia jak i dlaczego t aby zrozumieć, że musisz przede wszystkim zrozumieć, co robi Jane Street. Dziedzictwo jane Street zapewnia płynność na światowych rynkach światowych Jest to zasadniczo pośrednik. Ciągle składa zamówienia na wiele różnych papierów wartościowych wiele różnych wymian Każde zlecenie wyraża chęć kupna lub sprzedaży danego zabezpieczenia po określonej cenie, a wspólnie reklama na rynkach usług Jane Street Za pośrednictwem tych zamówień firma kupuje od ludzi, którzy potrzebują sprzedawać i sprzedawać osobom, które muszą kupować, zarabiać pieniądze z luki między cenami kupna i sprzedaży Przez cały czas konkuruje na ceny z innymi graczami starającymi się to samo. Elektroniczne zapewnienie płynności jest technologicznie intensywne, nie tylko z powodu zasoby obliczeniowe, które muszą być rozmieszczone w ogromnej ilości danych, muszą być zużywane, analizowane i odpowiadać w czasie rzeczywistym, ale także pod względem złożoność obrotu korporacyjnego może przekraczać wiele wymian, reżimów regulacyjnych, klas zabezpieczeń i stref czasowych Zarządzanie złożoną złożonością jest trudnym zadaniem wymagającym znacznej inwestycji w oprogramowanie. Ta technologia niesie ryzyko Nie ma szybszego sposobu, aby firma handlowa niszczyć się, niż wdrożyć kawałek oprogramowania handlowego, co sprawia, że ​​kładzie ona złą decyzję w kółko. Część reakcji Jane Street na te technologiczne ryzyko polegała na bardzo silnym skoncentrowaniu się na budowaniu oprogramowania, które było łatwo zrozumiałym oprogramowaniem, które było czytelne Kod zwrotny był częścią podejścia firmy do ryzyka, zanim napisaliśmy pierwszą linię OCaml Early, kilku starszych handlowców, w tym jeden z założycieli, zobowiązany do przeczytania każdej linii kodu, która trafiła do podstawowego handlu zanim te systemy trafiły do ​​produkcji To była ogromna inwestycja w czasie i odzwierciedlała wysoki poziom obaw o ryzyko technologiczne. ed w Jane Street w rok po skończeniu pracy Ph D pracującej w niepełnym wymiarze podczas robienia post-doc Moja praca na Jane Street koncentrowała się na analizie statystycznej i optymalizacji strategii handlowych, a OCaml było głównym narzędziem, analiza zrobiona Dlaczego OCaml nauczyłem się tego w szkole gimnazjów i zakochałam się w języku, a następnie OCaml był świetnym dopasowaniem do tego typu szybkich prac prototypowych, wysoce wydajnych, ale szybszych i mniej podatnych na błędy niż kodowanie w C, C, lub Java. Jestem przekonany, że mój stint na Jane Street byłby krótki, a kod, który piszę, został wyrzucony, więc zdecydowałem się zmaksymalizować wydajność, nie martwiąc się o to, czy inni mogą używać kodu później Sześć miesięcy i 80.000 wierszy kodu później, zdałem sobie sprawę, że się mylę, zajmowałam stanowisko Jane na ulicy i wkrótce zacząłem zatrudniać do utworzenia tam grupy badawczej. Tym razem firma zaczęła szukać nowego podejścia do tworzenia oprogramowania Systemy który zasilał firmę w Poznaniu jego pierwsze lata zostały napisane przede wszystkim przez VBA i C Isted, podstawowe systemy handlowe były arkuszami Excel z wieloma własnymi kodami VBA. Był to świetny sposób na szybkie i szybkie uruchomienie, ale od razu było jasne, że było to nie jest zrównoważonym podejściem. W 2003 Jane Street zaczęła przepisywać swoje podstawowe systemy handlowe w Javie. Przepis został ostatecznie porzucony, częściowo dlatego, że wynikowy kod był zbyt trudny do odczytania i powodował znacznie trudniejsze, niż VBA, że został zastąpiony Duża część tego była verbosity Java, ale to było więcej niż kod VBA został napisany w zwięzły, prosto naprzód stylu, który był dość łatwy do naśladowania Ale jakoś podczas kodowania w Javie zbudowaliśmy gniazdo klasy, które pozostawiały ludziom zarysowania głowy, gdy chcieli zrozumieć, jakiego fragmentu został rzeczywiście powołany, gdy określona metoda została nazwana Kodeks, który w dużym stopniu wykorzystywał dziedzictwo był szczególnie trudny do rozważenia, w części b ecause sposobu dziedziczyć kaczki w granicach abstrakcji. W 2005 r., wzbudzony przez sukces grupy badawczej, Jane Street zainicjował kolejny przepisać swoje podstawowe systemy handlowe, tym razem w OCaml Pierwszy prototyp został zrobiony w ciągu trzech miesięcy i był w górę i handlu po trzech miesiącach po tym Użycie OCaml w firmie wzrosło tylko od tego czasu Dzisiaj jest używany do rozwiązywania problemów we wszystkich obszarach firmy, od księgowości do administracji systemów, a wysiłek nadal rośnie W ostatnich latach handel strona firmy zwiększyła wykorzystanie języka, a szkolenie OCaml jest obecnie standardową częścią programu nauczania nowych pracowników handlowych Ogólnie, przejście na OCaml było ogromnym sukcesem, skutkując znacznie silniejszą technologią niż moglibyśmy osiągnąć inaczej . Co to jest o języku, który sprawia, że ​​działa tak dobrze? Oto krótkie podsumowanie tego, co postrzegam jako mocne strony OCaml. Podsumowanie Nasze doświadczenie z OCaml w dziedzinie badań przekonało nas, że możemy zbudować mniejsze, prostsze i łatwiejsze do zrozumienia systemy w OCaml niż w językach takich jak Java lub C. Dla organizacji, która doceniła czytelność, była to olbrzymia wygrana. Wykrywanie błędów Programiści, którzy są nowi w OCaml, często są zaskoczeni stopniem, w jakim system typu złapie błędy. Wrażenie to jest takie, że kiedy uda się uzyskać tester typu zatwierdzający Twój kod, nie ma żadnych błędów. To nie jest naprawdę prawda, oczywiście system typu OCaml jest bezradny wobec wielu błędów Jest jednak zaskakująco szeroki zakres błędów, przeciwko któremu system typu jest skuteczny, w tym wiele błędów, które są dość trudne do przejścia przez testy. Wydajność Zauważyliśmy, że wydajność OCaml była na równym lub wyższym poziomie niż w Java s, a w plucie odległości takich języków jak C lub C Oprócz posiadania wysokiej jakości generatora kodu, OCaml ma przyrostowy zbiornik na śmieci GC. Oznacza to, że GC można dostosowywać do małych kawałków pracy w czasie, co czyni go bardziej nadaje się do miękkich aplikacji w czasie rzeczywistym, takich jak handel elektroniczny. Czyste, głównie Pomimo tego, jak funkcjonują często programiści, to wymarzone państwo jest podstawową częścią programowania, a która nie może i nie powinna być wykonywana z wysyłaniem pakietów sieciowych lub zapisem na dysk są przykładami mutability Pełne zobowiązanie do niezmienności jest zobowiązanie do nigdy nie budującego niczego realnego. Możliwe państwo ma swoje koszty, jednak bez mutacji kod jest na ogół łatwiejszy do zrozumienia, dzięki czemu interakcje i zależności między różnymi fragmentami kodubaza są wyraźne i łatwiejsze w zarządzaniu OCaml uderza w dobrą równowagę, powodując mutację łatwe, ale robienie niezmiennych struktur danych domyślnie Dobrze napisany system OCaml prawie zawsze ma zmienny stan, ale ten stan jest starannie ograniczony. Być może najłatwiejszym z tych zalet jest zademonstrowanie konkretnie tego, że jest to konkluzja Znaczenie konkluzji jest jasne, że inne rzeczy są równy, krótszy kod jest łatwiej czytać, łatwiej pisać i łatwiej utrzymywać. Oczywiście ograniczenia nie są dobrym e ograniczając wszystkie nazwy funkcji do pojedynczych znaków, ale zwięzłość jest jednak ważna, a OCaml ma wiele do pomagania w utrzymaniu małej bazy kodu. Jedną z zalet OCaml przynosi do tabeli typowe wnioskowanie, które eliminuje potrzebę wielu deklaracji typu To odchodzi z kodeksem, który jest tak zwarty, jak kod napisany w językach dynamicznych, takich jak Python i Ruby W tym samym czasie uzyskujesz wydajność i poprawność korzyści typów statycznych. Za pomocą poniższej mapy funkcji OCaml do przekształcania elementów krotki. Tutaj , mapa jest definiowana jako funkcja z dwoma argumentami funkcja f i triple x, y, z Zauważmy, że fx jest składnią do zastosowania funkcji f do x. Teraz zastanówmy się, jak wyglądałaby to w C 4 0 Kod C, a funkcjonalnie ekwiwalentny, wygląda na bałagan, a rzeczywista struktura jest zasłonięta hałasem syntaktycznym. Innym źródłem zwięzłości jest zapis OCaml do opisywania typów W sercu tego zapisu jest pojęcie algebraicznego typu danych Dane algebraiczne ty masz typy, które otrzymujesz, gdy masz system, który zawiera dwa sposoby budowania nowych typów produktów i sum. Typ produktu jest bardziej znany z dwóch Tuple, rekordy, struktury i obiekty są przykładami typów produktów Typ produktu łączy wiele wartości różnych typów w jedną wartość Nazywane są typami produktów, ponieważ odpowiadają matematycznie produktom kartezjańskim typu składowego. Typ sumy odpowiada rozłącznemu związkowi składowych typów i jest używany do wyrażania wielu możliwości Gdzie produkt typy są używane, gdy masz wiele rzeczy w tym samym czasie a i b i c, typy sum są używane, gdy chcesz wyliczyć różne możliwości a lub b lub c Typy sum mogą być symulowane, choć nieco nieumyślnie w językach obiektowych, takich jak Java używając podklas i wyświetlają się jako typy zjednoczenia w języku C. Jednak wsparcie w systemach typu większości języków umożliwiające interakcję z typami sumy w sposób bezpieczny jest zaskakująco słabe. vides przykłady typów danych algebraicznych w pracy Kod definiuje typ reprezentujący wyrażenia Boole'a w zestawie predykatów bazowych i funkcję do oceny tych wyrażeń Kod jest ogólny w zbiorze predykatów bazowych, więc przedmiotem tych wyrażeń może być dowolny od nierówności całkowitych do ustawień flag kompilatora. Wyrażenie typu sumy wskazuje rury oddzielające różne ramiona deklaracji Niektóre z tych ramion, takie jak True i False, są prostymi znacznikami, a nie zasadniczo różnymi od elementów wyliczenia w Java lub C Inne, takie jak I i Nie mają skojarzonych danych, a dane różnią się między sprawami Ten typ rzeczywiście zawiera zarówno sumy, jak i produkty, z gałązkami And i Or z krotkami Typy składające się z warstwowych kombinacji produktów i sum są wspólne i potężny idiom w OCaml. One godnym uwagi bitem składni jest zmienna typu zmienna typu A może być inicjowana dowolnym typem, a to pozwala na kod jest ogólny w zbiorze predykatów bazowych Jest to podobne do sposobu, w jaki typowe typy są obsługiwane w Javie lub C Tak więc lista Java s zostanie wyświetlona jako lista w OCaml. Funkcja eval przyjmuje dwa argumenty wyrażeń, wyrażenie to ewaluacja i ewaluacja funkcji do oceny predykatów bazowych Kod jest ogólny w tym sensie, że eval może być użyty do wyrażania w odniesieniu do dowolnego typu predykatu bazowego, ale należy dostarczyć evalbase w celu oceny prawdy lub fałszu tych predykatów bazowych Funkcja eval jest definiowany jako skrót do wywołania wywołań rekurencyjnych do ewaluowania z evalbase jako argumentem Wreszcie instrukcja dopasowania jest używana do analizy przypadków możliwych struktur wyrażenia, wywoływania ewaluacji podczas oceny predykatu bazowego, a w przeciwnym razie działania jako prosta rekursja nad strukturą typów danych. Rejestracja 2 pokazuje, jak ten sam kod mógłby być renderowany w Javie. Ważność jest natychmiast uderzająca. Dodając pojedynczą sprawę, na przykład I ta kes dwie krótkie wiersze w OCaml i osiem w Javie i kod Javy jest rzeczywiście bardzo minimalne, jak to się dzieje Jeśli chcesz pozwolić na tworzenie innych algorytmów wokół tego typu wyrażenia, które nie są pieczone w definicji klasy, to prawdopodobnie chcesz użyj wzorca odwiedzin, który znacznie powiększy liczbę wierszy. Innym aspektem języka wymagającego dalszego wyjaśnienia jest zdolność systemu typu do przechwytywania błędów Osoby, które nie są zaznajomione z OCaml i pokrewnymi językami, a niektóre często tworzą błąd niedoszacowania mocy systemu typu Łatwo jest stwierdzić, że wszystko, co system typu robi dla Ciebie zapewnia, że ​​parametry zostały prawidłowo przesłane, np. pod warunkiem pływaka, w którym miałeś dostarczyć pływak. więcej niż to Nawet naiwne korzystanie z systemu typu jest bardzo dobre do złapania błędów Należy rozważyć następujący kod Pythona do odprowadzania listy, tzn. usunięcia sekwencyjnych duplikatów. Ten kod zawiera oks dość proste, ale ma błąd, który nie prawidłowo obsługuje koniec listy Oto jeden sposób na to naprawienie. Teraz spójrzmy, co się dzieje przy pisaniu mniej więcej takiej samej funkcji w OCaml, przy czym mniej więcej to samo bug. This używa składni dopasowanej do wzorca OCaml, aby uzyskać dostęp do elementów listy Oto konstruktor listy i wskazuje pustą listę W ten sposób sprawa pasuje do pustej listy, a spacja xy odpowiada listom, które mają co najmniej dwa elementy, x i y Odpoczynek zmienny odnosi się do potencjalnie pustej reszty listy. Podobnie jak w przykładzie Pythona, ten kod nie uwzględnia, co się dzieje, gdy dojdziesz do końca listy i pozostawi tylko jeden element W tym przypadku, jednakże można dowiedzieć się o problemie nie w czasie wykonywania, ale w czasie kompilacji Kompilator daje następujący błąd. Jedna sprawa, jest listą z pojedynczym elementem. Możesz naprawić kod i spełnić kompilator, dodając obsługi dla brakujących case. The błąd tutaj jest trywialny, że można było łatwo znaleźć za pomocą testów. Ale system typu nie narusza błędów, które trudno przetestować, ponieważ pojawiają się tylko w dziwnych przypadkach narożnych, które można łatwo pominąć w testowaniu, lub dlatego, że pojawiają się w skomplikowanych systemach trudno wyśmiewać się i ćwiczyć wyczerpująco. Zewnętrzne wyjście z pudełka, OCaml jest całkiem dobry w złapaniu błędów, ale może to zrobić jeszcze lepiej, jeśli projektujesz typy dokładnie Uważaj na przykład następujące typy reprezentujące stan połączenia sieciowego . Typ connectionstate jest prostym wyliczeniem trzech stanów nazwanych, że połączenie może być w connectioninfo jest typem rekordu zawierającym wiele pól opisujących różne aspekty połączenia Zauważ, że pola, które mają opcję na końcu typu są zasadniczo puste pola Domyślnie wartości w OCaml są gwarantowane jako niezerowe Poza tym, nie ma nic o tym kodzie, który różni się od tego, co można napisać w Javie lub C. Oto niektóre z nich tworzenie na poszczególnych polach rekordu i ich wzajemne relacje. serwer wskazuje tożsamość serwera po drugiej stronie połączenia. lasttimetime i lastpingid są przeznaczone do wykorzystania w ramach protokołu keep-alive Należy zauważyć, że oba te pola powinny być obecne lub żaden z nich nie powinien być obecny tylko wtedy, gdy stan Connected. Sessionid jest unikatowym identyfikatorem, który jest wybrany na nowo przy każdym nawiązaniu połączenia. Powinien być także obecny tylko wtedy, gdy stan Connected. gdy jest zainicjowany jest do śledzenia, kiedy rozpoczęto próbę rozpoczęcia połączenia, co może być użyte do określenia, kiedy próba połączenia powinna zostać przerwana Powinien być obecny tylko wtedy, gdy stan jest połączony. Połączone śledzenie śledzi, kiedy połączenie zostało wprowadzone w stan Rozłączony i powinno być obecne tylko w tym stanie. Jak widać, wiele niezmienników łączy różne pola rekordów razem Utrzymywanie takich niezmienników odbywa rzeczywistą pracę Należy dokładnie je dokumentować, nie przechodź nad nimi później musisz napisać testy w celu sprawdzenia niezmienników i musisz zachować ostrożność, aby nie złamać niezmienników w miarę ewolucji kodu. Ale możemy to zrobić lepiej Rozważmy następującą wersję. Teraz mamy kombinację produktu i sumy typy, które dokładniej reprezentują zestaw dozwolonych stanów połączenia W szczególności istnieje inny typ zapisu dla każdego z trzech stanów, z których każdy zawiera informacje istotne tylko dla tego stanu Informacje, które zawsze są istotne w tym przypadku, po prostu serwer jest popychany do rekordu najwyższego poziomu. Ponadto stwierdziliśmy, że lasttimetime i lastpingid są albo oba obecne, albo oba nieobecne, reprezentując em jako lastping, która jest opcjonalną parą. By robi to wszystko, ve ve wbudowane w wiele wielu wymaganych inwariantów Teraz, gdy niezmienne są częścią typów, kompilator może wykryć i odrzucić kod, który naruszałby te niezmienne Jest to zarówno mniej pracy, jak i bardziej wiarygodne niż utrzymywanie takich niezmienników ręcznie. Przykład używa algebraicznych typów danych do kodowania niezmienników, ale OCaml ma inne narzędzia do robienia tego samego modułu OCaml s jest przykładem, pozwalającym na określenie niezmienników w interfejsie modułu W przeciwieństwie do większości języków obiektowych, OCaml umożliwia wyrażanie złożonych niezmienników wspólnych na wiele różnych typów. Ogólnie, moduły OCaml są potężnym narzędziem służącym do podziału bazy kodu na małe, zrozumiałe fragmenty, w których interakcje między tymi kawałkami są pod kontrolą programistą jest wyraźna kontrola. Zdolność systemowa do złapania błędów w systemie typu jest cenna nawet w przypadku małych, samotnych projektów, ale naprawdę świeci w środowiskach współpracy przy czym wiele deweloperów pracuje wspólnie na długowiecznej bazie kodu. Poza znalezieniem błędów, podpisy typu odgrywają zaskakująco cenną rolę jako pewna, gwarantowana poprawna dokumentacja. W kontekście rozwijającej się bazy kodu, niezmienne wymuszone przez typ system ma tę zaletę, że jest bardziej trwały niż te, które są egzekwowane konwencją, ponieważ mniej prawdopodobne jest, że zostały one rozbite przypadkowo przez innego dewelopera. Nie można powiedzieć, że OCaml jest bez jego wad Jest oczywiście oczywiste, że wszystkie problemy związane z byciem językiem mniejszościowym OCaml posiada świetną społeczność, która stworzyła bogaty zestaw bibliotek, ale biblioteka ta jest bledsza z tym, co jest dostępne dla Pythona, C lub Java Podobnie narzędzia programistyczne, takie jak IDE, profilerzy i debuggery są tam, ale są znacznie mniej dojrzałe i wyrafinowane niż ich kuzyni w bardziej popularnych językach. Innym ograniczeniem OCaml ma związek z równoległością Okres wykonywania OCaml ma jeden r co oznacza, że ​​trzeba używać wielu procesów, aby wykorzystać wiele rdzeni na pojedynczej maszynie W większości przypadków pasuje to do naszego modelu rozwoju, a my preferujemy przekazywanie wiadomości do wątków pamięci współdzielonej jako modelu programowania równoległości, ponieważ prowadzi do łatwiejszego do zrozumienia kodu i znacznie lepiej sprawdza systemy, które łączą wiele różnych maszyn fizycznych. Narzędzia dostępne w szerszym świecie OCaml do tego rodzaju programowania wieloprocesorowego wciąż są dojrzewania. Jednak ograniczenia dotyczące OCaml nie są fundamentalne natura Mają więcej do czynienia ze szczegółami implementacji lub popularnością języka, a nie z samym językiem W końcu to, co wydaje mi się najbardziej zaskakujące, jestem teraz całkiem przekonany, że podstawowe idee za OCaml są niezwykle cenne, czego dowodem jest to, że samo OCaml, niezależnie od ograniczeń, jest bardzo skutecznym narzędziem, ale te idee pozostają uparcie poza główną nurtem. PS to jest na krawędzi zmian Języki takie jak F i Scala wprowadzają niektóre pomysły OCaml i Haskell do szerszej publiczności, integrując się w ekosystemach Dotnet i Java, może odpowiednio 10 lat od teraz, nie będziemy już musimy zapytać, dlaczego te pomysły nie dotrwały w szerszym świecie Ale nie ma powodu, aby poczekać Teraz możesz dodać OCaml do swojej skrzynki na narzędzia. LOVE IT, HATE IT ZAPYTAJ KORZY. Yaron Minsky uzyskał tytuł doktora nauk komputerowych z Uniwersytet w Cornell w 2002 r., Koncentrując się na systemach rozproszonych W 2003 r. Wstąpił do Jane Street, gdzie założył grupę badawczą ilościową, a od 2007 r. Kieruje grupą ds. Technologii ACM 1542-7730 11 0900 10 00. opublikowany w Queue vol 9, nr 9 zobacz ten element w Bibliotece Cyfrowej ACM. Robert C Seacord - niezainicjalizowane odczyty Zrozumienie proponowanych poprawek do języka C. Karlli Baquero, Nuno Pregui a - Dlaczego zegary logiczne są łatwe Czasem wszystko czego potrzebujesz to właściwy język Guay. Erik Meijer, Kevin Millikin, Gilad Bracha - Spicing Up Dart z efektami ubocznymi Zestaw rozszerzeń języka programowania Dart, przeznaczony do asynchronii i funkcji generatora. Dave Long-META II Digital Vellum w cyfrowym Scriptorium Revisiting Schorre's 1962 kompilator-kompilator. Bilyan Borisov piątek, 24 stycznia 2017 15 01 30 artykuł UTC. Great moim zdaniem, większość krytyków OCaml w komentarzach pominęła fakt, że język można skompilować nie tylko do kodu bajtowego, ale również do natywny kod W dłuższej perspektywie skompilowana aplikacja będzie zawsze szybsza niż skrypt Python-Ruby-Perl. Zaniedbanie na bok, chociaż całkowicie zgadzam się, że języki funkcjonalne, z przykładem OCaml, są znacznie bardziej zwięzłe niż Java C, statyczny typ i typu wnioskowania są bardzo dobre nawet dla małych i średnich projektów Ponownie, to wszystko jest osobistym preferencją, ale logicznie mówiąc dynamicznie wpisany język pozwoli Ci robić nieprzyjemne rzeczy like. which oceny do F alse w Pythonie, co doprowadzi do powstania TON błędów, które tylko testy semantyczne mogą złapać, ponieważ jest to syntetycznie OK. Dlatego nawet jeśli założymy, że Python jest tak zwięzły, jak OCaml lub jakikolwiek inny język funkcjonalny i skompilowany statycznie, to zawsze być wolniejszy i pozostawi większy margines za wprowadzenie błędów w ogromnych bazach kodu Jednak, jak sugeruje autor, Python ma bardzo poważną zaletę, a mianowicie jej obszerny zestaw bibliotek, ale osobiście uważam, że dają niedoświadczony programator falszywy sens bo czujesz się złudzeniem, że potrafię dużo robić bez większego wysiłku. Na koniec dnia języki są nadal narzędziami, a my nadal ich kochamy i bronimy ich bardzo drogo, więc chyba wszystko idzie w jakim języku programowania jest najlepszy dyskusja. Kevin Kinnell Czw, 11 Paź 2017 19 59 40 UTC. Pierwsza klasa to definicja CS, a zgodnie z tą definicją CL ma funkcje pierwszej klasy, zrozumiałem, co miałem na myśli. Powinienem był powiedzieć bardzo łatwo dostępne funkcje pierwszej klasy. Zastanawiam się nad tym. Jesse Talbutt Sun, 19 sierpnia 2017 16 10 16 UTCNie pamiętam, że robota, o którym mowa, jest jednym z pierwszych scen Robocop Wtedy prawdopodobnie użyłem bardziej silnie wpisanego języka. Jesse Talbutt Sun, 19 sierpnia 2017 15 59 42 UTCmon LISP faktycznie, mają pierwsze klasy funkcje Jest to jeden z sinusoidy języka - nie jestem pewien, jak ktoś mógłby się źle. Główna różnica między LISP a Scheme polega na tym, że LISP używa oddzielnych przestrzeni nazw dla swoich funkcji i zmiennych, co jest streszczenie, że zarówno niewiarygodnie potężne, jak i niesamowicie niebezpieczne, wszystko jedno jest jednym mądrym kodeksem, używającym tej funkcji, aby otworzyć zamknięcie i uzyskać nieprzewidywalne efekty uboczne, które przeczytałem w tym artykule, zastanawiając się, czy zamierzają używać OCaml, dlaczego nie po prostu idź cały świnia i używaj LISP, ale ja zobacz teraz problem - OCaml jest jak LISP, w którym poświęca się moc, której prawdopodobnie nigdy nie użyjesz w zamian za bezpieczeństwo, które prawdopodobnie przyniesie wysoką premię, gdy będziesz zajmował się dużymi transakcjami finansowymi w czasie rzeczywistym zamiast mówić, tworząc naturalny język DSL robots. Kevin Kinnell, poniedziałek, 11 czerwca 2017 23 17 33 UTC. Na chciałem / chciałbym przeczytać kilka ostatnich ustępów. kodu, 2 język napisany kod, 3 - i proszę wybaczyć pun - znajomość kodera. Można argumentować, że programowanie piśmiennicze obviates 1, ale to, co faktycznie wydaje się zrobić w praktyce jest dodanie wysoce techniczna narracja narracyjna, która niszczy przepływ programu To coś takiego jak czytanie krótkiej notatki prawnej Fine - jeśli jesteś prawnikiem, z szeroką znajomością tajemniczego meta-języka prawa Moje przeprosiny, dr Knuth, ale tam to jest Prawdziwe lekarstwo na 1 oznacza kombinację od opisu celu kodu i dobrych uwag. 3 jest mniej więcej kombinacją wrodzonej zdolności i doświadczenia, czy mówimy o pisarzu czy czytelniku o kodzie, o którym myślę, że NO CODE nie brzmi jak naturalny język, ale na pewno nie ma takiego jak angielski Jeśli myślisz to dlatego, że masz zdolność i doświadczenie Prawdopodobnie proces mówienia w języku programowania wydaje się odzwierciedlać proces uczenia się języka naturalnego W szczególności istnieje cały zakres rodzimych mówców - możesz mieć niemowlęta rozmawiające niemowlęta rozmawiają z dorosłymi, wykształconymi dorosłymi rozmawiającymi z mniej wykształconymi dorosłymi itd. To trochę przyjemność obserwować Znajomość koderów, zarówno czytelników, jak i pisarzy, jest dużą częścią czytelności Każdy, kto może język, który w jakiś sposób spódnicę jest, moim zdaniem, jakimś nadprzyrodzonym bytem. To pozostawia 2, język napisany w kodzie Najbliższy obiektywny pogląd na to, jak sądzę, jak szybko czytelnik może zrozumieć ogólny celem kodeina g sekwencji i integracji, że w przepływie programu Innymi słowy, czy kod może być grokked easily. You może stworzyć język, który sprawia, że ​​to prawie niemożliwe do osiągnięcia - APL przychodzi do głowy Nikt nie może twierdzić, że APL isn t zwięzły Uzyskanie doświadczenia niezbędnego do odczytu APL, podobnie jak języka naturalnego, jest prawdopodobnie pozbawione większości zwykłych śmiertelników przez ich skończoną żywotność. Wątpię, czy ktoś może przebijać APL, nawet jeśli napisał kod. Na drugim końcu pojawia się ponownie COBOL i Java jeden programista Oczywiście Jeśli rzeczywiście możesz wpisać kod grok w którymkolwiek z nich, możesz zarobić pieniądze, ale sprzedałeś swoją duszę. Wypadki mają tendencję do przerwania ich zamykania nawiasów, ale można nauczyć się ich nie widzieć Lisps użyj REPL, co daje im korzyść przy kodowaniu przyrostowym Niestety, z wyjątkiem dialektów Scheme, funkcje aren t first-class w Lisp Lisp mogą być glowkowane, ale brakuje im pewnej ekspresji mocy, szczególnie typów wbudowanych programowalnych i typu 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 2017 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 2017 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 2017 15 57 31 UTC. name Thu, 22 Dec 2017 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.2018 ACM, Inc All Rights Reserved.

No comments:

Post a Comment