Pull to refresh
64
1.3

Programmer

Send message
«Птичий» по названию :), или таки есть интересные аргументы, которыми можно поделиться с сообществом?
Читать такие статьи в любом случае интересно. Свежий взгляд реального программиста, попытавшегося что-то сделать на новом языке, лучше всего выявляет потенциальные недостатки этого языка, и вообще позволяет задуматься и подискутировать на многие интересные темы.
А сколько вообще такого типа макетная плата может стоить?
Я некоторое время назад много занимался программингом микроконтроллеров (причем именно ARM), но на работе. Интересно, если вдруг для себя захочется что-то поделать…
О какой расширяемости идет речь? «Расширяемость» — слишком большое понятие.
А так он свою функцию вполне выполняет.
В JSON все что не хватает — это комментариев.
Я бы предложил такое:
Однострочные //
Многострочные /* */
И блочные (для структурного комментирования скобочного блока) #
Все равно все там или иначе пользуются инфраструктурой провайдеров, а там IP адреса. Сеть совсем без провайдеров невозможна (разве что netsukuku), а пока есть провайдер — есть и IP адрес. Всякие прокси помогут, только если они находятся вне юрисдикции государства. Так что концепцию особо не поменяешь.
И это тоже все входит в unicode???
Ну в смысле корректна, но бестолкова. Для действий с bool есть логические операции && и ||, которые совершенно правильно имеют приоритет ниже чем сравнения.
Операторы сравнения < <= > >= == != имеет приоритет выше чем битовые операции & | ^
В результате например вот такая вполне логичная конструкция
if(x & 0x07 > 4)

без скобок вокруг «x & 0x07» некорректна.
Точно, тот самый знаменитый пример:)
X * Y; // что это - умножение или объявление указателя?

Ну я бы не сказал что это полувековые костыли:) Да и кто сказал что в компонентном паскале костыли?
Костыли проявляются после более глубокого изучения языка, а подход типа «раз похоже на компонентный паскаль — значит костыли» совершенно неправильный.
Вот например кто нибудь знает, что в С/С++ (и также в C#/Java) есть дефект с приоритетом операций? Сможете назвать и обосновать?
А зачем двоеточия и стрелочки, кроме как для красоты?
В языке Rust сделано почти так же как в Go: типы после имен переменных, ключевые слова let и let mut (вместо var), fn (вместо func) для фукнций.
Синтаксис объявления переменных в Си меня вполне устраивает, и я не вижу в нем ничего непонятного; то, что объявление совмещено с выражениями тоже очень удачно.
А вот для функций я бы предпочел ключевое слово func вначале, а возвращаемый тип после агрументов
func foo(int x) int 

принцип очень простой: сначала пишем существующее, затем новое. То есть сначала пишем имя сущности, которая нам известна (ключевое слово или имя типа), а затем вводим новый идентификатор. Лично мне так гораздо понятнее.
Ключевые слова var и let, повсеместно используемые в новых языках (и не только в Go) для объявления переменных, очень удобны для компилятора. Они снимают любые неоднозачности, связанные с разбором: после них может быть только объявление переменных.
Удобны ли они для человека? Думаю, кому как, мне не очень. Но это дело привычки.
А вот объявление функций с ключевого слова было бы действительно удобно — по общему принципу с объявлением структур, классов, перечислений и т.д. Решалась бы путаница с указателями на функции. Упростилась бы работа компиляторов и IDE. Искать объявления функций в коде стало бы легче. Упростилась бы реализация объявления вложенных функций (напомню, еще в Паскале они были, а в современном С++ есть только частный случай в виде лямбд). Появились бы интересные дополнительные возможности: введение имен возвращаемых значений, введение специальных ключевых слов для специальных функций, удобный синтаксис для возврата сразу нескольких возвращаемых значений и т.д.
Даже меньше чем один световой день… 18.5 световых часов. До ближайших звезд — несколько световых лет, т.е. в сотни раз дальше.
s02.yapfiles.ru/files/531066/SHkala_masshtabov_Vselennoy_v.2.swf

Ну да, я на тот момент не знал об этом:)
Но там еще такие штучки были. Не помню точно, вроде точка или запятая как разделитель при вводе числа в ячейку таблицы, причем это зависело от текущей локали, при неверном вводе тоже что-то вываливалось.
Я и на С++ так делаю. И в общем программы построены так, что для любого типа есть какое-то недействительное значение, которое обрабатывается наравне с действительными в общей логике. Исключения в основном только там, где того требует внешнее API.
Когда понадобилось написать одну программку на C#, категорически не понравилось то, что функция преобразования строки в число выбрасывает исключение, если строка — не число. Ну да, в принципе логика понятна — не число же, но что мешало сделать хотя-бы две версии функции — со значением по умолчанию и с исключением. На практике обе эти ситуации необходимы одинаково часто.
Кстати, в реальной практике столкнулся с тем что иногда алгоритмы без if'ов могут быть полезны. При разработке прошивки для микроконтроллера обнаружилось (реально, осциллографом) что наличие if'ов в процедуре обработки прерывания существенно замедляет эту самую обработку. Ну и оказалось проще придумать и написать нечто на арифметических и битовых операциях, но без условных переходов.
Нет, аргументы функций внутри самих функций это тоже объявление переменных. Но идея про легкость поиска мне понравилась. В известных мне IDE зачастую не хватает умного поиска — найти все места где переменная объявлена, где она читается, где изменяется и т.д. Аналогично с типами — где объявлен, где объявляются объекты этого типа, где наследование от этого типа…
Тут еще есть такой аспект: операторных символов в ASCII мало (а использовать Unicode непреемлемо по причине того, что символы должны гарантированно быть на стандартной клавиатуре в любой стране мира). Поэтому при разработке языка нужно расходовать операторные символы достаточно продуманно.

Information

Rating
1,712-th
Registered
Activity