Обновить
64
1.2

Programmer

Отправить сообщение
Расскажите подробнее, чувствуется что вы знаете что-то интересное. Насчет Sun OBI, SGI Delta C++, DTS C++…
Для любого X всегда найдется Y, такой, что X — всего лишь инструмент для Y :)
Да, это уже лучше (хотя синтаксис все равно производит странное впечатление, но по смыслу лучше).
В общем, философия метапрограмминга сводится к тому, что должно быть два контекста:
1. компилируемый код (и конструкции для подстановки такого кода в произвольные места — шаблоны), ключевое слово template
2. интерпретируемый во время исполнения код — macro; макросы кстати могут писаться на приизвольных языках, не обязательно на том же языке что и код. Главное, чтобы из них был доступ к AST DOM и API компилятора.

При этом в контексте компилируемого кода можно вставлять интерпретируемые на этапе компиляции конструкции (в D — static if, в C++ с некоторой натяжкой — препроцессор). Это ограниченное подмножество операторов «условной компиляции» — для более сложных вещей прелполагаются макросы.
А в интерпретируемый на этапе компиляции код можно вставлять компилируемые вставки — «квазицитаты».
Получается что два контекста симметричны друг относительно друга, и это должно быть отражено на уровне синтаксиса.
Бессистемно как-то (по крайней мере впечатление такое, особенно после просмотра исходников компилятора). Метапрограмминг на строках вместо специальных квазицитат:
string s = "int y;";
mixin(s);  // ok
y = 4;     // ok, mixin declared y

По сути работа со строками лишает программиста возможности использовать систему типов и концепций. Если я хочу макрос, который должен принимать первым аргументом тип, вторым — имя и третьим — операторный блок, то на строках это никак не указать явно. Пока не передам в такой макрос что-то левое и не получу загадочные ошибки компиляции…
Хотя конечно по сравнению с С++ это реальный прогресс. Надо будет собраться с мыслями и уже для Хабра сделать статейку про связь шаблонов и макросов.
В общем D вовсе не плох, но допиливать там надо многое — таково мое ИМХО :)
Да, такой вопрос есть. Однозначного ответа я пока не придумал, хотя разные мысли есть…
Наверное, если библиотека реально пользуется какой-то функциональностью, и это обусловлено логикой, смыслом библиотеки — то она должна быть включена. С другой стороны, если библиотека пользуется динамическим выделением памяти и предполагается, что она должна работать как в конфигурации со сборкой мусора так и без нее, то язык должен предоставлять более абстрактные примитивы «выделить память» и «освободить память», которые будут уже подключаться — или к обычному аллокатору, или к сборке мусора (тогда «освобождение» просто сведется к обнулению ссылки)
Какие-то сильно навороченные «преобразователи направления» в Китае… достаточно ведь просто одно направление поднять на эстакаду и провести над другим, зачем все эти кольца?
Один раз я поехал куда-то в незнакомое место, запускаю 2gis (на андроиде) — а он мне и выводит сообщение: у вас старая версия, работать не буду. И все. А я в дороге и собрался по gps ориентироваться.
Да, я не включаю wi-fi каждый день чтобы отслеживать все автообновления, и мобильный интернет на смартфоне отключен… Но все карты были в оффлайне и какое-то время назад прекрасно работали.
В общем, не делайте так больше пожалуйста!
IDE выглядит как привет из 90ых

