Войти
ФлеймФорумПрограммирование

Язык D (43 стр)

Страницы: 140 41 42 43 44 45 Следующая »
#630
15:24, 16 сен. 2016

Panzerschrek[CN]
> Например:
> https://habrahabr.ru/company/hexlet/blog/303160/
  Правило 3 по сути означает, что любой способ автоматического управления памятью идёт по бороде, так что Rust тут обламывается со своей киллер-фичей. А без киллер-фичи, но с кучей новых сюрпризов типа того же отсутствия нормального ООП кому он вообще сдался? Остальное это по сути правила организации и проверки кода, которые от языка не зависят (кроме макросов, но их кроме С/С++ больше почти нигде и нет, так что это правило отсекается сразу), типа проверки всех аргументов и возвращаемых значений функций и их размеров и которые будут болью в заднице практически всегда.


#631
17:06, 16 сен. 2016

Panzerschrek[CN]
> Там, где стоимость ошибки высока.
Ну, ты не НАСА советовал переходить на Руст, а всем в этой теме. Вот мне зачем такой язык нужен?

#632
20:59, 16 сен. 2016

Panzerschrek[CN]
> Товарищи из NASA пишут на C, изобрели тонны правил, чтобы не допустить ошибки.
Уверен, что эту тонну правил никто не знает, кроме этих товарищей из NASA. Ну разве может кроме гуру, которые работают в google или yandex более 10 лет.
К сожалению, почти любой человек учит\умеет лишь необходимый ему минимум. В этом даже не сам человек виноват, а просто не повезло ему найти необходимую информацию, нет ее на русском языке, нет денег на pvs-studio или просто времени нет\лень. Поэтому многие даже на C# умудряются писать как попало. И это нельзя сбрасывать со счетов.

Так что это не плюс С, а плюс тем, кто сумел как-то выкрутится.

#633
21:23, 16 сен. 2016

Если писать как попало, то можно и на питоне утечку памяти организовать.

#634
21:33, 16 сен. 2016

WISHMASTER35
> Уверен, что эту тонну правил никто не знает, кроме этих товарищей из NASA.
  А их никто и не должен знать, потому что это исключительно для внутренних нужд. К разработке ПО они имеют примерно такое же отношение, как правила именования переменных.

#635
3:11, 17 сен. 2016

Panzerschrek[CN]
> Хипстеры-функцианАльщики захватили гомитет стандартизации и всовывают в
> стандарт всякую чушь.
Я, кстати, какое-то время назад именно вот такую мысль и высказывал.

#636
0:20, 30 янв. 2017

Сегодня мне удалось освоить слияние кодов на C++ И D. Пока не забыл, показываю как. Берём код на D и заталкиваем в файл app.d

import std.stdio;

extern (C++) int foo(int i, int j, int k)
{
    writefln("i = %s", i);
    writefln("j = %s", j);
    writefln("k = %s", k);
    return 1;
}

extern (C++) void bar();

void main()
{
    bar();
}
Потом берём код на C++ и заталкиваем в файл main.cpp
int foo(int i, int j, int k);

void bar()
{
    foo(6, 7, 8);
}
Потом компилируем с высокой осторожностью.
g++ -c main.cpp
dmd -c app.d
dmd main.o app.o -of=test
Наслаждаемся результатом
i = 6
j = 7
k = 8

#637
5:55, 30 янв. 2017

Алексей Патрашов
Можно сохранить в "подсказки" http://www.gamedev.ru/tip/

#638
10:23, 30 янв. 2017

Алексей Патрашов
> Пока не забыл, показываю как.
Так это же в документации есть. Гораздо интереснее в плане портабельности трюк для взаимодействия с C-кодом, основанный на том, что мы вместо класса делаем структуру а вместо его методов делаем extern(C) функции. UFCS из D позволяет вызывать эти функции как методы. Можно даже сделать перегруженные функции:

extern(C) addInt(int x, int y) {return x+y;}
extern(C) addFloat(float x, float y) {return x+y;}
alias addInt add;
alias addFloat add;
//Дальше используем add как перегруженную функцию
А из Си использовать addInt и addFloat.
Жаль, что в C++ таких алиасов нет и, чтобы добиться такого поведения, нужно оборачивать функции в C++-функции и методы.
#639
14:53, 30 янв. 2017

gammaker
> Так это же в документации есть.
В документации код есть, а вот как его собирать, они показать не удосужились. Я сдуру всё пытался сбилдить на клипсе, пока не сообразил, что надо компилить отдельно и вместе потом собирать из объектников, причём конечным компилятором должен быть именно dmd.

#640
15:03, 30 янв. 2017

Алексей Патрашов
> причём конечным компилятором должен быть именно dmd.
Видимо потому, что он Phobos и druntime линкует. Если вызывать линкер напрямую, эти библиотеки надо вручную передавать.

#641
15:19, 30 янв. 2017

Алексей Патрашов
> В документации код есть, а вот как его собирать, они показать не удосужились.
  Просто документация рассчитана, скорее всего, на та тех, кто понимает смысл фразы "Compiling the two files, the first with a C++ compiler, the second with a D compiler, linking them together".

> причём конечным компилятором должен быть именно dmd.
  Я догадываюсь, что конечным должен быть тот, в котором содержится main. Плюс перед вызовом любой дишной функции, использующей рантайм нужно сначала из С++ вызвать функцию на D, которая инициализирует рантайм с помощью Runtime.initialize().
  А вообще вот более подробно: http://stackoverflow.com/questions/26923976/calling-a-d-function-… rectly-from-c

#642
18:55, 31 янв. 2017

Продолжаю мучить линковщик. Научился впихивать либы C++ в D. Выглядит это примерно так для main.d и либы C++.

dmd ${project_loc}/main.o ${project_loc}/lib/libapp.a -ofmain

Между собой gdc и dmd не ладят, поэтому надо не перепутать.

Прошло более 1 года
#643
17:02, 16 фев. 2018

Тут вот говорят (точнее, говорили полгода назад), что:

Благодаря усилиями команды разработчиков языка у D теперь появилось совместимое с чистым Си подмножество обладающее не только привычным для любого программиста Си синтаксисом, но и значительно расширяющее функционал языка. Новое подмножество называется «betterC». Это подмножество позволяет перевести написание Си приложение на новый уровень.

Усматриваю здесь иронию судьбы. "В чём фатальная ошибка других языков? - подумали некогда авторы Д. - В том, что в них рано или поздно чего-то не хватает, и недостающее приходится компенсировать костылями. Сделаем же язык, в котором будет всё, и делать к нему костылей не понадобится!" Прошло 16 лет - и к языку, в котором есть всё, делают костыль через отпиливание лишнего. Бугага.
#644
17:30, 16 фев. 2018

Sbtrn. Devil
Это потому что в язык D каждый норовит кинуть камень "ко-ко-ко, конечно у вас язык неплохой язык, но это потому что ГЦ. Вы попробуйте без ГЦ, как мы со своими крестами\растом. Мы каждый день пилим на Си ембеддед системы с полутора килобайтами оперативки и жестким реалтаймом до микросекунд, поэтому гц себе позволить не можем". Вот они и сделали betterC который без гц, чтобы пишущие на Си могли переползти на D.

Страницы: 140 41 42 43 44 45 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.