Search
Write a publication
Pull to refresh
1
0
Alexander Legalov @kreofil

Пользователь

Send message

Возможно. А может быть предыдущее поколение просто лучше знало русский язык?

Если интерес касается разных эволюций кода, то можно посмотреть здесь:

https://github.com/kreofil/evo-situations/tree/main/evolution
Старое описание ситуаций можно почитать отсюда:
http://softcraft.ru/ppp/simplesituations/

Из последнего: http://softcraft.ru/ppp/

Для коллекции. Код на Си. Ну, почти чистом Си (http://softcraft.ru/ppp/ppc/).

#include <stdio.h>
#include <stdlib.h>

typedef struct Point {int x, y;} Point;

void PointInit(Point* p, int x, int y) {
    p->x = x;    p->y = y;
}

void PointDraw(Point* p) {
    printf("Drawing Point at (%d, %d)\n", p->x, p->y);
}

char* PointName() {
    return "Point";
}

typedef struct Circle {int x, y, r;} Circle;

void CircleInit(Circle* c, int x, int y, int r) {
    c->x = x;    c->y = y;    c->r = r;
}

void CircleDraw(Circle* c) {
    printf("Drawing Circle at (%d, %d), r = %d\n", c->x, c->y, c->r);
}

char* CircleName() { return "Circle"; }

typedef struct Rectangle {int x, y, w, h;} Rectangle;

void RectangleInit(Rectangle* r, int x, int y, int w, int h) {
    r->x = x;    r->y = y;    r->w = w;    r->h = h;
}

void RectangleDraw(Rectangle* r) {
    printf("Drawing Rectangle at (%d, %d), %d*%d\n",
           r->x, r->y, r->w, r->h);
}

char* RectangleName() { return "Rectangle"; }

typedef struct Shape {}<> Shape;
Shape + <Point;>;
Shape + <Circle;>;
Shape + <Rectangle;>;

void Draw<Shape* s>() = 0;
void Draw<Shape.Point* s>() { PointDraw(&(s->@)); }
void Draw<Shape.Circle* s>() { CircleDraw(&(s->@)); }
void Draw<Shape.Rectangle* s>() { RectangleDraw(&(s->@)); }

char* Name<Shape* s>() {return NULL;} // = 0;
char* Name<Shape.Point* s>() { return PointName(); }
char* Name<Shape.Circle* s>() { return CircleName(); }
char* Name<Shape.Rectangle* s>() { return RectangleName(); }

Shape* CreateShapeAsPoint(int x, int y) {
    struct Shape.Point* s = create_spec(Shape.Point);
    PointInit(&(s->@), x, y);
    return (Shape*)s;
}
Shape* CreateShapeAsCircle(int x, int y, int r) {
    struct Shape.Circle* s = create_spec(Shape.Circle);
    CircleInit(&(s->@), x, y, r);
    return (Shape*)s;
}
Shape* CreateShapeAsRectangle(int x, int y, int w, int h) {
    struct Shape.Rectangle* s = create_spec(Shape.Rectangle);
    RectangleInit(&(s->@), x, y, w, h);
    return (Shape*)s;
}

void DeleteShape(Shape* s) {free(s);}

typedef struct Canvas {
    int len;
    Shape* shapes[100];
} Canvas;

void CanvasInit(Canvas* c) {c->len = 0;}

void CanvasClear(Canvas* c) {
    for(int i = 0; i < c->len; ++i) {
        DeleteShape(c->shapes[i]);
    }
    c->len = 0;
}
void CanvasAdd(Canvas* c, Shape* s) {
    c->shapes[c->len++] = s;
}

void CanvasRender(Canvas* c) {
    for(int i = 0; i < c->len; ++i) {
        Draw<c->shapes[i]>();
    }
}

int main() {
    Canvas canvas;
    CanvasInit(&canvas);
    CanvasAdd(&canvas, CreateShapeAsPoint(1, 1));
    CanvasAdd(&canvas, CreateShapeAsCircle(5, 5, 3));
    CanvasAdd(&canvas, CreateShapeAsRectangle(10, 10, 10, 10));

    CanvasRender(&canvas);
    CanvasClear(&canvas);
    return 0;
}

Что-то уже было в предыдущем поколении. И споры. И даже с кодом: http://softcraft.ru/paradigm/dhp/
Дежавю, однако...

Если это не перевод с английского, то где Тривиль?

Для общего подтверждения давних увлечений фото из моих архивов с объявления результатов защиты ВКР. 14.06.2018. Сергей, желаю дальнейшей успешной работы! Продолжай писать. Надеюсь, что это будет мотивировать не только незрячих, но и тех, кто пока смотрит  не дальше собственного носа.
Для общего подтверждения давних увлечений фото из моих архивов с объявления результатов защиты ВКР. 14.06.2018. Сергей, желаю дальнейшей успешной работы! Продолжай писать. Надеюсь, что это будет мотивировать не только незрячих, но и тех, кто пока смотрит не дальше собственного носа.

Тогда обычно пробелы не ставились, а ставилась табуляция. Редакторы также не заменяли табуляцию пробелами. Поэтому был только один символ. Ну и привычка. Специально посмотрел свой код 1992 года. Да. Везде табуляция. Правда сейчас она у меня отобразилось в смещение, равное двум пробелам.

В 1990 году появился Turbo C++ 1.0. Если память не изменяет Turbo сменилось на Borland где-то в районе третьей версии.

Может быть Вам стоит посмотреть на EO (Eolang), где все есть объект?
А так хорошо бы продемонстрировать предложение примерами, чтобы слова о парадигме были отражены в коде...

Information

Rating
11,646-th
Location
Россия
Registered
Activity