LINUX.ORG.RU

Vim или Emacs? А LISP в 2021?

 , ,


1

3

https://www.youtube.com/watch?v=8Q9YjXgK38I&t=42s

Парень в определённых кругах, личность известная.
посмотрел я его ролик, стал ковыряться по истории:

А ведь Crashbandicoot была годной игрой…

Что выбрать? Vim или Emacs?
Изучать в 2021 году Lisp? Если изучать, какой? Практика?
А не засмеют сотрудики?

Времени в сутках маловато, на всё не хватает.


Ответ на: комментарий от Rastafarra

n-мерный массив — это штука, которая требует отдельной проработки.

воистину, язык снежинок…

На минуточку, в Си точно также.

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

Во-первых т.к. многомерных массивов нет, то тебе нужно определиться что использовать.

Что за? Зачем ты так, а? Ну понятно, что их нет! Дайте же поесть, люди!

Может мы Lisp не знаем, но вот Сишку родную…

B0B ()
Ответ на: комментарий от Rastafarra

значит никак. увы.

Нет, дорогой мой. Ты глубоко ошибаешься. С возрастом тоже. Как и с собеседованиями. Но пока есть такие, как ты - я спокоен.

B0B ()
Ответ на: комментарий от anonymous

Не каждый язык позволит тебе, например, модифицировать существующие функции без их копипейста.

Машины манчестерской («фон-неймановской») архитектуры это позволяют.

vM ()
Ответ на: комментарий от no-such-file

в Си точно также.

не понял.

  1. я так и не увидел пример «в Си точно также» только на js, покажешь где оно «также»?

  2. в цэ можно так: int y[2][4]

  3. какой там ecma?

  4. кто из них про высокоуровневость?

Rastafarra ★★★★ ()
Последнее исправление: Rastafarra (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Минутку. Посмотрю что конкретно умеет clang, чтоб два раза не вставать. Сравнивать сложность реализации и длину кода неинтересно, тут CL очевидный победитель.

Gentooshnik ★★★★ ()
Ответ на: комментарий от MOPKOBKA

Ууу, судя по StackOverflow в Java тоже многомерных массивов нету, вот такй вот плохой у тебя язычек, Rastafarra %)

Есть только массивы массивов. Язык для выгрузки снежинок из БД.

MOPKOBKA ()
Ответ на: комментарий от ugoday

у Си хотя бы оправдание есть отчего он такой

Ну многомерные массивы вообще такая сомнительная штука, ибо легко делаются из одномерных. Если есть и многомерные и массивы массивов то желательно как-то с синтаксисом определиться, чтобы они не путались. В js сейчас a[x][y] это обращение к массиву в массиве и имеет очевидную логику работы, а для многомерных тогда что? Дофига геморроя в не самой нужно фиче.

no-such-file ★★★★★ ()
Ответ на: комментарий от B0B

Нет, дорогой мой. Ты глубоко ошибаешься. С возрастом тоже. Как и с собеседованиями.

нет, не ошибаюсь

твой посыл:

  1. Времени в сутках маловато, на всё не хватает.

  2. А если уже есть семья?

базы нет, времени нет, постигать некогда.

путь тебе в анимашки звездочек. край.

Rastafarra ★★★★ ()
Ответ на: комментарий от Gentooshnik

Не совсем честно искать что бы подлиннее вышло. Я сейчас дам работу с матрицами и структурами, так там лисп в 10 раз длинее выйдет без [], ->, и за счет скобок. А это намного более распространенно.

Вообще быстрее всего было бы найти пример из библиотеки, тебе бы и писать ничего не пришлось.

MOPKOBKA ()
Ответ на: комментарий от no-such-file

А у Кнута показано, как вообще что угодно из одномерного массива сделать, хуч дерево, хуч двухсвязный список. Всё-таки от сверхвысокоуровнего языка, появившегося спустя десятилетия исследований в CS ожидаешь чего-то большего, чем от макроассемблера для PDP-11.

ugoday ★★★★★ ()
Ответ на: комментарий от ugoday

что угодно из одномерного массива сделать

Ну там думать надо, а многомерный массив делается тривиально. Так-то конечно машины Тьюринга хватит всем.

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

многомерные массивы вообще такая сомнительная штука, ибо легко делаются из одномерных

путем нехитрых преобразований все делается из массивов. или списков. или списков и массивов, скооперированных.

или это выносится в язык. или батарейки.

милейший, ну чтоб прям вопрос в лоб:

как сделать 10-ти мерный кубик(если это слово тут уместно) по одному миллиону элементов в строке на js? с примером кода на запись и доступ по индексам.

Rastafarra ★★★★ ()
Последнее исправление: Rastafarra (всего исправлений: 2)
Ответ на: комментарий от Rastafarra

в цэ можно так: int y[2][4]

Можно, но смысл не меняется. Это одномерный массив. С тем же успехом ты мог бы объявить его int y[8]. (Впрочем современные компиляторы наверное будут ругаться на такой чит).

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

