Pull to refresh
64
1.3

Programmer

Send message
В который раз убеждаюсь что все гениальное просто. Что может быть проще двух длинных чисел, представляющих широту и долготу? Оказывается, короткая символьная строка в 36-ричной системе:)
Бессмысленные ограничения… Разве для какого-нибудь Андроида проблема написать софтверную реализацию шифрования? Дополнительное преимущество — можно применять именно те механизмы шифрования, которые ты хочешь и которым доверяешь, а не то что зашито производителем.
Когда-же кто-нибудь объединит электромобиль и автопилот?
Я бы так не сказал. В D и Rust присутствуют разные не менее интересные фичи, но конкретно структурная типизация и встраивание вместо наследования, насколько я помню, только в Go.
Я имел в виду всего лишь «нескриптовое» программирование. Не знаю есть ли правильный адекватный термин. То есть все то, что обычно делают на C/С++, включая и классическое «системное» программирование, и «встраиваемое» (для микроконтроллеров, в том числе самостоятельные прошивки без ОС), и достаточно большую часть «прикладного», включая и софт с GUI, и геймдев, и серверное ПО.
Идеальный язык системного программирования пока не сделан, увы. И Go конечно даже и не претендует на это звание:) Но в Go есть некоторые идеи, которые лично мне понравились (и которые ИМХО вполне могли бы войти в «идеальный язык» в качестве фич):
1. Структурная типизация. Как дополнение к классической номинативной она была бы очень интересна.
2. Встраивание вместо наследования. Удивительно простая и очевидная вещь, которую следовало бы ввести еще в Си. Можно сказать что это более низкоуровневая реализация наследования. А возможность «встраивать» указатели вообще дает крайне интересые эффекты.
3. Ну и оператор вывода типов := сам по себе весьма милый… знаете, мелочь — а приятно, что именно так сделали. Правда недоделали до конца, и внутри выражений объявлять таким образом новые переменные нельзя.
Из того что я знаю — язык Nemerle, на rsdn.ru есть отличные статьи по этому поводу. Думаю, еще где-нибудь есть.
Хотя можно обобщить и сказать, что основная идея нормального метапрограммирования — написание «плагинов к компилятору» с использованием классической императивной (процедурной и объектно-ориентированной) парадигмы, причем неважно на том же языке что и основная программа, или на каком-то другом (возможно на упрощенном подмножестве основного языка, или на популярном скриптовом языке). Это не генерация текста программы, а именно работа с синтаксическими деревьями, поэтому компилятор должен предоставлять какое-то API для доступа к себе, а синтаксис основного языка обеспечивать прозрачное встраивание макросов и «квазицитирование» кода.
Что бы ни делать, лишь бы не вводить в язык нормальные синтаксические макросы.
В данном случае часовщик делает не часы, а корпуса для часов. Необычные, но всего лишь корпуса. А сам механизм — обычный (возможно даже от дешевых китайских часов), что можно видеть на фотографиях.
Круто, не ожидал такого количества комбинаций. Но может, квантовые вычисления помогут?
Ну шахматы-то, в отличие от реального мира, конечны. 64 клетки и ограниченное количество фигур, так что начиная с определенного момента — таки не проблема.
ИМХО этот «интеллектуальный бастион» скорее первый, а никак не последний:) К тому же, для шахмат все-же есть теоретическое решение, которое сводится к построению дерева всех возможных комбинаций полным перебором и выбора оптимальной комбинации. Да, нужно огромное количество памяти. Но разве для современных компьютеров это проблема?
Наказывать нужно террористов, а не простых людей. Даже если в Иране есть хотя-бы один(!) человек, который против терроризма, отключать нельзя.
А способов наказать конкретных людей много, было бы желание.
Они там совсем без мозгов. Интернет — это одна из немногих вещей, которая реально сближает людей со всего мира, реально объединяет Человечество.

А закрытие интернета (пусть даже в Иране) — это отличный повод всяким духовным скрепителям сказать «Воот! Видите — наша национальная безопасность под угрозой! Давайте-ка сделаем свой, национальный интернет». И все.
Тем более прецедент уже есть — Севераная Корея.
Ждем спутникового интернета в каждом смартфоне… без всяких дополнительных коробок… не знаю реально ли это, но очень хочется:)
Макросы и шаблоны реально оперируют не типами и не значениями, а фрагментами AST. То что традиционно шаблоны в С++ в качестве аргументов получают исключительно типы и значения (почему-то только целочисленные) — это ИМХО недоразумение. У меня при работе с низкоуровневым программингом для микроконтроллеров не раз возникала необходимость сделать шаблон, в который можно было бы передать просто фрагмент кода (даже не функцию, а просто код в фигурных скобках). Приходилось делать костыли с сишными лексическими макросами, которые как вы понимаете, далеко не лучшее решение в программировании.

Поэтому все эти alias и enum в D воспринимаются как унаследованные от С++ костыли. Конечно, должен быть некий механизм ограничения того, что мы передаем в шаблон — если там предусмотре тип, то это должен быть только тип а не что угодно. Но на самом верхнем уровне это именно нода синтаксического дерева.
Мне нравится подход языка Nemerle. Там есть «макросы» — специальные функции, начинающиеся с ключевого слова «macro». По сути это функции, выполняющиеся во время компиляции. В них можно обычным императивным способом выполнять код, который имеет доступ к API компилятора. Этим функциям можно передать объекты кода в виде AST-деревьев. С одной стороны, никаких строк — с другой стороны, никакой шаблонной магии.

А что вы имеете в виду под «разделение типов и значений»? Я наверное не знаком с зависимыми типами, интересно что это такое.
И опять магия и трюки. В языке D конечно учтены многие ошибки дизайна C++, но метапрограммирование все так-же натянуто — впечатление, что его прикручивали уже после разработки языка.
А мне нравится Consolas (он правда «несвободный»; шрифт Inconsolata на него очень похож — такое чувство что буквы просто слегка увеличили). И еще Terminus, но не для программирования, а в панелях Total Commander. Желто-зеленым цветом на темном фоне смотрится особенно по-хакерски:)
Соедините торренты и социалки и все будет ОК, и люди потянутся. Кто кто первый это сделает и будет отцом распределенного Интернета.

Information

Rating
1,741-st
Registered
Activity