Najbardziej zadziwiający język programowania? [Zamknięte]


45

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 ?


Czy to nie może być mylące i po prostu to zostawić?

4
Dowolny język, w którym liczy się biała przestrzeń!
mootinator

@mootinator - Ale w Pythonie praca jest przyjemna, o ile edytor tekstu nie powoduje bólu.
rjzii

1
@Thorbjorn Czy ktoś doda INTERCAL? APL to projekt gimnazjalny w porównaniu do tego wielkiego tatusia.
Mark C

Perl nie jest najtrudniejszy. Mam 12 lat i dość łatwo mogę programować Perla.
Dynamiczny

Odpowiedzi:


73

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.

Klawiatura APL

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)

strip_tags () ala APL


18
+1 za wyświetlenie klawiatury
tcrosley

5
@tcrosley: Fajnie, jeśli masz prawdziwy: wickensonline.co.uk/apl/unicomp-apl-top-large.jpg
Orbling

4
A jeśli nie było to wystarczająco zadziwiające, istniało kilka operatorów, którzy wymagali użycia klawisza Backspace / Overstrike. Na przykład odwróconą macierzą było kwadratowe pole (nad klawiszem L), na którym umieszczono znak podziału (ten obok klawisza cofania w prawym górnym rogu obrazu klawiatury).
Tangurena

2
Mam retrospekcje do wczesnych lat 80., kiedy zrobiłem APL, aby przeprowadzić analizę regresji statystycznej na wysokim poziomie, czy ludzie nadal z niej korzystają? Dreszcz.
HLGEM

2
Zrobiłem dużo APL raz - wciąż ma dla mnie nostalgiczne miejsce ... W tym czasie mi się podobało.
szybko_now

56

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.


7
Powiedziałbym też Haskell, ale nie dlatego, że jest tajemniczy. Choć z pewnością może być to trudne do zrozumienia, zadziwiająca rzecz dotyczy teorii, która się za tym kryje. Monada i strzały to wciąż domena, której nie podbiłem :)
Matthieu M.

11
Dlaczego „bardzo blisko bycia czysto funkcjonalnym”? Jest to czysto funkcjonalne.
dan_waterworth

4
Chciałbym zacytować siebie i dodać, w jaki sposób Haskell zgina twój umysł: „Haskell zapobiega wsuwaniu rzeczy pod dywan, zmusza cię do jawnego radzenia sobie ze strukturą programu i uczy języka, aby opisać te struktury : język typów. Zrozumienie typów, szczególnie bogatych jak Haskell, sprawi, że będziesz lepszym programistą w dowolnym języku. ” programmers.stackexchange.com/questions/28950/…
Waquo

14
Haskell jest czysto funkcjonalnym językiem programowania. Kod, który piszesz w Haskell, ma charakter czysto funkcjonalny (o ile nie korzystasz z niebezpiecznego PformformIO itp.). IO-Monada jest czysto funkcjonalna, jeśli uważasz inaczej, nie rozumiesz, w jaki sposób monady są używane do modelowania przepływu kontrolnego w czysto funkcjonalny sposób. Pomyśl o swoim programie jak o liście zakupów działań we / wy, przy czym lista zakupów jest po prostu strukturą danych, bez efektów ubocznych, a środowisko wykonawcze języka jest klientem, który wykonuje efekty uboczne.
Waquo,

8
@Jon, co powiesz na to, zgadzamy się, że: język Haskell jest czysto funkcjonalny, ale jego system wykonawczy nie. Wykonanie programu haskell jest nieczyste, ale sam program jest czysty.
dan_waterworth

30

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.


2
Podszedłem do Prologa jako programowanie odwrotne, chcąc poznać moje odpowiedzi, a następnie program, aby uzyskać pytania :)
Jé Queue

1
@Xepoch: Myślę, że możesz tam być, Prolog formułuje pytanie. Jeden z jedynych używanych prawidłowych języków 5GL.
Orbling

