Kissaki

joined 2 years ago
MODERATOR OF
[–] Kissaki@programming.dev 1 points 1 month ago (1 children)

What I wrote. I wouldn't want to do AI Thursday and kinda malicious compliance for a prolonged time.

[–] Kissaki@programming.dev 1 points 1 month ago

I see, thank you for the clarification. I was quite confused because it seemed to be missing, this one didn’t quite seem correct. If they never even pushed it as a MR then that makes more sense. Then the whole “hasn’t been merged yet” is missing that it hasn’t even been created.

[–] Kissaki@programming.dev 1 points 1 month ago

I see, thank you for the clarification. I was quite confused because it seemed to be missing, this one didn't quite seem correct. If they never even pushed it as a MR then that makes more sense. Then the whole "hasn't been merged yet" is missing that it hasn't even been created.

[–] Kissaki@programming.dev 1 points 1 month ago (2 children)

An indentation change is a definition code change. And as I pointed out, it's a py file, and Python is an indent-significant language.

[–] Kissaki@programming.dev 4 points 1 month ago (1 children)

So you're using [] as an alternative function call syntax to (), usable with nullable parameters?

What's the alternative? let x = n is null ? null : math.sqrt(n);?

In principle, I like the idea. I wonder whether something with a question mark would make more sense, because I'm used to alternative null handling with question marks (C#, ??, ?.ToString(), etc). And I would want to see it in practice before coming to an early conclusion on whether to establish as a project principle or not.

math.sqrt?() may imply the function itself may be null. (? ) for math.sqrt(?n)? 🤔

I find [] problematic because it's an index accessor. So it may be ambiguous between prop or field indexed access and method optional param calls. Dunno how that is in Dart specifically.

[–] Kissaki@programming.dev 33 points 1 month ago (9 children)

The issue, presumably the PR (linked at the top of the issue because of reference).

Look at the code change. It gets inputs and loops over them and seems to do an in-place fixup. But the code indent is wrong, and it even changed the function definition of the unrelated next function. In Python, the indent-logic-significance language.

I assume they briefly showed the code on stage. Even then it should have been obvious to any developer. py file, messy indent, changes unrelated function.

Please correct me if this is the wrong PR.

[–] Kissaki@programming.dev 3 points 1 month ago* (last edited 1 month ago) (3 children)

I would make Thursday AI day and do everything with AI. And Friday is recovery day, where I discard everything that didn't work, and do what I want, to recover motivation for long-term sustainability.

I wonder if and when they would notice a productivity difference. I certainly couldn't and wouldn't be able to do that indefinitely.

[–] Kissaki@programming.dev 3 points 1 month ago

Makes me think used tokens, which is very easy to fake.

If I were in a malicious environment, I'd be interested in gaming the system, excessively producing AI code even if I never use it.

[–] Kissaki@programming.dev 15 points 1 month ago* (last edited 1 month ago) (1 children)

We have found no evidence of malicious actors abusing this vector"

"We see no evidence of that which we do not monitor."

These press releases/responses seem to never include "we track x and y and see no evidence". Or "we would be able to identify them but do not see evidence". I can only assume the worst.

[–] Kissaki@programming.dev 12 points 1 month ago

I understand the need for full detailed reasoning, but that legalese document is not approachable or accessible.

I wish they had at least given a plain language summary of the changes they intend to make. For full reasoning you could still refer to the whole document.

I guess I'll trust the EFF in their interpretation.


Numerous invalid patents have been granted in the past, and had to be challenged to be corrected.
These suggested changes are horrendous for a just or sustainable patent system.
There may be opportunities for change or efficiency gains, but blocking and evading challenges in various ways is not a good approach. It excessively favors patent trolls which act maliciously and damaging to other companies, the economy and society at large.

[–] Kissaki@programming.dev 2 points 1 month ago (1 children)

I can't say I've made such a jump because I wasn't in such a (prolonged) situation.

My suggestions would be

Are you employed? Can you change projects/teams/work/customers within your company? If not, look for other opportunities. If that's all you get at your current workplace, and you want change, switch to somewhere else.

You have success stories of delivering. Even if tech and experience doesn't fully fit with other employers, they will value the experience you have.

Studying, possibly alongside work, is also possible, and not uncommon. That way you could widen your technical expertise without having a new employer already, possibly opening other opportunities.

[–] Kissaki@programming.dev 1 points 1 month ago* (last edited 1 month ago)

Blender 5.0 Release Page

Page headline: “Hi Five” 🤭

 

Explores how the Lean programming language handles 2 + 2 = 4, which other programming languages collapse into a bool, but Lean considers a Proposition, and requires Proof.

How does provably correct programming look? This article seems to give a good introduction and example.

 

Explores how the Lean programming language handles 2 + 2 = 4, which other programming languages collapse into a bool, but Lean considers a Proposition, and requires Proof.

How does provably correct programming look? This article seems to give a good introduction and example.

 

