mboost-dp1

The State of Developer Ecosystem 2021


Gå til bund
Gravatar #51 - arne_v
13. aug. 2021 12:31
iCBM (49) skrev:
#12

jeg har ikke leget ret meget med python men hvorfor skulle det erstatte perl? er det pga den "specielle" (nogle ville kalde det en svært læselige) syntax i perl?


Samme type sprog.

Script.

Løst type system.

Meget funktionalitet med meget få linier.
Gravatar #52 - iCBM
13. aug. 2021 15:25
arne_v (51) skrev:
iCBM (49) skrev:
#12

jeg har ikke leget ret meget med python men hvorfor skulle det erstatte perl? er det pga den "specielle" (nogle ville kalde det en svært læselige) syntax i perl?


Samme type sprog.

Script.

Løst type system.

Meget funktionalitet med meget få linier.

jeg kan forsikre dig for at jeg kan også lave megen funktionalitet med få linier ved at bruge perl - men det bliver ikke kønt
Gravatar #53 - larsp
13. aug. 2021 15:39
arne_v (51) skrev:
Løst type system.

Både Python og js (med ts) har mulighed for at stramme typerne op med deklarationer og annotations.

Det er interessant hvordan de strenge sprog løser lidt op (f.eks. auto i C++) og de løse sprog giver mulighed for at stramme op. Mødes man mon på midten med et universelt sprog der kan både det dynamiske og high performance? Jeg tvivler.
Gravatar #54 - Claus Jørgensen
13. aug. 2021 16:44
#53

'auto' betyder altså bare at du ikke skal skrive det samme to gange på samme linje. At det først kom ind i C++ efter 30-40 år er til grin.

Gravatar #55 - arne_v
13. aug. 2021 17:10
iCBM (52) skrev:

jeg kan forsikre dig for at jeg kan også lave megen funktionalitet med få linier ved at bruge perl - men det bliver ikke kønt


Netop. Python og Perl kan begge lave meget funktionalitet med få linier sammenlignet med tradtionelle soversatte sprog med stærkt type check.
Gravatar #56 - arne_v
13. aug. 2021 17:13
larsp (53) skrev:

Det er interessant hvordan de strenge sprog løser lidt op (f.eks. auto i C++)


C++ auto er type inferens ikke dynamic typing. Type inferens er ikke mindre type sikker.

Decideret dynamic typing i traditionelle oversatte sprog kan jeg kun komme i tanke om dynamic i C#.

Og det bruges ikke meget. Det er smart til COM og IDispatch, men det er vel stort set det.


Gravatar #57 - arne_v
13. aug. 2021 17:19
Claus Jørgensen (54) skrev:
#53

'auto' betyder altså bare at du ikke skal skrive det samme to gange på samme linje. At det først kom ind i C++ efter 30-40 år er til grin.


Både Java og C# fik det også først senere i deres historie.

C# 3.0 / .NET 3.5 (2008)

C++ 11 (2011)

Java 10 (2018)
Gravatar #58 - larsp
14. aug. 2021 10:45
C++ auto er type inferens ikke dynamic typing

Jep, der er ikke noget dynamisk ved auto, men på overfladen ligner det lidt. Ja, måske ikke det bedste eksempel.

Typescript giver faktisk hele spektret af muligheder. Fra any hvor der er fuldstændig frit spil, til fuldt specificerede typer og halvvejs dynamisk hvor en variabel kan være en af flere typer. Det er lidt genialt. Man kan f.eks. vælge om en variabel skal være nullable eller ej med det system.
Gravatar #59 - arne_v
14. aug. 2021 12:43
#58

At kunne angive nullable eller ej er almindeligt idag: Scala, Kotlin, C# 8.0+ etc..
Gravatar #60 - Claus Jørgensen
14. aug. 2021 13:11
#59

