Как стать автором
Обновить
23
0
Дмитрий Чернов @cher-nov

в экономике, так сказать, необходим

Отправить сообщение
Вы так говорите, как будто мне это нравится. А ведь это не так, на самом-то деле.
Я за справедливость. И если по справедливости, то те же немцы осуждать Красную Армию за это не имеют никакого морального права. Равно как и другие страны Оси. Но ведь осуждают же.
Тут много писали про гуманность смертной казни, закину и я свои пять копеек.

За свою недолгую жизнь (а мне 21,5 года) я прошёл эволюцию взглядов от «давить этих мразей под прессом, а останки использовать в качестве биотоплива» до полного неприятия смертной казни за исключением военного времени.

Рассуждать на тему можно много и долго, я же в таких случаях прерываю дискуссию в голове и стараюсь ухватить мысль, после которой любая рефлексия лично для меня потеряет всякий смысл. Например по поводу наших войск в Сирии — при Асаде женщины там могли на пляжи выходить в купальниках, притом что население арабское. Знание подобных фактов зарубает любые «а если» и «но ведь» на корню.

Что до смертной казни, то тут подобная мысль очень проста: общество не должно опускаться до уровня тех, кого оно осуждает и наказывает, иначе оно теряет всякое моральное право так делать. Да, с каждого гражданина в год уходит сколько-то копеек на содержание пожизненно заключённых. Но на другой чаше весов — моральный облик общества и право его членов называться людьми.

Приведу ещё пример. Все знают о зверствах фашистов во времена Великой Отечественной. Однако сейчас намного чаще вспоминают почему-то не их, а несоизмеримые по масштабам и последующим наказаниям, но всё же имевшие место быть зверства Красной Армии при освобождении европейских населённых пунктов.

Здесь можно долго разглагольствовать про информационную войну и прочее, однако лучше задать самим себе вопрос — а как так получилось, что коммунистов стали отождествлять с фашистами? А именно благодаря таким вот эксцессам. Грех одних затмил славу многих, а сопоставление масштабов, увы, никого не интересует.

Сверху упоминали Солженицына — это из той же оперы. К слову, все его талмуды с лёгкостью перевешивает «Открытое письмо Сталину» Раскольникова, ИМХО.

Собственно, наличие смертной казни в США, Белоруссии, да и неполная отмена её в России меня как гуманиста очень сильно печалит.

Dixi. Минусуйте.

А тем временем, один из создателей UML упорно пилит очередную таблетку от всего, которая решит все наши проблемы ещё раз:


В настоящее время Якобсон возглавляет проект SEMAT, посвящённый созданию единой теории, способной стать фундаментальным научным основанием для процесса разработки программного обеспечения. Ядро SEMAT было одобрено комитетом по стандартизации OMG и принято как свободный стандарт. Активно продвигает инициативу и принимает участие в написании статьи в английской Википедии, посвящённых проекту.

https://ru.wikipedia.org/wiki/Якобсон,_Ивар
https://en.wikipedia.org/wiki/SEMAT
http://semat.org/

Так и вижу уже чью-нибудь статью под названием "Go 2 Considered Harmful" и прочий сарказм о созвучии "Go 2" и "goto".
Не совсем удачное название, ИМХО.

Каюсь, не сравнивал. Но в планах есть.

1) Добавил пример из сообщения выше в статью.


2) Да, но нет, потому что присвоить строковой литерал нельзя — мы в Си. :)
Но можно сделать вот так, да:


strcpy( family[2].Name, "Batman" );
Код примера.
#include <stdlib.h>
#include <stdio.h>

#include "genvector/genvector.h"

typedef struct person_s {
  char Name[32];
  int Age;
} person_t;

GVEC_INSTANTIATE( person_t, person, GVEC_USE_VAL, GVEC_USE_REF );

int main() {
  gvec_person_t family = gvec_person_new(3);

  gvec_person_push( &family, (person_t){
    .Name = "Alice",
    .Age = 30
  } );
  gvec_person_push( &family, (person_t){
    .Name = "Bob",
    .Age = 32
  } );
  gvec_person_push( &family, (person_t){
    .Name = "Kate",
    .Age = 10
  } );

  printf( "%zu\n", gvec_count( family ) );
  while ( gvec_count( family ) > 0 ) {
    person_t member = *gvec_person_back( family );
    printf( "name %s, age %d\n", member.Name, member.Age );
    gvec_pop( family );
  }

  gvec_free( family );
}

