Z dość powszechnego języka programowania, który według ciebie najbardziej zaskakuje?
Słuchałem wielu podcastów programistycznych i poświęciłem trochę czasu na naukę nowych języków, które są uważane za nadchodzące i ważne. Niekoniecznie mówię o BrainFuck , ale jaki język uważasz za kwestionujący powszechne paradygmaty programowania?
Dla mnie w latach 90. trochę programowałem funkcjonalnie i logicznie (na przykład Prolog ), więc nie mogę powiedzieć, że znajduję tam coś specjalnego.
Daleki jestem od bycia w tym ekspertem, ale nawet dzisiaj najbardziej wymagającym dla mnie językiem programowania jest Perl . Nie dlatego, że „Hello World” jest trudny do wdrożenia, ale raczej jest tyle elastyczności leksykalnej, że niektóre z najtrudniejszych rozwiązań można rozkładać tak poetycko, że muszę wyjść na zewnątrz z terminala, aby oczyścić głowę. Nie twierdzę, że prawdopodobnie sprzedałbym komercyjne wdrożenie oprogramowania, tylko dlatego, że istnieje wyraźny powód, dla którego Perl jest tak (nie) sławny. Wystarczy spojrzeć na podstawową listę książek.
Więc jaki jest twój zadziwiający język, który promuje twoje lepsze programowanie i praktyki ?
źródło
Odpowiedzi:
APL
Język ten jest bardzo mocny i bardzo lakoniczny, to będzie bolało swój mózg.
Na początek trudno jest użyć niestandardowej klawiatury lub przynajmniej nakładki klawiatury, aby wyświetlić wszystkie niejasne symbole, których używa.
Następnie język jest oparty na paradygmacie opartym na wektorze / macierzy i specjalizuje się w złożonej algebrze liniowej. Oryginalna wersja nawet nie zawierała konstrukcji pętli, nic i wszystkiego, co było zrobione przez połączenie raczej nietypowych operatorów macierzy.
strip_tags()
ktoś? (pożyczone z Wikipedii)źródło
Haskell . Jest bardzo bliski bycia czysto funkcjonalnym, do czego większość ludzi nie jest przyzwyczajona; bardzo wymagający, co jest pomocne, gdy wiesz, co robisz, ale do tego czasu jest frustrujące; ma dość tajemniczą, wysoce symboliczną składnię, która jest świetna, gdy ją znasz, ale przedtem nieprzejrzysta ... lista jest długa.
Poza tym po prostu niemożliwe jest sformatowanie tych rzeczy w sposób, który wygląda dla mnie dobrze.
źródło
Prolog. To było tak inne niż jakikolwiek inny język, którego użyłem, kiedy po raz pierwszy się z nim spotkałem. Lubię to, więc nie nienawidzę składni ani nic takiego.
źródło
!
).Zgodzę się z tobą w sprawie Perla. To najbardziej brzydka składnia, jaką kiedykolwiek widziałem. Mówią, że nawet programiści Perla nie pamiętają, co napisali następnego dnia.
źródło
Chciałbym powiedzieć Forth . Notacja, że wszystkie operacje są manipulacjami stosowymi. W czystej postaci nie ma zmiennych lokalnych do użycia.
źródło
Ruby .
To sprawia, że chcę się zabić:
(Mogę mieć błędną składnię, ale rozumiesz o co chodzi).
źródło
DateTime.Now.AddMonths(1);
? Funkcje te raczej nie czynią kodu bardziej czytelnym. (Nie twierdzę, że C # ma najlepszą składnię. Możesz przenieść ją na dowolne konwencje językowe i nadal będzie obowiązywać.)Brainfuck
Każdy, kto może uczciwie napisać tę kpinę z języka, nie powinien nawet potrzebować takiego wątku.
Hello World (wskaźniki, po lewej; wyjaśnienie, po prawej):
źródło
Lisp to mój najnowszy, zadziwiający język.
Wziąłem ze sobą monady i programowanie funkcjonalne z Haskell, a teraz mam makra do pracy. Właśnie wchodzę w CLOS i wcale nie dotknąłem systemu warunków.
źródło
ŚWINKA
Jest to język, który pojawia się od czasu do czasu w opowiadaniach online i ma dodatkowy zaszczyt bycia w rzeczywistym użyciu produkcyjnym, w którym przechowywane są krytyczne informacje dotyczące bezpieczeństwa życia (tj. Zapisy dotyczące pacjentów). Jest to jednak również język, w którym doceniana jest zwięzłość, a w kodzie produkcyjnym mogą pojawić się takie funkcje, jak następujące (przykład z artykułu z Wikipedii na ten temat):
źródło
Powiedziałbym, że Coq lub inna implementacja teorii typów zależnych. System typów Haskella nie jest zbyt ekspresyjny. Przejście do bardziej wyrazistego systemu typów (na przykład rachunku konstrukcji (CoC)) pozwala ci robić porządne rzeczy, takie jak sprawdzanie właściwości programów w języku i osadzanie silnych niezmienników w typach, które można sprawdzić statycznie.
źródło
Cel C . Szczerze mówiąc, przestudiowałem go bardzo krótko i nie podobało mi się składnia na pierwszy rzut oka tak bardzo, że się poddałem.
Ponieważ jest to tak (względnie) wspólny język (głównie dla programistów Mac / iPhone / iPad ), jestem pewien, że po przyzwyczajeniu się jest całkiem przyzwoity.
źródło
[foo bar]
to tylko cukier syntaktyczny, dlaobjc_sendMsg(foo, "bar");
którego z kolei szuka się wskaźnika funkcji (jest to specjalny „pasek”, a nie ogólny). Czy zdałeś sobie sprawę, że jest w pełni napisany na klawiaturze?[receiver doStuff:arg]
, wygląda to jak dynamiczna javaWybieram Merkurego .
Mercury pochylił się, pokazując mi, że nawet czyste języki mogą wykonywać operacje wejścia / wyjścia .
Działa to w ten sposób, że funkcje We / Wy w Mercury przyjmują wartość „stanu świata” i zwracają nową wartość „stanu świata”. Tak więc funkcje I / O w Merkurym przekształcają świat, a tym samym zachowuje czystość.
źródło
Z pewnością musi to być Schemat . Próba wyjaśnienia
call-with-current-continuation
zawsze boli mój mózg, ale kiedy go zrozumiesz, możesz stworzyć niezwykle eleganckie rozwiązania.Chcesz zatrzymać się w połowie algorytmu i sterować ręką komuś innemu? Pewnie!
Chcesz kilka razy wznowić tę samą kontynuację? Oczywiście!
Chcesz wstrzymać wykonywanie algorytmu, ponownie zdefiniować funkcję, a następnie wznowić wykonywanie z oryginalnym stosem, ale ze zaktualizowanym stanem globalnym? Nie ma problemu! Czy robi to kilka razy z różnymi zmianami stanu globalnego, ale z tym samym punktem ponownego wejścia na stos? Dla pana, proszę pana, wszystko!
źródło
Kiedyś korzystałem ze starożytnego edytora o nazwie TECO (Text Editor and COmparator), który był bardzo potężnym językiem do modyfikacji tekstu, z wszystkimi rodzajami makr. Nie pamiętam dokładnie słynnego cytatu na ten temat, ale chodziło o to, że „każda losowa kolekcja 20 znaków jest prawie zawsze legalnym programem TECO i zmieni Twój plik (to edytor) w sposób zasadniczo nieprzewidywalny. Pamiętam, że pisałem konwerter Fortran na PL1 w około stronie kodu TECO.
źródło
Montaż był dla mnie najbardziej „pochylający się”, ale dopiero zaczynam.
źródło
Lisp . Nauka tego to seria małych objawień, z których każda całkowicie zmieni sposób myślenia o rozwiązywaniu problemów programistycznych.
źródło
REBOL
Jest zbudowany na zasadzie kodu jako danych, tak jak Lisp . Zwolennicy języka mają trudności z wyjaśnieniem, jakie są jego wyjątkowe zalety w porównaniu z innymi podejściami w tej rodzinie, i zwykle kończą wzruszanie ramionami i powiedzeniem czegoś takiego: „Cóż, facet, który zaprojektował AmigaOS, wymyślił to, standardowa biblioteka jest dołączona i mikroskopijna, a kiedy już go „dostaniesz”, będzie to jak wzięcie czerwonej pigułki Matrix i nigdy nie będziesz chciał wrócić. ”
Problem polega po części na tym, że jest dziwaczny i nie określił dokładnie, którzy programiści są jego rynkiem. Ale także częściowo dlatego, że wiele osób, które się za tym opowiadają, po prostu nie chce tego tłumaczyć . :)
Ale Douglas Crockford był fanem, zainspirował się stworzeniem JSON i zasugerował, aby ludzie przyjrzeli się temu jeszcze w październiku 2010:
Myślę, że warto spojrzeć na każdego, kto chce rozciągnąć swoje zdanie na temat projektowania języka i jego rozszerzalności. Teraz, gdy jest to oprogramowanie typu open source (po 18 latach autorskiego rozwoju), zwykłe zastrzeżenia, które dawałem za trzymanie go na dystans, już nie obowiązują ... warto to zobaczyć! Społeczność wyszła nawet ze swojego zastrzeżonego programu do przesyłania wiadomości opartego na Rebolu i zaczęła czatować na Stack Overflow (ku mojemu zaskoczeniu!)
źródło
Powiedziałbym, że wielu ludzi stara się unikać bezpośredniego pisania, że programiści uważają, że SQL jest oszałamiający. Myślę, że wiele osób po prostu nie myśli w kategoriach zestawów.
źródło
Czysty
Pure to funkcjonalny język oparty na przepisywaniu terminów. Podoba mi się, jest trochę rzadki i wyrazisty, choć trochę zaniżony.
źródło
Być może nie jest to najbardziej zadziwiające, ale nauka była dla mnie najtrudniejsza (myślałem, że Haskell i asembler są łatwiejsze!)
To jest zestaw języków HDL , w szczególności VHDL (i Verilog w mniejszym stopniu)
Przezwyciężenie faktu, że każda „funkcja” działa w tym samym czasie, jest niezwykle trudne i nie można uniknąć przejścia do paralelizacji absolutnie wszystkiego. Oczywiście jest to jednak tylko język programowania na granicy.
źródło
Tcl
Zacząłem się tego uczyć raz, ale kiedy nauczyłem się wystarczająco dużo, by mieć sens, naprawdę nie podobało mi się to, jak czuje się mój mózg. To wydaje się kwalifikować jako zadziwiające.
źródło
Oczywiście język maszynowy Turinga . Jest niezwykle potężny, o wiele lepszy od wszystkich innych istniejących języków programowania i gwarantuje zranienie mózgu, jeśli spróbujesz go użyć.
źródło
do
Wskaźniki, zarządzanie pamięcią i rzutowanie typów wymagają wiele przemyśleń i łatwo się pomylić. Brak wbudowanych struktur danych, takich jak tabele skrótów lub listy, oznacza, że musisz albo wymyślić własną, albo znaleźć bibliotekę innej firmy i nauczyć się jej interfejsu API.
źródło
JESS (Java Expert System Shell). Ta adaptacja CLIPS, osadzona w środowisku Java, jest funkcjonalnym językiem systemowym eksperta. Próba zmapowania prawdziwych obiektów Java jako faktów i znalezienia właściwych pytań, aby uzyskać oczekiwane wyniki, jest prawdziwym wyzwaniem. Mniej, jeśli znasz teorię systemu eksperckiego, ale kiedy wychodzisz z czystego sposobu myślenia OOP, nie pasuje dobrze. UWAGA: CLIPS to nie Lisp, ale tak to wygląda. Jeszcze jeden zginacz umysłu.
Po przejściu przez początkową krzywą uczenia się jest dość potężna i dość cholernie szybko wymyślić odpowiedzi.
źródło
TeX liczy się jako język, ponieważ Turing jest kompletny i uważam, że to dość zadziwiające. Język do pisania matematyki (i książek o programowaniu) ...
źródło
CIL
CIL, Common Intermediate Language, do którego kompilują się wszystkie programy .NET , rodzaj zestawu obiektowego. Interesujące jest dla mnie pisanie lub odczytywanie kodu i porównywanie jego konstrukcji z tymi, które już znam. To dobry sposób, aby dowiedzieć się więcej o tym, co .NET robi za kulisami. I może być przydatny do takich rzeczy, jak dynamiczne generowanie kodu lub przepisywanie istniejącego skompilowanego kodu za pomocą Mono Cecil .
źródło