Swift har haft det indbygget fra dag 1. Og det gør faktisk en enorm forskel, koden er mere solid og *føles* mere solid.
Gravatar #61 - larsp
14. aug. 2021 13:18
#58 #59 Min pointe er at det er en elegant måde at definere nullable. De andre sprog bruger mig bekendt specifikke annotations. Typescript har bare null med i type union eller ej.
Gravatar #62 - Claus Jørgensen
14. aug. 2021 13:32
#61

Jeg synes Swift er mere elegant.

Typescript: `string | null`
Swift: `String?` (som teknisk set er shorthand for Optional<String>)

(Begge sprog bruger ? til optional chaining)
Gravatar #63 - arne_v
14. aug. 2021 16:42
Claus Jørgensen (60) skrev:
#59

Swift har haft det indbygget fra dag 1. Og det gør faktisk en enorm forskel, koden er mere solid og *føles* mere solid.


Ja.

Hoare ville kun have lavet en 250 M$ fejl hvis det havde været designet fra start.

:-)

(for dem som ikke kender historien så er null referencer opfundet af Tony Hoare til Algol W og han har siden udtalt at det var en 1 B$ fejl - han er iøvrigt mest kendt for at have opfundet quicksort)

Gravatar #64 - arne_v
14. aug. 2021 16:46
#61 og #62

Kotlin, Scala og C# bruger alle xxx for non-nullable og xxx? for nullable.

Det er vist blevet de facto standard.

Ikke overraskende at Swift også har valgt det.
Gravatar #65 - arne_v
14. aug. 2021 22:34
#64

Og hvis nogen undrer sig over hvordan C# 8 (2019) som introducerede nonnullable reference types kan påvirke syntaxen for Swift (2014) så er pointen at C# fik syntaxen for value types i C# 2 (2005).
Gravatar #66 - Claus Jørgensen
15. aug. 2021 00:53
#64, #65

C# fik dog først null-conditional operator med C# 6.0, som kom ud samme år som Swift (cirka. en månede efter Swift 1.0).

Der er også den forskel at i Swift er du garenteret at værdien ikke er null hvis den ikke er annoteret med ?. Modsat i C# hvor det (indtil C# 8.0) stadigvæk kunne være enten eller - https://docs.microsoft.com/en-us/dotnet/csharp/lan...


func foo() -> String? { return nil } // legal
func bar() -> String { return nil } // compiler error


C# 8.0 nullable er tættere på nullable i ObjC, https://developer.apple.com/documentation/swift/ob... vs. https://docs.microsoft.com/en-us/dotnet/csharp/nul...

(som kom til for at have compat mellem Swift og ObjC)
Gravatar #67 - Claus Jørgensen
15. aug. 2021 01:07
#65

Og man må vel sige at nullable syntax i C# ikke ligefrem har været en success. Fordi det kun var for value types, så var det ikke en feature der var meget brugt.

C# 8 er dog klart et skridt i den rigtige retning.

Der er ikke rigtig nogen undskyldning for at man ikke ved om ens variable er null eller ej i 2021, og compilere er hurtige og smarte nok til at man kan fjerne alt det overflødige if null throw nullptrexception kode.

Gravatar #68 - larsp
15. aug. 2021 08:57
arne_v (63) skrev:
(for dem som ikke kender historien så er null referencer opfundet af Tony Hoare til Algol W og han har siden udtalt at det var en 1 B$ fejl - han er iøvrigt mest kendt for at have opfundet quicksort)

Memory referencer i maskinekode og pointere i C har vel altid kunnet være 0.

Det er et meget normalt pattern i C at teste om en pointer er NULL og initialisere ressourcen i såfald, hvilket virker fordi statiske variable er garanteret 0 fra programstart.
Gravatar #69 - arne_v
15. aug. 2021 14:24
larsp (68) skrev:
arne_v (63) skrev:
(for dem som ikke kender historien så er null referencer opfundet af Tony Hoare til Algol W og han har siden udtalt at det var en 1 B$ fejl - han er iøvrigt mest kendt for at have opfundet quicksort)

Memory referencer i maskinekode og pointere i C har vel altid kunnet være 0.


