Czy są jakieś statycznie pisane języki skryptowe? [Zamknięte]

12

Wydaje się, że istnieją dwa główne sposoby skonfigurowania zaplecza serwera WWW. Możesz użyć stosu LAMP z kodem po stronie serwera w czymś takim jak PHP lub Python (lub Ruby lub JavaScript, które nie zaczynają się na P.) Te języki skryptowe są zazwyczaj dynamicznie pisane, ze wszystkimi wadami w wydajność, poprawność i łatwość obsługi, które zapewniają dynamicznie pisane języki, ale serwer można łatwo zaktualizować, ponieważ cała logika generowania strony jest przechowywana w zewnętrznych skryptach.

Innym szeroko stosowanym stylem architektury jest ASP.NET, w którym logika generowania stron jest zapisana w skompilowanym kodzie. Zwykle używa się języków o typie statycznym, więc otrzymujesz kod korzystający z kompilatora, ale cała logika generowania strony jest wkompilowana w serwer, co oznacza, że ​​jeśli musisz coś zmienić, musisz zdjąć serwer i zastąp go nową wersją.

To mnie zastanawia. Czy istnieją jakieś języki skryptowe po stronie serwera, które używają pisania statycznego, dla najlepszego z obu światów?

Mason Wheeler
źródło
2
Czy myślałeś o użyciu Go ?
pswg
10
TypeScript ?
Oded
4
„wszystkie wady wydajności, poprawności i łatwości konserwacji, jakie przynoszą dynamicznie pisane języki”. Twierdzenia te są w najlepszym razie dyskusyjne, aw najgorszym błędne (obecnie najszybsze zespoły JIT są dla języków dynamicznie typowanych).
Javier
2
„Logika generowania strony jest wkompilowana w serwer, co oznacza, że ​​jeśli musisz coś zmienić, musisz zdjąć serwer i zastąpić go nową wersją”. Istnieje kilka środowisk serwerowych, które mogą przekazać nowy plik binarny bez przerywania usługi. to znaczy. Pełen wdzięku przeładunek uWSGI
Javier
1
W JVM istnieje kilka frameworków, które pozwalają na rekompilację i hot swap w locie.
back2dos

Odpowiedzi:

8

AKTUALIZACJA: Bardziej aktualne rozwiązania obejmują AtScript

Powinieneś wypróbować Google Dart .

Ma opcjonalne pisanie, co oznacza, że ​​możesz dodawać adnotacje typu, które będą sprawdzane w trybie sprawdzania, czyli w trybie deweloperskim, w czasie wykonywania, ale nie są one wymagane, a język zapewnia wiele zalet innych dynamicznych języków, takich jak python. Jednak edytor wnioskuje o typie, aby pomóc Ci znaleźć błędy z wyprzedzeniem. Wirtualna rzutka jest szybka i może tworzyć migawki, które mogą przyspieszyć uruchomienie nawet 10-krotnie. Kompiluje się również w javascript i jest szybki .

Główną wadą jest to, że jest to nieco nowa technologia, więc nie ma tylu bibliotek, a szczerze mówiąc, interoperacyjność z javascript nie jest tak prosta, jak powinna. Ponadto język jest wciąż rozwijany, więc od czasu do czasu zmieniają się zmiany.

Daniel Rodriguez
źródło
Wolałbym polecić TypeScript. Jak rzutka, ale jest kompatybilny z JavaScript.
Knerd
4

Twoje pytanie opiera się na kilku błędnych założeniach.

Python, Ruby są kompilowane do kodu bajtowego przed wykonaniem. Proces jest automatyczny, ale zmiany aplikacji wymagają pełnego ponownego uruchomienia. Node.JS zachowuje się w ten sam sposób, ale kompiluje się do kodu maszynowego.

Kod ASP.NET można wstępnie skompilować i skopiować na serwer lub dynamicznie skompilować na żądanie z kodu źródłowego na serwerze. Usługi IIS obsługują obie formy aktualizacji bez zerowego czasu przestoju (pierwsze żądania po aktualizacji będą wolne). Zerowe aktualizacje przestojów są możliwe w Pythonie i Ruby, ale przy tak wielu opcjach wdrażania nie należy brać za pewnik.

Na tej podstawie sądzę, że byłbyś zadowolony z dowolnego języka .NET.

mikerobi
źródło
3
Język skryptowy to taki, w którym możesz zapisać niektóre jego fragmenty w pliku i uruchomić go. Nie ma powodu, dla którego nie powinien być wpisywany statycznie.
Florian Margaine
@FlorianMargaine Więc C to język skryptowy?
@delnan c ++ też.
mikerobi
@mikerobi Właściwie „mój” to także C ++ (i AFAIK, następca CINT), właśnie to spieprzyłem.
2
@mikerobi Jeśli eksplorujesz Picoc, zauważysz, że cały punkt, w którym został napisany, to język skryptowy. To nie tylko interpreter dla c, to interpreter na tyle mały, że można go osadzić w większych aplikacjach i urządzeniach i dać użytkownikom możliwość pisania małych skryptów w c. Niektóre języki mogą być lepsze w skryptowaniu niż inne, ale język nie jest zły w skryptowaniu tylko dlatego, że nie był do niego używany (jeszcze). Ostatecznie język to tylko składnia i semantyka, implementacje mogą się bardzo różnić.
yannis
0

Nie ma powodu, aby skompilowany język był silnie pisany lub trudny do aktualizacji.

Możesz przyjrzeć się niektórym ustawieniom sieci erlang, takim jak Cowboy, Webmachine i azot. Dzięki Dialyzer możesz uzyskać bardzo ładne sprawdzanie poprawności typu i możesz ponownie ładować moduły w czasie rzeczywistym, ponieważ Erlang został zaprojektowany tak, aby móc aktualizować oprogramowanie bez przerywania pracy istniejących użytkowników.

Ponadto webmachine (ten, z którego najczęściej korzystałem) może być dość szybki. Widziałem, że webmachine ma średnie odpowiedzi na punkty końcowe API mniejsze niż 10 ms w małym węźle Amazon EC2!

Jeśli chcesz pisać statycznie, wypróbuj framewor Yesod dla języka Haskell. Haskell jest silnie napisany za pomocą bardzo bogatego systemu pisma.

Nie używałem go osobiście, ale ludzie, którzy go używają, uwielbiają to.

Zachary K.
źródło
3
Nie należy mylić mocnego i statycznego pisania. Haskell ma silne typy statyczne, Python ma silne typy dynamiczne.
mikerobi 16.04.13
0

IMHO, najlepszym statycznie wpisane jest językiem skryptowym Web D .

Podobnie jak interpretowane języki skryptowe, potrafi kompilować skrypty w locie i błyskawicznie.

Sam język przypomina silnie napisany JavaScript o dużej mocy, o wiele potężniejszy niż Go.

Wszystkie elementy współbieżności są ukryte, podobnie jak w PHP, a szablony są kompilowane w natywnym kodzie.

Trudno znaleźć coś lepszego ...

Rico Decho
źródło