Ogólnie rzecz biorąc, myślę, że Prolog jest zawsze tak interesujący i wyjątkowo potężny, ale mam duże problemy z uzyskaniem pełnej orientacji w okolicy wycinania ( !).
Orbling

+1 dla Prologa, miałem kurs sztucznej inteligencji, który wykorzystywał Prologa i jest to jedyny kurs informatyczny, w którym źle się
spisałem

Prolog nie jest jednak funkcjonalnym językiem programowania. Bycie podekscytowanym funkcjonalnością przez Prolog jest jak bycie podekscytowanym programowaniem proceduralnym przez Lisp.
WŁAŚNIE MOJA poprawna OPINIA,

24

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.


2
Def +1 na Perlu. Zawsze szczególnie lubiłem (jak sądzę, że się nazywa) zmienne „implikowane”. Świetny kod tylko do zapisu.
GrandmasterB

2
Wszyscy piszą Perla tak różnie, że równie dobrze mogą pisać w różnych językach - nie musisz po prostu uczyć się, jak działa Perl, aby pobrać w nim kod innej osoby, musisz także nauczyć się, jak ta osoba go używała.
glenatron

3
Bah do tej odpowiedzi i oba komentarze na jej temat. Dobrze napisany perl jest łatwy do odczytania i napisania. Baby-perl napisany przez początkujących jest prosty, jeśli gadatliwy. Jedyny „nieczytelny” perl jest albo celowo zaciemniony, albo skryptuje jedno-liniowe.
Sean McMillan,

22

Chciałbym powiedzieć Forth . Notacja, że ​​wszystkie operacje są manipulacjami stosowymi. W czystej postaci nie ma zmiennych lokalnych do użycia.


10
FORTH to wspaniały język. Kiedy uczyłem się programowania na początku lat 80., miałem Atari 400, a moje wybory były interpretowane jako BASIC, Assembly i FORTH. Używałem wszystkich trzech w szerokim zakresie, ale MNIEJSZY niż jakikolwiek inny. Nadal mam ultra-klasyczne książki Leo Brodiego: Początek i Myślenie FORTH. W rzeczywistości, gdybym został poproszony o stworzenie od podstaw nowego języka hostingu na nowym systemie sprzętowym, bez wahania wybrałbym FORTH.
Adam Crossland,

3
@Adam Crossland: Thinking FORTH to świetna książka, możesz zainteresować się tym linkiem: thinking-forth.sourceforge.net
Orbling

1
@Orbling: wielkie umysły myślą podobnie. Nie więcej niż 10 minut temu umieściłem plik PDF na moim Kindle.
Adam Crossland,

1
@Adam Crossland: Idealne miejsce na to. Ta książka jest ogólnie pomocna dla programistów, powinna znajdować się na liście czytelniczej dla osób zainteresowanych FORTH lub nie.
Orbling

1
Całkowicie się zgadzam. Bardzo wiele mówi o tym, jak myślimy o ogólnym rozwiązywaniu problemów. Brodie jest tak świadomym myślicielem i jasnym pisarzem. Jego prace są dla mnie radością.
Adam Crossland

21

Ruby .

To sprawia, że ​​chcę się zabić:

1.month.from.now()

(Mogę mieć błędną składnię, ale rozumiesz o co chodzi).


23
O MÓJ BOŻE. Kto kiedykolwiek myślał, że to dobry pomysł?
EpsilonVector

8
Zgięcie umysłu nie polega na czytaniu, lecz na pisaniu. Wymyślenie tego nonsensu jest trudne, a konieczność zapamiętania / wyszukiwania wszystkich wbudowanych funkcji / właściwości jest absurdalna.
Mateusz

55
Czy tylko ja uważam, że to wygląda niesamowicie i jest prawdopodobnie dobrym powodem do nauki Ruby?
Orbling

9
Świetnie jest czytać, tak. Ale czy to oznacza, że ​​mogę napisać 3. miesiące z ostatniego miesiąca. Jeśli to był rok? Nie, a przynajmniej tak mi się nie wydaje . Jeśli mogę ... RoR może być pierwszym językiem telepatycznym.
morganpdx