En adresse i assembler har altid kunnet være 0 eller en anden magisk værdi.

ALGOL W er fra 1966 så den er ældre end Pascal og C.

larsp (68) skrev:

Det er et meget normalt pattern i C at teste om en pointer er NULL og initialisere ressourcen i såfald, hvilket virker fordi statiske variable er garanteret 0 fra programstart.


Ja.

Et af de få tilfælde hvor C faktisk er veldefineret.

Fortran har ikke sådan en regel. Compileren kan selv vælge default for ikke eksplicit initialiserede statiske variable. Mange Fortran compilere vælger nul men ikke alle.

Gravatar #70 - arne_v
15. aug. 2021 15:37
#69

Algol W blev lavet sammen med Niklaus Wirth som fortsatte med at opfinde Pascal, Modula og Oberon.
Gravatar #71 - arne_v
15. aug. 2021 23:14
#70

Modula-2 er efter min mening det bedste rent procedurale sprog der er lavet.
Gravatar #72 - larsp
18. aug. 2021 13:44
#69 C er ret effektivt skruet sammen. .data segmentet har statiske variable med en defineret start værdi og .bss har de udefinerede der skal sættes til nul. Loaderen kan dermed med én memcpy initialisere .data og én memset til 0 initialisere .bss. Den slags hjælper i ressourcebegrænsede embeddede systemer.

#69 Re. Fortran. Hvor meget bliver Fortran dog brugt i dag. Det forbavser mig at man stadig i dag hører om fortran compilere. Er der en reel begrundelse for at vælge Fortran i dag eller er det et spørgsmål om at køre legacy kode?

#70 Hvad gør Modula-2 til det bedste?
Gravatar #73 - arne_v
18. aug. 2021 14:14
larsp (72) skrev:

#69 Re. Fortran. Hvor meget bliver Fortran dog brugt i dag. Det forbavser mig at man stadig i dag hører om fortran compilere. Er der en reel begrundelse for at vælge Fortran i dag eller er det et spørgsmål om at køre legacy kode?


Mine erfaring med at flytte Fortran fra VMS hvor uinitialiserede statiske variable var 0 til NOS/VE hvor uinitialiserede statiske variable ikke var 0 er tilbage fra slut-80'erne.

Dengang var Fortran et stort sprog.

Idag er Fortran et niche sprog.

Det bruges stadig en del i videnskabelig talknuseri (matrix regning) men det er vist det.

Gravatar #74 - arne_v
18. aug. 2021 14:18
larsp (72) skrev:

#70 Hvad gør Modula-2 til det bedste?


De rigtige data strukturer, de rigtige kontrol strukturer, de rigtige IO rutiner, den rigtige måde at importere/eksportere mellem moduler.

Pascal var glimrende til undervisning i programmering, men havde nogle mangler til rigtig brug.

Wirth fixede Pascal og resultatet var Modula-2.
Gravatar #75 - arne_v
24. aug. 2021 01:55
#72 og #74

Du gør i embedded ikke?

Idag er embedded vel C, C++ og Rust.

Men for 30 år siden var embedded C, Ada og Modula-2.

:-)
Gravatar #76 - larsp
24. aug. 2021 04:57
#75 Ja, jeg skrev kode til et utal af embeddede systemer i mit første job. Har programmeret Microchip PIC (den værste arkitektur af dem alle, C compileren havde store problemer og ofte bugs), Motorola/freescale 68HCS12, diverse Atmel AVR og XMega, et par RF MCUer med Intel 8051 instruktionsset (også noget skrammel, stakken gemte vist kun returaddresser så C compileren måtte bruge andre teknikker til variable fra stak) og TI MSP430.

Alt dette var i C og et projekt i assembler. Men Ada og Modula-2 er jeg aldrig stødt på :)
Gravatar #77 - arne_v
27. aug. 2021 15:33
#76

C og assembler antyder at minimering af CPU og memory forbrug har været prioritet.

Ada og Modula-2 er mere når ingen fejl er prioritet.
Gravatar #78 - arne_v
27. aug. 2021 15:34
#76

