mboost-dp1
The State of Developer Ecosystem 2021
- Forside
- ⟨
- Forum
- ⟨
- Tagwall
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
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.
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.
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.
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)
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.
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)
#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...
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)
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)
#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.
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.
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.
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.
#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?
#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?
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.
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.
#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å :)
Alt dette var i C og et projekt i assembler. Men Ada og Modula-2 er jeg aldrig stødt på :)
#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
Men hvis du vil prøve Modula-2, så har jeg lige lavet et lille skriv:
https://www.vajhoej.dk/arne/articles/m2.html
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%
https://thenewstack.io/fewer-rust-developers-targe...
Linux 80%
Windows 38%
macOS 36%
WebAssembly (browser) 21%
Embedded 12%
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?
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?
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.
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.