Pike is a dynamic programming language with a syntax similar to Java and C. It is simple to learn, does not require long compilation passes and has powerful built-in data types allowing simple and really fast data manipulation.

int getDex()
{
  int oldDex = Dex;
  Dex = 0;
  return oldDex;
}

private void
show_user(int|string id, void|string full_name)
{
  write("Id: " + id + "\n");
  if (full_name)
    write("Full name: " + full_name + "\n");
}
 

The Go 1.18 release introduced generics and with that a number of new features, including type parameters, type constraints, and new concepts such as type sets. It also introduced the notion of a core type. While the former provide concrete new functionality, a core type is an abstract construct that was introduced for expediency and to simplify dealing with generic operands (operands whose types are type parameters). In the Go compiler, code that in the past relied on the underlying type of an operand, now instead had to call a function computing the operand’s core type. In the language spec, in many places we just needed to replace “underlying type” with “core type”. What’s not to like?

Quite a few things, as it turns out! To understand how we got here, it’s useful to briefly revisit how type parameters and type constraints work.

For the Go 1.25 release (August 2025) we decided to remove the notion of core types from the language spec in favor of explicit (and equivalent!) prose where needed. This has multiple benefits: …

 

However, there are some important features that WinSock just doesn’t expose. […]

Rust’s current async ecosystem is built atop a particularly cursed concept. It’s an unstable, undocumented Windows feature. It’s the lynchpin of not only the Rust ecosystem, but the JavaScript one as well. It’s controversial. It’s efficient. […] Without it, it’s unlikely that the async ecosystem would exist in its current form. It’s called \Device\Afd, and I’m tired of no one talking about it.

 

However, there are some important features that WinSock just doesn’t expose. […]

Rust’s current async ecosystem is built atop a particularly cursed concept. It’s an unstable, undocumented Windows feature. It’s the lynchpin of not only the Rust ecosystem, but the JavaScript one as well. It’s controversial. It’s efficient. […] Without it, it’s unlikely that the async ecosystem would exist in its current form. It’s called \Device\Afd, and I’m tired of no one talking about it.

 

However, there are some important features that WinSock just doesn’t expose. […]

Rust’s current async ecosystem is built atop a particularly cursed concept. It’s an unstable, undocumented Windows feature. It’s the lynchpin of not only the Rust ecosystem, but the JavaScript one as well. It’s controversial. It’s efficient. […] Without it, it’s unlikely that the async ecosystem would exist in its current form. It’s called \Device\Afd, and I’m tired of no one talking about it.

 

Seed7 is a general purpose programming language designed by Thomas Mertes. It is a higher level language compared to Ada, C/C++ and Java. The Seed7 interpreter and the example programs are open-source software. There is also an open-source Seed7 compiler. The compiler translates Seed7 programs to C programs which are subsequently compiled to machine code.

In Seed7 new statements and operators can be declared easily. Functions with type results and type parameters are more elegant than a template or generics concept. Object orientation is used where it brings advantages and not in places where other solutions are more obvious. Seed7 contains several concepts from Pascal, Ada, C, C++ and Java.


The author posted on Reddit; quoting in part:

Seed7 is based on ideas from my diploma and doctoral theses about an extensible programming language (1984 and 1986). In 1989 development began on an interpreter and in 2005 the project was released as open source. Since then it is improved on a regular basis.

Seed7 is about readability, portability, performance and memory safety. There is an automatic memory management, but there is no garbage collection process, that interrupts normal processing. The templates and generics of Seed7 don't need special syntax. They are just normal functions, which are executed at compile-time.

Seed7 is an extensible programming language. The syntax and semantics of statements (and abstract data types, etc.) is defined in libraries. The whole language is defined in the library "seed7_05.s7i". You can extend the language syntactically and semantically (introduce new loops, etc.). In other languages the syntax and semantics of the language is hard-coded in the compiler.

Seed7 checks for integer overflow. You either get the correct result or an OVERFLOW_ERROR is raised. Unlike many JVM based languages Seed7 compiles to machine code ahead of time (GRAAL works ahead of time but it struggles with reflection). Unlike many systems languages (except Rust) Seed7 is a memory safe language.

Some programs written in Seed7 are:

  • make7: a make utility.
  • bas7: a BASIC interpreter.
  • pv7: a Picture Viewer for BMP, GIF, ICO, JPEG, PBM, PGM, PNG, PPM and TIFF files.
  • tar7: a tar archiving utility.
  • ftp7: an FTP Internet file transfer program.
  • comanche: a simple web server for static HTML pages and CGI programs.

Code Example

# Print a Fahrenheit-Celsius table with floating point numbers.

$ include "seed7_05.s7i";  # This must be included first.
  include "float.s7i";     # Subsequent includes do not need a $.