Нэт, но зачем? Зачем ты ломаешь кормёжку? Если люди любят ковырнуть на собеседовании и не знают таких элементарных вещей? @ugoday - это к тебе тоже относится.

B0B ()
Ответ на: комментарий от Rastafarra

как сделать 10-ти мерный кубик(если это слово тут уместно) по одному миллиону элементов в строке на js? с примером кода.

Для 10-мерного массива нужно какбы 10 размерностей. Все по 1m? Это овердохрена, памяти не хватит. Но чисто технически это же ничем не отличается от 2-мерного массива, так что не понял вопроса.

no-such-file ★★★★★ ()
Ответ на: комментарий от B0B

Ладно, всем спасибо, на сегодня хватит. Благодарю всех за ответы.

Было интересно почитать отзывы. Удачи, Господа и хорошей ночи. Babene.

P.S. Bob - это дерево из головы Гарольда, а он ещё не родился (а уже старик)

B0B ()
Ответ на: комментарий от Gentooshnik

Ну в общем лиспер за 40 минут не смог придумать полезный код. Будем считать это моей автоматической победой. Пойду спать.

MOPKOBKA ()
Ответ на: комментарий от Rastafarra

с get и set

Мне лень писать, но индекс вычисляется как полином от размерностей массива. По формуле Горнера. В чём проблема?

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

Мне лень писать

В чём проблема?

ну сосбнос в этом.

в нормальном языке нет проблемы в лени. там не может быть этой проблемы. там int i = array[a][b]…[y][z] с проверками за границы.

и это только то, что я открыл для себя за один собес, я ваще не знал ЖыЭс ))

Rastafarra ★★★★ ()
Последнее исправление: Rastafarra (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA
(defvar a "Gentooshnik")
(defvar b "MOPKOBKA")

(set-macro-character #\,
  (lambda (s c)
    (symbol-value (read s)))))

(set-macro-character #\.
  (lambda (s c)
    (throw :terminate nil)))

(defun main ()
  (catch :terminate
    (loop :do (format t "Please, introduce yourself~%")
          :do (format t "Hello, ~A~%" (read)))))
* (main)
Please, introduce yourself
a
Hello, A
Please, introduce yourself
b
Hello, B
Please, introduce yourself
,a

Hello, Gentooshnik
Please, introduce yourself
,b

Hello, MOPKOBKA
Please, introduce yourself
.
*

Я предупреждал о бессмысленности и беспощадности.

Ближе к практике, недавно (с версии 6) позабавило что в C# появилась таки строковая интерполяция, которая уже давно есть в любом уважающем себя языке. В некоторых, как Common Lisp, в виде библиотеки.

Я сейчас дам работу с матрицами и структурами, так там лисп в 10 раз длинее выйдет без [], ->, и за счет скобок.

Если для решения задачи на C++ нужен целый Python и огромная сторонняя библиотека с компилятором, то честным будет и лиспу разрешить использовать библиотеки, но тогда это превратится в мерянье библиотеками. Из нужного на практике примерно всё на любом языке можно сделать. Ну, если FFI есть.

Но давай, как будет время - посмотрю. Возможно завтра. (тут без двух минут два ночи уже)