Men hvis du vil prøve Modula-2, så har jeg lige lavet et lille skriv:

https://www.vajhoej.dk/arne/articles/m2.html
Gravatar #79 - arne_v
27. aug. 2021 18:34
De har også kigget lidt på Rust brug.

https://thenewstack.io/fewer-rust-developers-targe...

Linux 80%
Windows 38%
macOS 36%
WebAssembly (browser) 21%
Embedded 12%
Gravatar #80 - arne_v
1. sep. 2021 00:32
arne_v (78) skrev:
#76

Men hvis du vil prøve Modula-2, så har jeg lige lavet et lille skriv:


Er der nogen som har prøvet Modula-2?

:-)

Gravatar #81 - larsp
2. sep. 2021 06:06
Jeg prøvede at køre nogle af dine eksempler fra #78 på min Ubuntu. Det virkede selvfølgelig out of the box.

Jeg bemærkede at KDEs Kate editor lavede korrekt syntax highlight ud fra .mod filnavnet, out-of-the-box.

Vscode var ikke særlig hjælpsom. Ingen highlight og ingen anbefalede plugins for filtypen. Jeg installerede så "Modula-2" extension (v0.0.1 og 700 downloads...) og der kom lidt farver på, men ingen intellisense.

Python har præcis samme "import X" og "from X import Y koncept" med samme syntax. Algol og Modula 3 er da også listed under influenced by for Python på Wikipedia.

Kan man deklarere forskellige størrelse integers i Modula præcist, f.eks. 8, 16, 32 og 64 bit signed hhv. unsigned?

Hvad med Modula-3?
Gravatar #82 - arne_v
2. sep. 2021 13:23
larsp (81) skrev:

Jeg prøvede at køre nogle af dine eksempler fra #78 på min Ubuntu. Det virkede selvfølgelig out of the box.


Ja - jeg havde naturligvis testet.

larsp (81) skrev:

Jeg bemærkede at KDEs Kate editor lavede korrekt syntax highlight ud fra .mod filnavnet, out-of-the-box.


En eller anden har tænkt på Modula-2 engang.

larsp (81) skrev:

Vscode var ikke særlig hjælpsom. Ingen highlight og ingen anbefalede plugins for filtypen. Jeg installerede så "Modula-2" extension (v0.0.1 og 700 downloads...) og der kom lidt farver på, men ingen intellisense.


VSCode er nyere end Kate så dårligere support for gamle sprog.

larsp (81) skrev:

Python har præcis samme "import X" og "from X import Y koncept" med samme syntax. Algol og Modula 3 er da også listed under influenced by for Python på Wikipedia.


Alle låner fra alle.

larsp (81) skrev:

Kan man deklarere forskellige størrelse integers i Modula præcist, f.eks. 8, 16, 32 og 64 bit signed hhv. unsigned?


Hvis du laver high level programmering, så bør du bruge subranges.

VAR
s : [-32768..32767];
u : [0..65535];

eller måske snarere nogle mere domain specifikke:

VAR
s : [-1000...1000];
u : [0..1000];

Men laver du low level programmering så:

FROM SYSTEM IMPORT INTEGER16, CARDINAL16;

VAR
s : INTEGER16;
u : CARDINAL16;

NB: Der sidste er en GNU Modula-2 extension til ISO standarden, men mange Modula-2 dialekter har tilsvarende.

larsp (81) skrev:

Hvad med Modula-3?


Det er et andet sprog.
Gravatar #83 - arne_v
2. sep. 2021 14:11
#82

Faldt iøvrigt over en anden måde at lave C interface på som jeg lige skal have checket.
Gravatar #84 - arne_v
2. sep. 2021 17:20
arne_v (83) skrev:
#82

Faldt iøvrigt over en anden måde at lave C interface på som jeg lige skal have checket.


Ja - det kan gøres smartere.

DEFINITION MODULE FOR "C" ...

Og så lige et assembler eksempel også.

Artikel opdateret.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login