2013-04-12 25 views
7

Mój obecny podstawowy język programowania to Python. Jest w tym wiele rzeczy, które lubię, ale lubię również języki funkcjonalne. Nie wystarczy, aby wykonać w nich cały program, ale zdecydowanie dla pewnej funkcjonalności, która dobrze pasuje do formy funkcjonalnej.Python i język funkcjonalny interop

Oczywiście .NET jest niesamowity pod tym względem, posiadający zarówno ironpython, jak i F #. Ale biorąc pod uwagę wsparcie ironpython dla ekosystemu naukowej Pythona jest nadal podejrzany ostatnio, gdy sprawdziłem, .NET nie jest dla mnie dużą opcją. Jestem trochę zszokowany widocznym brakiem narzędzi, które ułatwiają współdziałanie między cpython i powiedzmy, Haskell. Oba są dojrzałymi językami z dużymi społecznościami, które wydają mi się tak miłe.

Czy jest coś w ich architekturze, która sprawia, że ​​są one źle kompatybilne, a ich brakuje, czy jest to po prostu coś niesamowitego, co jeszcze czeka?

Aby wyjaśnić; są tam na wpół wypalone projekty, ale myślę o czymś, co pasuje do niesamowitości Splotu, pycudy lub wzmocnienia. Coś, co automatyzuje wszystkie instalacje związane z interopem za pomocą kilku adnotacji.

+2

Użytkownik może łączyć się między Cython a Haskell C FFI – jozefg

+0

Right. Haskell ma współdziałanie z C, a Python ma współdziałanie z C. Więc teoretycznie powinno być możliwe automatyczne przypisanie mojej listy Pythona do listy Haskella i na odwrót. Ale nie ma narzędzi do starannego wyabstrahowania takiego blankietu, korzyści są szybko w cieniu, moim zdaniem. –

+0

Myślę, że to pytanie dotyczące kultury. To jest jak ... tworzenie skryptów AWK do użytku z Scala przez Java Scripting Services? – Ingo

Odpowiedz

0

Nawiązując do:

Czy jest coś o ich architektury, która czyni je źle kompatybilny że im brakuje, lub jest to po prostu coś niesamowite, że wciąż czeka się stało?

myślę, że jest o ludziach robiących tych językach:

Nie ma dużo ludzi, którzy chcą zrobić Haskell i Python w tym samym czasie.

  1. skorzystać z obu językach (liek Haskell i Python) w tym samym czasie można albo pójść za pośrednictwem C-Interface lub stworzyć protokół oba języki mówienia.

    Obie są dość zaawansowane, ograniczając liczbę osób, które mogłyby to zrobić. Na pewno pojawią się również kompromisy, które utrudniają pełne wykorzystanie obu języków.

  2. Używam Pythona i chociaż znam trochę Haskella, nie programuję go. Trochę utknąłem w orientacji obiektowej, mówiąc mi, że pewnego dnia problem zadecyduje o mnie, że lepiej go rozwiązać w Haskellu niż w pytonie. Problem ten jeszcze się nie pojawił, ponieważ moja pierwsza myśl brzmi: wiem, jak to zrobić w Pythonie. Sądzę, że inni "eksperci" również stają wobec tego problemu.

  3. Zaczynasz myśleć w języku. Myślę, że Haskell ma zupełnie inny sposób myślenia, z funkcjonalnym stylem, bez skutków ubocznych. Aby wejść w to myślenie, muszę zapomnieć o mojej wiedzy w Pythonie lub jej nie używać. Przełączanie się między tymi dwoma sposobami myślenia wymaga pewnej siły.

Zawijanie: ponieważ te dwa języki nie są już tak blisko, pozostają w separacji. Trudno jest robić jedno i drugie i nie ma zbyt wielu prostych sposobów na praktykowanie obu tych rzeczy.

+1