Прошу прощения, но не силён в примерах. Целью было именно описание примерного хода мыслей при создании библиотеки.
К тому же, для приведения примеров пришлось бы описывать оба реализованных подхода к использованию библиотеки (статический и модульный), что сильно бы увеличило размер статьи.

Я буду рад, если вы поделитесь потом своими размышлениями.

Спасибо.
А про "кроссплатформенный ассемблер" — это же ирония. Там всё предисловие ею заляпано.

Добавил, спасибо. Однако эта реализация тоже не лишена тех же недостатков, которые разобраны прямо после списка. :)

Или иметь возможность вручную увеличить размер.

Не заметил сразу.
Это есть, кстати говоря. См. gvec_resize() и gvec_reserve().

Благодарю.


Статья изначально предполагалась размера примерно в полтора раза большего, чем она вышла в итоге. Очень хотелось описать ещё следующие вещи:


  • конкретные детали реализации специализирования макросами, в частности то, как именно реализовано указание передачи и возврата по ссылке или по значению;
  • статический и модульный подходы к использованию библиотеки (и их поддержка ею самой);
  • почему последний коммит на момент публикации — это монстр под названием "Полностью изменён интерфейс вектора".

Однако было решено не заниматься переписыванием ReadMe из репозитория. К тому же, для иллюстрации потребовались бы большие куски кода. Это всё раздуло бы статью и сделало бы её менее приятной для чтения, и это при живом-то наличии вроде аккуратного репозитория.


Смысл пункта (5) прост: если типы значений в двух разных векторах имеют одинаковый размер, то мы можем прочитать вектор одного типа как вектор другого, и наоборот. У меня был конкретный пример использования, где это было полезно.


Пункт (7) подразумевает, что вектор ведёт себя аналогично std::vector из C++11, а набор его функций идентичен (пусть и слегка неполон). Я в самом деле сидел с открытым cppreference.com и реализовывал поведение вектора и его хранилища так, как описано там.


Допустим, у нас есть вектор, содержащий целые значения, и вектор содержащий числа двойной точности. Что будет означать попытка присвоить один вектор другому? Мы хотим, просто, скопировать значения из одного массива в другой и сделать так, чтобы копия автоматически поменяла бы тип?

Описанное Вами — это по сути изменение размера вектора плюс один цикл по элементам. Такую задачу в виде функции можно решить только определив callback присваивания. С другой стороны, более элегантно с точки внешнего вида кода пользователя будет вариант с макросом, которому будут переданы массив назначения и исходный массив. Однако такой вариант будет заметно выбиваться из изначальной концепции "не делаем функции макросами".


Я честно пока не решил, какой из этих вариантов лучше, а поскольку это не входило в необходимый мне (и в итоге реализованный) минимум возможностей, то я оставил это на потом. Быть может, я потом напишу отдельно заголовочные файлы для поддержки подобных вещей. Также были планы дописать отдельно некоторые дополнительные функции для использования этого вектора в качестве динамической строки. Есть намётки и на систему callback'ов, и на итераторы. Но — не сейчас.


Тем не менее, я буду рад появлению в репозитории issue, посвящённых таким вещам, а также pull request'ам.

Этот комментарий и два предыдущих окончательно убедили меня в том, что надо было делать возможность указывать собственную функцию роста.


Единственная проблема в том, что написание таких возможностей не было основной целью создания этой библиотеки. Однако я буду рад, если кто-нибудь кинет мне PR, реализующий это. :)

Простите, если заголовок желтоват — у меня родители журналисты как-никак. :)

offtop

Не знаю, но картинка судя по всему настоящая. По крайней мере, похожие дома я видел.
Когда она впервые попалась мне на глаза, первой ассоциацией был двухмерный массив. И вот она мне пригодилась.

Да, знаю про это. Как-никак один из важнейших нюансов при написании динамического массива. :)


Нет, у меня именно что происходит увеличение в 1.5 раза. Причём коэффициент можно изменить, переопределив GVEC_GROWTH_FACTOR при компиляции библиотеки.


Значение 1.5 выбрано из-за тех самых тонкостей с оптимальным выбором. Вот хороший ответ на SO, после прочтения которого мне стали понятны преимущества: ссылка.

12 ...
9

Информация

В рейтинге
Не участвует
Откуда
Владивосток, Приморский край, Россия
Зарегистрирован
Активность