15
Co jest nie tak 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ć.)
ChaosPandion

18

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):

+++++ +++++             initialize counter (cell #0) to 10
[                       use loop to set the next four cells to 70/100/30/10
    > +++++ ++              add  7 to cell #1
    > +++++ +++++           add 10 to cell #2 
    > +++                   add  3 to cell #3
    > +                     add  1 to cell #4
    <<<< -                  decrement counter (cell #0)
]                   
> ++ .                  print 'H'
> + .                   print 'e'
+++++ ++ .              print 'l'
.                       print 'l'
+++ .                   print 'o'
> ++ .                  print ' '
<< +++++ +++++ +++++ .  print 'W'
> .                     print 'o'
+++ .                   print 'r'
----- - .               print 'l'
----- --- .             print 'd'
> + .                   print '!'
> .                     print '\n'

2
A może Whitespace? Całe zło Brainfuck w połączeniu z niewidzialnym kodem.
Loren Pechtel

17

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.


Nawet mi się nie podoba Lisps (z możliwym wyjątkiem Clojure - nadal nie podjąłem decyzji) i dałem ci +1. Zadziwiająca część jest z pewnością i to, czego nauczyłem się od Lisp, mimo że jej nie używam, informowało wiele o tym, co robię w innych językach.
WŁAŚNIE MOJA poprawna OPINIA,

14

Ś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):

s A="String" F i=1:1:$L(A) W $c($S($A($E(A,i))<91:$A($E(A,i))-52#26+65,1:$A($E(A,i))-84#26+97))

wow, nie żartujesz, prawda? Nie zasnąłem i nagle jest 1 kwietnia? Nic z tyloma nawiasami i znakami dolara nie powinno być w pobliżu moich danych pacjentów.
dan_waterworth

1
Pierwszą moją pracą programistyczną była firma specjalizująca się w MUMPS! Niestety ukończyłem kurs uniwersytecki na temat tworzenia stron internetowych, więc zamiast do starych rąk umieścili mnie w nowo utworzonym zespole ASP firmy, ale MUMPS był językiem, w którym byliśmy szkoleni przez pierwsze kilka tygodni. Może miałem szczęśliwą ucieczkę ...
thesunneversets

1
Czy ktoś tu pisał z Madison Wisconsin? Verona, naprawdę?
Hans Passant

1
Wierzę, że thedailywtf.com ma całą sekcję poświęconą MUMPS. Nie wygląda na język, którego chciałbym dotknąć.
Tyanna

1
Pamiętam, jak uczyłem się M w środowisku akademickim i uważałem, że jest interesujący jako język specjalnego przeznaczenia. Zwięzłość, na jaką pozwala, jest jak przewrotny rodzaj minimalizacji. W mojej naiwności doszedłem do wniosku, że kod produkcyjny będzie zawierał niewiele ekstremalnych skrótów języka. Pierwszy i jedyny raz, gdy zobaczyłem produkcyjną bazę kodu M, moje jelita się ścisnęły ... wyglądało to tak jak twój przykład. Och, horror!
ajk

13

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.


2
Każdy system / prover / język typu zależnego prawdopodobnie byłby bardziej mylący niż zwykłe języki, więc +1.
Orbling

1
Formalna weryfikacja programów to coś, od czego dopiero zaczynam. Z pewnością pochyla umysł i staje się coraz bardziej przydatny w prawdziwym świecie. +1
dan_waterworth

7

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.


2
Cóż, prawdopodobnie kwalifikuje się to jako trochę zadziwiające, ale lubię to. Może ci to pomóc, jeśli zdasz sobie sprawę, że [foo bar]to tylko cukier syntaktyczny, dla objc_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?
Per Johansson,

Objective-C to po prostu ogromny cukier syntaktyczny wokół funkcji środowiska uruchomieniowego. Kiedy się przyzwyczaisz [receiver doStuff:arg], wygląda to jak dynamiczna java
toasted_flakes

6

Wybieram 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ść.


3
+1 „... rtęć zmienia świat, a tym samym czystość jest zachowana”. - Podoba mi się to z kontekstu. ;-)
Orbling

Walczę teraz z krzywą uczenia się z Merkurego. Jak dotąd była to godna walka. Bardzo to lubię.
WŁAŚNIE MOJA poprawna OPINIA,

Jedyną rzeczą, która zniechęciła mnie do rtęci było to, że jej typ łańcucha jest zakończony na NULL.
dan_waterworth

6

Z pewnością musi to być Schemat . Próba wyjaśnienia call-with-current-continuationzawsze 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!


+1 LOL + „Dla ciebie, proszę pana, wszystko!” Oprócz tego, że jest prawie wierszem piosenki w Oliver !, jest to również dobra aspiracja dla języka.
Orbling

1
Schemat nie jest jedynym językiem z wyraźnymi kontynuacjami. Na przykład Haskell obsługuje to dobrze i równie oszałamiająco.
WŁAŚNIE MOJA poprawna OPINIA,

4
W Haskell jest to prawdopodobnie bardziej nerwowe, ponieważ (call / cc) jest zaimplementowane jako biblioteka, a nie funkcja językowa. Ale może to sprawia, że ​​jest mniej nerwowy.
Logan Capaldo

Myślę, że jednocześnie jest to coraz bardziej zadziwiające. Utrzymywanie tej sprzeczności w mojej głowie pochyla mój umysł. Tak więc ostatecznie Haskell jest bardziej wymagający. :)
WŁAŚNIE MOJA poprawna OPINIA,

Fajną rzeczą w kontynuacjach Scheme (i Ruby !) Jest to , że są one wbudowane w język. Haskell po prostu dodaje swoją monadyczną składnię wokół zwykłego stylu przekazywania kontynuacji, co można również zrobić w schemacie. Ale posiadanie wbudowanego call / cc wszędzie bez konieczności osadzania całości w monadycznej konstrukcji zdecydowanie pozwala wielu konstrukcjom zadziwiającym.
Dario

4

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.


5
„Jedną z bardziej rozrywkowych gier w TECO jest wpisanie swojego nazwiska jako wiersza poleceń i próba odgadnięcia, co robi. Prawie każdy błąd w pisaniu podczas rozmowy z TECO prawdopodobnie zniszczy Twój program, a nawet gorzej… wprowadzić subtelne i tajemnicze błędy w działającym podprogramie ”. Człowieku, to były dni!
WŁAŚNIE MOJA poprawna OPINIA,

1
TECO było również oryginalną bazą EMACS. EMACS zaczął jako zbiór makr TECO!
Gabe,

@Omega: należy powiedzieć, do którego TECO się odnosisz. DEC TECO, jak dostarczany z TOPS-10, lub MIT TECO, ten napisany w MIDAS. To ostatnie TECO jest tym, w czym napisano EMACS. Jest to również sposób, w jaki EMACS został rozszerzony. Hakowałem EMACS zamiast zdawać klasy.
John Saunders

Użyłem tylko DEC TECO. I tak, były to dni (być znowu młodym) ....
Omega Centauri

1
Pamiętam, że pisałem w trybie komend Vima
ron

3

Montaż był dla mnie najbardziej „pochylający się”, ale dopiero zaczynam.


co gorsza, to zależy od systemu operacyjnego i sprzętu
Dave

Co z tego sprawia, że ​​tak jest? Proste instrukcje bez wyraźnego porządku grupowania? coś innego?
Jé Queue

cóż, w szczególności nie podoba mi się, jak niejasny jest przebieg programu. Nie jest łatwo czytać szybko.
Anto

2
Ach, Cincinnati Milacron 2200B: Zmienna długość słowa w połączeniu z modyfikacją czasu wykonywania adresu JMP. Sprawiło, że LSD wyglądało na oswojone.
Peter Rowell,

3

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.


3

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:

„Ted Neward wykonał naprawdę dobrą robotę, moderując panel„ Przyszłość języków programowania ”. Na końcu panelu Ted zapytał panelistów, których języków powinni się uczyć, aby uzyskać nowe pomysły. Lista zawierała Io (Bruce Tate), Rebol (Douglas Crockford) , Forth and Factor (Alex Payne), Scheme and Assembler (Josh Bloch) oraz Clojure (Guy Steele). ”

Źródło: sauria.com

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!)