Gentooshnik ★★★★ ()
Последнее исправление: Gentooshnik (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Поясню. Сорокаминутное знакомство с clang обнаружило в нём (кроме многочисленных багов) фатальный недостаток.

Его нет в рантайме. Удачи.

Gentooshnik ★★★★ ()
Последнее исправление: Gentooshnik (всего исправлений: 1)
Ответ на: комментарий от Rastafarra

там не может быть этой проблемы. там int i = array[a][b]…[y][z]

Оспаде, это пишется один раз и навсегда. Можно погуглить, наверняка уже есть 100500 готовых реализаций.

no-such-file ★★★★★ ()
Ответ на: комментарий от Rastafarra

хороший язык

Да. Ведь вообще ты можешь и не заморачиваться а лепить массив массивов и будет тебе a[x][y][z]… Инициализация чуть сложнее но не сильно: композитор функций применяешь к new (x, y) => Array(x).fill(y), ну или в цикле проходишь. Получаешь массив массивов.

Типа так

> function mArray(d, v = 0) {
  let i = v, a; for(const x of d) { a = new Array(x).fill(v); i = a; }
  return i;
}

> mArray([2,3,4])
[
  [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ],
  [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ],
  [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ],
  [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ]
]
no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от no-such-file

Инициализация чуть сложнее но не сильно: композитор функций применяешь к new (x, y) => Array(x).fill(y), ну или в цикле проходишь.

я упустил, когда кубик на 10 измерений по ляму в строке, там проблема памяти или проца?

Rastafarra ★★★★ ()
Ответ на: комментарий от Rastafarra

когда кубик на 10 измерений по ляму в строке, там проблема памяти или проца

Ещё раз что значит в строке? Там 10 измерений, строка это последнее, над ним ещё 9. У них какие размерности? Если все по 1m, то это как бы 1m^10 памяти. Хз какое это число, гугилион? Процу то что будет, 10 чисел сложить-умножить. Можно оптимизировать для обхода, заранее вычислить начала строк и т.д.

no-such-file ★★★★★ ()
Ответ на: комментарий от Rastafarra

процу в мире js — к каждому обратиться

Я ж говорю, можно оптимизировать обход. Если рандомный доступ, то да, для 10 размерностей может быть не так быстро. Надо смотреть, может массив массивов будет быстрее, может просто в map засунуть и использовать массив индексов как ключ. Можно попробовать в wasm компилять. Но вообще я не думаю, что это так суперкритично. Странно писать числодробильню на js. Но если очень хочется, то можно. В конце-концов есть WebGL и tensorflow на GPU. Там уже есть настоящие железные 100500-мерные массивы.

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от no-such-file

Странно писать числодробильню на js

на языке «программирования». или не программирования, да. я про это.

ну ты понял.

Rastafarra ★★★★ ()
Ответ на: комментарий от no-such-file

Я ж говорю, можно оптимизировать обход.

Хрень пишем. Сам JS не бегает. Он в связке V8 и волшебной либы libuv. Короче, жрат памяти он много не будет (вообще намного меньше большинства). У него весёлый подход: data он хавает чанками. Пока считывает, производится расчёт куска. Размер числа не произвольной длины, увы, это вам не Haskell, но до 9007199254740991 складывать сможет. Так что можно пробовать устраивать и числодробилку.

Пацаны, которые свысока поплёвывают, просто не шарят.

B0B ()
Ответ на: комментарий от no-such-file

Если у тебя нет 300-400 файлов, к которым нужны быстрый доступ, то ты пишешь хеловод. Зачем тебе вообще IDE тогда?

Ты шизофреник?

Чтобы реализовать какую-то фичу нужно редактировать ~10 файлов.

Чтобы пофиксить какой-нибудь баг, нужно редактировать ~2 файла.

Если ты для реализацию какой-то функциональности редактируешь 400 файлов, то ты шизофреник который не умеет программировать и разбивать свою программу логически…

fsb4000 ★★★★★ ()
Ответ на: комментарий от Dumppper001

Но чем emacs плох?

Тем же, чем плох org-mode по сравнению с Obsidian.

В emacs куча легаси говна и багов 30 летней давности, которые никто не знает как фиксить. Сколько там чинили нумерацию строк, чтобы она не лагала и не вылезали странные баги? Или так и не починили?

При установке каждого пакета нужно добавить в конфиг какую-то стремную, совершенно нестандартизованную магию.

Конфиг – это, по-сути, манки патчинг.

Да что там говорить, я до сих пор не знаю как правильно гарантированно включать/отключать какую-то фичу: t/nil, 1/-1/0, (toggle-govno). Потому что оно может быть и так, и эдак. Это вообще нормально?

нельзя сделать npm install govno

На самом деле можно, в имаксе встроен пакетный менеджер, в котором есть почти все пакеты.

Im_not_a_robot ★★★★★ ()
Ответ на: комментарий от MOPKOBKA

Заодно покажи как твой препроцессор на libclang и Python оформить чтобы другие проекты могли его прозрачно использовать в сборке.

Gentooshnik ★★★★ ()

Что выбрать? Vim или Emacs?

Бери Racket. Там всё, что нужно есть.

anonymous ()
Ответ на: комментарий от peregrine

Только вот в играх важна производительность, джава там не очень подходит. По такой логике, для разработки игр лучше выбирать питон, в большинстве остальных ЯП точки с запятой, вдруг программист пропустит, потом исправлять, тратить время.

fernandos ★★ ()
Ответ на: комментарий от peregrine

В РФ да. Потому что в своё время вместо Fortran-а тут выбрали Cobol и Алгол.

Интересные новости, в РФ или точнее еще в СССР на фортране точно писали на порядки больше чем на коболе.

anonymous ()
Ответ на: комментарий от anonymous

Кобол старше, а потом с него быстренько на Алгол переползли ну или попытались. Когда поняли что Фортран лучше, уже сишка подъехала на западе и актуального софта на Фортране в СССР так и не написали потому что отставали. А там и СССР развалился.

peregrine ★★★★★ ()
Ответ на: комментарий от MOPKOBKA

Думаю будет важным добавить что ты используешь grep для навигации по коду и прочие подобные вещи. Это про мощь emacs.

Никто тебе не запрещает пользоваться language-сервером для навигации по коду. Но даже с твоим любимым vscode-ом случаются случаи, когда go-to-definition бросает тебя не туда (например, в *.h файл, а тебе надо в *.c). И, внезапно, нужно уже грепать.

Vovka-Korovka ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)