Как компилятор может исключить вызов, если указатель формируется в рантайме и компилятору просто неизвестно его содержимое? Там может быть null, может быть валидный указатель или ненулевой и невалидный.
В С++ тоже можно вызвать метод от нулевого указателя на объект. Если в методе нет обращений к полям класса, и если метод невиртуальный — все сработает, по той же самой причине что и в Go.
А вот синтаксис, при котором для обращения к полям и методам всегда используется точка (и для объектов и для указателей) — крайне интересен. Я не могу сказать однозначно, хорошо это или плохо, но это тот вопрос который требует всестороннего изучения:)
«Обратный игнор» есть например в Твиттере, но для открытых аккаунтов он легко обходится заходом без авторизации. То есть твиты пользователя видны всем, кроме тех кого он добавил в какой-то там черный список. Глупая и ненужная функция, если уж так хочется скрыться — там же есть приватные аккаунты, которые не видно никому кроме «друзей». Вряд ли для Хабра «приватные аккаунты» будут иметь смысл, это все-же не соцсеть, а ресурс для публикаций, здесь публичность предусмотрена самой идеологией сайта.
Вообще интересно конечно все это. Я в то время учился в школе, домашнего компьютера не было, только один или два часа в неделю в школе, поэтому собственно эпоха Доса прошла где-то рядом, но тем ни менее оставила то самое первое впечатление от мира IT — яркое и завораживающее, которое теперь вызывает ностальгию.
А когда появился домашний компьюьтер, уже была Win95/98, хотя я пользовался еще некоторое время Нортоном и средой Borland C — уже из винды.
Подаю идею тем, кто помнит больше: попробовать создать Old School DOS Pack, некий пакет под DosBox, содержащий подборку классического и наиболее интересного досовского софта тех времен. Не только файловые менеджеры, но и текстовые редакторы, среды программирования, утилиты, игрушки, в общем все то что ассоциируется у вас с теми временами. Попытаться воссоздать типичную рабочую среду Хакера из 90-х:) Чтобы можно было запустить и окунуться во все это:)
Лайкул вас ообих — мне непонятно и в G+ и в FB.
Вконтакте и Твиттер — вот понятные сети. Твиттер после недавнего изменения интерфейса стал еще понятнее, и интерфейс стал более отзывчивым.
Для совершенно простой программы на D, которая выглядит как-то так (ничего особенного, просто сделанное на скорую руку нагромождение синтаксических конструкций, единственное требование к которому — быть самодостаточным для компиляции, т.е. не требовать никаких зависимостей)
Заголовок спойлера
module Hello.World;
this()
{
}
alias void *HANDLE;
alias HANDLE HWND;
alias char CHAR;
alias const(CHAR)* LPCCH, LPCSTR, PCCH, PCSTR;
alias uint UINT;
alias ushort WORD;
version (Windows) {
extern (Windows) {
nothrow {
@nogc
{
int MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
}
}}}
struct Soo {
int x, y;
};
int foo(int x, int y)
{
return x+y;
}
int main()
{
int i = 12Lu;
Soo s;
if(i>10) {
int j = i;
s.x = foo(50,50);
}
MessageBoxA(cast(void*)0, "test", "hello world", 0);
return 0;
}
маленький кусок дерева выглядит вот так
Заголовок спойлера
На самом деле ничего особенного, просто я навесил самодельную рефлексию на все структуры синтаксического дерева, чтобы их можно было как-то смотреть в удобном виде.
Да, вы правы. Мне кажется, я где-то видел такой гибридный синтаксис, но совершенно не помню где. Добавлю, что Scala — в конце, Kotlin — в конце, Nemerle — в конце, Swift — в конце, Nim — в конце, Zig — в конце…
Здесь есть некий конфликт с объявлением параметров функций и полей структур — там обычно тип все равно в начале.
Можно конечно пойти по пути C/C++/C#/Java и просто принять, что если есть два идентификатора, разделенные пробелами — то первый это всегда тип, второй — объект. Но в этом случае нужно очень аккуратно подходить к синтаксису, чтобы не нагородить неоднозначностей.
В некоторых языках statements рассматриваются как выражения, возвращающие значение. В этом случае оператор «точка с запятой» становится чем-то вроде оператора «запятая» из С/С++, освобождая саму запятую для других целей.
Уже где-то отвечали. Когда конструкция начинается с ключевого слова, парсить ее гораздо проще (нет неоднозначностей) и быстрее. Причем это касается не только компилятора, но и например среды разработки, в которой нужно «на лету» распарсить буфер редактора, раскрасить его, загрузить в разные деревья списки функций и классов и и т.д.
А объявления переменных кстати в таком формате («КлючевоеСлово Тип СписокОбъектов») лучше всего смотрятся. К тому же, в С++ есть например «const int x = 100», это ведь никого не смущает.
Имена числовых типов — наверное так однозначнее; ведь Си знаменит тем, что там int и char могут быть разных размеров для разных платформ. Хотя олдскульные имена типов тоже неплохи, если жестко задать им размерность в байтах.
А вот синтаксис, при котором для обращения к полям и методам всегда используется точка (и для объектов и для указателей) — крайне интересен. Я не могу сказать однозначно, хорошо это или плохо, но это тот вопрос который требует всестороннего изучения:)
Все равно этот режим будет находиться в каких-то границах, определяемых общей разрядностью числа.
А когда появился домашний компьюьтер, уже была Win95/98, хотя я пользовался еще некоторое время Нортоном и средой Borland C — уже из винды.
Подаю идею тем, кто помнит больше: попробовать создать Old School DOS Pack, некий пакет под DosBox, содержащий подборку классического и наиболее интересного досовского софта тех времен. Не только файловые менеджеры, но и текстовые редакторы, среды программирования, утилиты, игрушки, в общем все то что ассоциируется у вас с теми временами. Попытаться воссоздать типичную рабочую среду Хакера из 90-х:) Чтобы можно было запустить и окунуться во все это:)
Вконтакте и Твиттер — вот понятные сети. Твиттер после недавнего изменения интерфейса стал еще понятнее, и интерфейс стал более отзывчивым.
маленький кусок дерева выглядит вот так
На самом деле ничего особенного, просто я навесил самодельную рефлексию на все структуры синтаксического дерева, чтобы их можно было как-то смотреть в удобном виде.
Можно конечно пойти по пути C/C++/C#/Java и просто принять, что если есть два идентификатора, разделенные пробелами — то первый это всегда тип, второй — объект. Но в этом случае нужно очень аккуратно подходить к синтаксису, чтобы не нагородить неоднозначностей.
А объявления переменных кстати в таком формате («КлючевоеСлово Тип СписокОбъектов») лучше всего смотрятся. К тому же, в С++ есть например «const int x = 100», это ведь никого не смущает.
Имена числовых типов — наверное так однозначнее; ведь Си знаменит тем, что там int и char могут быть разных размеров для разных платформ. Хотя олдскульные имена типов тоже неплохи, если жестко задать им размерность в байтах.