1
Unikam REBOL, ponieważ jego jedyną praktyczną implementacją jest niestandaryzowane, nie otwarte oprogramowanie, które zmienia się pod wpływem kaprysu własnej firmy. (Rebol 2 vs. Rebol 3 ...) Jeśli kiedykolwiek zostanie znormalizowany lub otwarty, przyjrzę się jeszcze raz, ale do tego dnia Rebol pozostaje poza moim paskiem narzędzi.
PO PROSTU MOJA poprawna OPINIA,

1
@ JUSTMYcorrectOPINION być może nadszedł dzień, aby spojrzeć jeszcze raz! Rebol 3 jest teraz oprogramowaniem licencjonowanym Apache2 . Mamy nawet RebolBota tutaj w pokoju rozmów Rebol i Red na StackOverflow, aby pomóc nam w demonstracji języka. ( Red to kolejny wariant Rebol typu open source, który przedstawia bardzo interesującą obietnicę jako wersja skompilowana hybrydowo.)
HostileFork

2

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.


SQL z pewnością pochyla umysł, ale nie pomaga mi pisać lepszego kodu.
dan_waterworth

4
SQL jest dla mnie tak naturalny jak BASIC, tylko ja. Niesamowite, jak łatwa może być aplikacja oparta na DB, gdy zrozumiesz pełną obsługę danych w SQL.
Jé Queue