А что в этом плохого?
Очень интересно, только текст надо причесать (пару раз «Лиза» вместо «Ива» и и.п.)
А так — здорово. Напоминает что-то старое и доброе:) Возможно фанфики времен «Поколения Wend» по Матрице, которые возможно еще остались где-то здесь… Или даже произведения Гибсона…
Да уж скорей бы они кончились. Интересно же на это посмотреть:)
А откуда в выражении
if (c is Polar(5, *)) Console.WriteLine( R );
берется R?
Код на Objective C прямо в Visual Studio… со всеми фичами редактирования, компиляции, отладки и запуска в эмуляторе айфона… channel9.msdn.com/events/Build/2015/3-610
И сегодня вроде первое мая а не первое апреля… Одно слово — Круто!
А где остальные берут прибыль? Linux — бесплатен (да и большинство ОС кроме винды и osx), компиляторы gcc и llvm — бесплатны, java бесплатна, среды разработки на java почти все бесплатны, СУБД такие как mysql, postgres бесплатны, android бесплатен, как и sdk для него, разнообразные web фреймворки почти все бесплатны, компиляторы и интерпретаторы к большинству языков программирования почти все бесплатны, qt бесплатно, boost бесплатен, множество других библиотек и фреймворков для c++ бесплатно…
Конечно есть и платные продукты, и мы их знаем, но они в основном рассчитаны на корпоративных клиентов. Есть и платные лицензии для того, что бесплатно для простых пользователей — но опять-таки все платно в основном для корпораций.
Интересная тема, хотя статья слишком краткая — чтобы понять, нужно открывать каждую библиотеку и разбираться.
И еще мысль — рефлексия это достаточно важная фича, эмулирующая отсутствующие возможности языка программирования… хорошо бы что-то наиболее удачное появилось в Бусте. Вот здесь ничего нет, но если погуглить, находятся какие-то неофициальные реализации:
boost-extension.redshoelace.com
bytemaster.bitshares.org/boost_reflect/index.html
Какие минимальные требования к железу и — самое главное — к ОС?
Как с производительностью по сравнению с vs2013?
Делаются ли какие-то шаги в сторону улучшения производительности по сравнению с предыдущими версиями при условии запуска на таком же железе?
Думаю, проблема в том что их слишком много:)
В С++ как таковых «фреймворков» сравнительно мало — boost, qt, mfc (ну можно вспомнить еще gtk, wxwidgets и vcl из builder'а). Мне, как программисту С++, хочется иногда изучить javascript — язык весьма красивый и интересный, но если изучать — то делать что-то практическое… Но вот беда, все эти фрейморки которые чуть ли не каждый день появляются… напрочь отбивают желание что-либо изучать:)
Тип номинативно-типизирован, кортеж — структурно-типизирован. Это разные вещи с разными областям применения. Если вам нужна функция, принимающая два параметра — вы пишете функцию с двумя аргументами, а не функцию, принимающую тип с двумя полями. Также и здесь. Бывает, когда нужно вернуть из функции объект (как единое целое) — в этом случае объявляется структура; а если нужно вернуть просто два значения, никак не связанных между собой — применяется кортеж и множественный возврат из функции.
Спасибо! Надеюсь что будет и следующая часть — Pattern matching / Records / algebraic data types (Proposal: #206), там еще интереснее:)
Кортежи — это одна из тех естественных вещей, которая была неочевидна (или недоступна в явном виде) в течение очень долгого времени, и только недавно стала проникать в мейнстрим. В общем, кортеж — это группа имен времени компиляции и не более того. Список аргументов функции — кортеж. Список инициализации в фигурных скобках — это тоже кортеж. Даже список полей и методов класса тоже можно рассматривать как кортеж (хотя и не кортеж объектов, а скорее чистый кортеж имен — это уже к метапрограммированию). В идеале, это способ группировки чего угодно на этапе компиляции — и в общем это более фундаментально чем структура (которая по сути лишь кортеж в обертке типа). И множественный возврат из функции — лишь самое очевидное применение. Как насчет групповых или множественных операций?
(i, j, k) = (a, b, c);
(i, j, k) += 100;

Хотя и это мелочи. Думаю, со временем ситуация с кортежами прояснится и раскроется их мощь, а то многие думают что это недоструктура или даже недосписок как в питоне.
Комментарии нужно вводить в стандарт JSON, а не заниматься велосипедостроением:) Если либа с открытыми исходниками — в ее можно добавить поддержку комментариев. Если достаточное количество библиотек поддержит комментарии — появится фактически новый стандарт, расширяющий json. Рано или поздно его стандартизируют официально. И со временем старый — без комментариев — уйдет в небытие

Информация

В рейтинге
1 772-й
Зарегистрирован
Активность