const proc: main is func
  local
    const integer: lower is 0;
    const integer: upper is 300;
    const integer: increment is 20;
    var integer: fahr is 0;
    var float: celsius is 0.0;
  begin
    for fahr range lower to upper step increment do
      celsius := float(5 * (fahr - 32)) / 9.0;
      writeln(fahr lpad 3 <& " " <& celsius digits 2 lpad 6);
    end for;
  end func;
 

Lean is a theorem prover and programming language that enables correct, maintainable, and formally verified code

/-- A prime is a number larger than 1 with no trivial divisors -/
def IsPrime (n : Nat) := 1 < n ∧ ∀ k, 1 < k → k < n → ¬ k ∣ n
-- 'Grind' efficiently manages complex pattern matching and
-- case analysis beyond standard tactics.
example (x : Nat) : 0 < match x with
  | 0   => 1
  | n+1 => x + n := by
  grind
-- Automatically solves systems of linear inequalities.
example (x y : Int) :
    27 ≤ 11*x + 13*y → 11*x + 13*y ≤ 45
    → -10 ≤ 7*x - 9*y → 7*x - 9*y > 4 := by
  grind

Does anyone have experience with Lean? Can it be useful for implementing algorithms or logic beyond mathematical proofs, for software libs?

12
submitted 5 months ago* (last edited 5 months ago) by Kissaki@programming.dev to c/programming_languages@programming.dev
 

Hare’s boringness is a feature, not a bug. Our goal is not to make programming exciting again, but to make it easy to write simple, obvious programs which are optimized for reliability and longevity. An exciting programming language cannot meet that goal as effectively as Hare does. We have instead sought out the smallest and simplest language design which accommodates these goals. Because we have relatively few features, Hare programs tend to converge upon the single obvious way of solving their problems with the tools at their disposal.

 

Examples from the README

example 1

[
  { "let": { "name": "JSON", "times": 3 } },
  {
    "for": {
      "var": "i",
      "from": 1,
      "to": "times",
      "do": [
        { "print": { "add": ["Hello ", "name"] } }
      ]
    }
  }
]

example 2

[
  { "import": "system.jpl" },
  { "print": { "call": { "now": [] } } },
  { "print": { "call": { "osName": [] } } },
  { "print": { "call": { "cpuCount": [] } } },
  { "let": { "a": 9, "b": 4, "name": "JPL" } },
  { "print": { "add": ["\"a + b = \"", { "add": ["a", "b"] }] } },
  { "print": { "mul": ["a", "b"] } },
  { "print": { "div": ["a", "b"] } },
  { "print": { "mod": ["a", "b"] } },
  { "print": { "&": [6, 3] } },
  { "print": { "||": [false, true] } },
  { "print": { "gt": ["a", "b"] } },
  { "def": { "sq": { "params": ["x"], "body": [{ "return": { "mul": ["x", "x"] } }] } } },
  { "print": { "call": { "sq": [5] } } },
  { "def": { "greet": { "params": ["who"], "body": [{ "return": { "add": ["\"Hi, \"", "who"] } }] } } },
  { "print": { "call": { "greet": ["\"JSON Fan\""] } } },
  { "if": { "cond": { "<": ["b", "a"] }, "then": { "print": "\"b < a 👍\"" }, "else": { "print": "\"b >= a 🤔\"" } } },
  { "for": { "var": "i", "from": 1, "to": 3, "step": 1, "do": [ { "print": { "call": { "sq": ["i"] } } } ] } },
  { "print": "\"All features in one! 🎉\"" }
]

example 3

[
// 🚀 Welcome to JPL — JSON Programming Language!

// Import system utilities for fun stuff
{ "import": "system.jpl" },

// Print system info
{ "print": { "call": { "now": [] } } },
{ "print": { "call": { "osName": [] } } },
{ "print": { "call": { "cpuCount": [] } } },

// Define a math function to square a number
{
  "def": {
    "square": {
      "params": ["x"],
      "body": [
        { "return": { "mul": ["x", "x"] } }
      ]
    }
  }
},

// Greet a user
{
  "def": {
    "greet": {
      "params": ["name"],
      "body": [
        { "return": { "add": ["Hello, ", "name"] } }
      ]
    }
  }
},

// Declare variables
{ "let": { "a": 7, "user": "Kapil" } },

// Use greet function and print
{ "print": { "call": { "greet": ["user"] } } },

// Conditional message
{
  "if": {
    "cond": { ">": ["a", 5] },
    "then": { "print": "a is greater than 5" },
    "else": { "print": "a is 5 or less" }
  }
},

// Loop with break and continue
{
  "for": {
    "var": "i",
    "from": 1,
    "to": 10,
    "step": 1,
    "do": [
      { "if": { "cond": { "eq": ["i", 3] }, "then": { "continue": true } } },
      { "if": { "cond": { "gt": ["i", 7] }, "then": { "break": true } } },
      { "print": { "call": { "square": ["i"] } } }
    ]
  }
},

// Fun ending message
{ "print": "🎉 Done with curly braces and JSON fun!" }
]

view more: ‹ prev next ›