@dan_waterworth, myślę, że SQL może pomóc Ci napisać mniejszy i bardziej zwięzły kod, wprowadzając więcej logiki do SQL w porównaniu z obsługą większości warunkowych i kolejnych zapytań z powrotem w aplikacji.
Jé Queue

@Xepoch, myślę, że jeśli czegoś nauczył nas wzrost ORM, to ludzie nie lubią pisać w SQL, jeśli mogą tego uniknąć. Wolą pisać w swoim własnym języku.
dan_waterworth

Wydaje mi się, że używanie czegokolwiek, co potrafi pisać lepszy kod niż ty, jest dobrą rzeczą.
JeffO

2

Czysty

Pure to funkcjonalny język oparty na przepisywaniu terminów. Podoba mi się, jest trochę rzadki i wyrazisty, choć trochę zaniżony.


+1 Funkcjonalny oznacza wektor, wyjątkowo potężny język, który. Jako potomek q (który trochę zawdzięcza APL) i pożyczając tonę od Haskell i in. Z pewnością wymaga to wzmianki.
Orbling

2

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.


Raz zrobiłem trochę VHDL. Miałem prawdziwy moment objawienia, kiedy nagle zdałem sobie sprawę, że w miarę dodawania kodu, coraz więcej sprzętu wydaje się implementować ten kod i wszystko działa jednocześnie. Jak programowanie wielowątkowe z naprawdę nieograniczoną liczbą wątków jednocześnie; może ludzie z dostępem do nieograniczonej liczby węzłów w EC2 lub klastrami zmniejszającymi mapę dostaną podobny szum. (Ale wkrótce potem zrozumiałem, jaki to całkowity ból, wdrożyć w tych językach wszystko, co nie jest trywialne, i uciekłem).
dnia

1
Jako inżynier elektryk nie miałem problemu z równoczesnością, w rzeczywistości było to całkiem wyzwolenie. Jeśli chodzi o ból związany z wdrożeniem, to uP jest niszowym rozwiązaniem dla określonych klas problemów, które przekształcają problem w rozwiązanie, które można opisać jako algorytmy, koncepcja pierwotnie zaczerpnięta z matematyki. Problem związany z równoległością jest jednym z problemów łatwych do rozwiązania, a VHDL i FPGA są wtedy przydatne.