Podsumowując: tak naprawdę nie widzisz sensu. Ale wierz mi: używanie języków funkcjonalnych staje się o wiele bardziej atrakcyjne, gdy są one płynnie zintegrowane. Nie mów fanatykom funkcjonalnym, ale niektóre zadania dają o wiele lepszy styl. Umieszczenie piksela w buforze ramki w funkcjonalnym języku jest po prostu odczuwane jako umieszczanie kwadratowego kołka w okrągłym otworze, np. To właśnie powstrzymuje dla mnie języki funkcjonalne. Używam już w tym samym czasie niezliczonych języków, więc nie jest to przeszkodą dla wielu osób. Przesunięcia linii linii podstawowej do zawijania funkcji 5-liniowej to. –

0

Myślę, że jakakolwiek odpowiedź na to pytanie byłaby niedbałością bez uwzględnienia inercji języków zorientowanych obiektowo i imperatywnych w stosunku do funkcjonalnych. Rozważmy następującą sytuację, poczynając od tego, że języki funkcjonalne nie są nauczane z częstotliwością, w której języki zorientowane obiektowo lub imperatywne są na poziomie średnim, wyższym lub wyższym.Jak wspomina Użytkownik, programista ma istotny wpływ na wybór języka. Na przykład podczas typowego kursu CS na czteroletnim uniwersytecie można nauczyć się kilku języków i najprawdopodobniej żaden z nich nie jest językiem funkcjonalnym. Ten typowy absolwent przystępuje następnie do pracy w przemyśle, gdzie po zaprogramowaniu na ponad 40 godzin pracy tygodniowo, bardzo trudno jest potem poświęcić czas, nie tylko nauczyć się zupełnie nowego języka, ale także nauczyć się języka, który działa zupełnie inaczej niż ten, który już jest znany. Oprócz tego jest wadą, że języki funkcjonalne nie są tak przydatne w branży, jak obiektowe czy imperatywowe. Widać, że biorąc pod uwagę obecny stan, zrozumiałe jest, że interoperacyjność pomiędzy Pythonem i Haskellem nie jest tym, co chcieliby niektórzy programiści.

0

Jeśli używałbyś Haskella do powiązań w Pythonie, co zrobiłbyś w każdym języku?

Jeśli weźmiesz pod uwagę bindowanie C i Pythona, na przykład, używasz C, gdy potrzebujesz zwiększenia prędkości, lub kiedy potrzebujesz przesunąć bity dookoła, i używasz Pythona, kiedy chcesz być ekspresyjny i zwięzły. Powszechne jest, że masz parę języków, jedną dla większości logiki i jedną, którą możesz porzucić, aby uzyskać prędkość, kosztem przejrzystości. Im większa różnica między językami, tym więcej możesz zyskać na przełączaniu.

Jeśli mielibyśmy związać Haskella i Pythona, nie jest jasne, co by z tego zostało. Nie spadłbym z Pythona do Haskella tylko dla prędkości, ponieważ Haskell, choć szybki, nie jest tak szybki jak C. Ale gdybym używał Haskella, kiedy miałbym używać Pythona? Python nie jest bardziej ekspresyjny niż Haskell, a nie porównywanie C i Pythona.

myślę, że przez większość czasu, to łatwiej jest po prostu importfunctools i funkcjonalnie programu w Pythonie, zamiast konieczności konwertowania obiektów do jakiejś reprezentacji Haskell, popracować, a następnie przekształcić go z powrotem.

Chociaż, jeśli naprawdę tego chciałeś, Cython ułatwiłby pisanie funkcji, które może wykorzystać FCI Haskella.

+0

Interesująca obserwacja. – Ingo

+1

Chciałbym użyć Pythona dla rzeczy, które są wyrażone w sposób naturalny jako kod zmienny, a Haskell dla wewnętrznych pętli matematycznych, gdzie niezmienność Haskella pozwala mi pisać bardziej oczywisty poprawny kod (który jest również znacznie szybszy niż python; z C). Ale zmienny/niezmienny podział pojęciowy byłby dla mnie główną atrakcją. –

+0

Czy chciałbyś, abym uzupełnił FFI, aby pokazać, jak powiązać funkcję Haskell w Pythonie? (Sam też muszę się trochę nauczyć). –

2

Innym podejściem jest użycie rurek unixowych i napisanie programu Haskell, a także napisanie programu w języku Python i umożliwienie komunikowania się za pomocą tekstu. Haskell i Python mają nawet tę samą składnię dla list, więc bardzo łatwo jest przesyłać dane między nimi.