Tak, VHDL jest dziwaczny, jeśli nie jesteś programistą i nie przywykłeś do pracy z wieloma blokami jednocześnie.
medivh

1

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.


1
Zrobiłem dużo programowania Tcl około 1995-1997 bez specjalnego powodu. Kiedy zacząłem szukać nowej pracy w 1998 r., Każdy rekruter z całego Bay Area próbował mnie zmusić do rozmowy kwalifikacyjnej na temat słabo płatnych, wysokociśnieniowych koncertów VIGNETTE. Szybko usunąłem go z mojego CV. Zastanawiałem się, czy nie dać ci z tego powodu trudu, ponieważ przypomniałem sobie, że Tcl jest naprawdę łatwy, ale raczej żałuję, że nie nauczyłem się Pythona z perspektywy czasu.
Adam Crossland,

Tcl jest zdecydowanie nabytym smakiem. Osobiście uważam, że konstrukcja języka jest genialna - żaden inny język nie pasuje do mojego mózgu tak dobrze jak Tcl, ale wiem, że jestem w mniejszości. Uwielbiam to lub nienawidzę, nauka tego wymaga ponownego przemyślenia, jak powinny działać języki.
Bryan Oakley,

1

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ć.


6
Muszę sprzeciwić się twierdzeniu, że jest ona do udowodnienia lepsza. Termin przełożony sugeruje uwzględnienie kwestii subiektywnych. Ponadto, jeśli uruchomimy C na komputerze z nieskończoną pamięcią (co jest sprawiedliwe, ponieważ maszyna Turinga działa z nieskończoną pamięcią), mają one równoważną moc.
Winston Ewert

2
@Winston: Taśma maszyny Turinga nie musi być nieskończona. Na każdym końcu musi być tylko fabryka taśm, która w razie potrzeby może produkować dodatkową taśmę :)
Mike Dunlavey

„Z pewnością lepszy” jest z definicji pojęciem obiektywnym. Oznacza to, że na maszynie Turinga można zaimplementować dowolny język, ale nie każdy język może implementować maszynę Turinga. Oczywiście dotyczy to również języków takich jak C, pod warunkiem nieskończonej pamięci i nieskończonego stosu.
user12667

BrainFuck, jak wspomniano już w pytaniu, i jest to w większości język maszynowy Turinga.
Mchl

1
To pokazuje, że maszyna Turinga jest mocniejsza. Problem polega na tym, że przynajmniej tak, jak użyłbym tego terminu, twierdzenie, że język jest lepszy, uwzględniałoby również łatwość użycia, dostępność itp.
Winston Ewert

1

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.


Przepraszam. C to język asemblera. Oczywiście, że nie ma takich rzeczy.
Peter Rowell,

2
Języki asemblera są zadziwiające.
david4dev

-1

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.


Jess to nowoczesna wersja CLIPS, którą można również osadzić jako rodzaj silnika skryptowego / logicznego dla własnych aplikacji.
Tangurena

Ok, poprawiam się. haskel.com/corp/details/0,10294,CLI1_DIV139_ETI9759,00.html Niemniej jednak wymaga zupełnie innego sposobu myślenia niż język, w którym jest osadzony.
Berin Loritsch


-1

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 .


2
czy też bajtecode?
Jé Queue

Jeśli masz na myśli kod bajtowy Java, to nie mam z nim żadnego doświadczenia, więc nie jestem w stanie polecić go jako zadziwiającego.
sick

Naprawdę nie porównywałbym kodu Java-Bytecode i CIL, ponieważ kod Java-Bytecode jest już skompilowany, a CIL zostanie skompilowany w czasie wykonywania (kompilator Just-In-Time z .net)
basti

@chiffre W większości przypadków Java Bytecode i CIL działają dokładnie tak samo. W obu przypadkach masz kod źródłowy (C # lub Java), który jest kompilowany do binarnego języka pośredniczącego w „czasie kompilacji” (CIL lub Java Bytecode), który następnie jest kompilowany do rzeczywistego kodu maszynowego w „środowisku wykonawczym” przez JIT kompilator.
sick
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.